Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Field Output aus zwei odb's

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Field Output aus zwei odb's (2998 mal gelesen)
nbuhl
Mitglied
Dipl.-Ing.


Sehen Sie sich das Profil von nbuhl an!   Senden Sie eine Private Message an nbuhl  Schreiben Sie einen Gästebucheintrag für nbuhl

Beiträge: 52
Registriert: 25.06.2007

RedHat 6.0 Workstation
ABAQUS 6.101

erstellt am: 05. Feb. 2014 16:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!
Ich arbeite erst seit kurzem mit Abaqus und habe nun eine Frage bei der mir auch meine Kollegen nicht mehr weiterhelfen können. Und zwar möchte ich zwei heat-Rechnungen vergleichen. Dabei handelt es sich jeweils um das selbe Modell (kleine Knoten- und Element-IDs), lediglich der Wärmeeintrag hat sich verändert. Nun möchte ich mir bei einem bestimmten Inkrement die Differenztemperatur der Knoten als field output generieren. Leider weiß ich nicht wie ich die Werte aus zwei verschiedenen obd's verrechnen kann. Bringt das der Abaqus Viewer von Haus aus mit?

Für Eure Tipps bin ich sehr dankbar!
Grüße!

nico

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Mustaine
Ehrenmitglied V.I.P. h.c.



Sehen Sie sich das Profil von Mustaine an!   Senden Sie eine Private Message an Mustaine  Schreiben Sie einen Gästebucheintrag für Mustaine

Beiträge: 3357
Registriert: 04.08.2005

Abaqus

erstellt am: 05. Feb. 2014 17:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für nbuhl 10 Unities + Antwort hilfreich

Odbs verschmelzen

Users Manual 3.2.19 Joining output database (.odb) files from restarted analyses
Users Manual 3.2.21 Combining data from multiple output databases


und dann die Felder miteinander verrechnen

CAE Manual 42.7.4 Creating field output by operating on fields

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

nbuhl
Mitglied
Dipl.-Ing.


Sehen Sie sich das Profil von nbuhl an!   Senden Sie eine Private Message an nbuhl  Schreiben Sie einen Gästebucheintrag für nbuhl

Beiträge: 52
Registriert: 25.06.2007

RedHat 6.0 Workstation
ABAQUS 6.101

erstellt am: 06. Feb. 2014 09:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Mustaine,
Danke für Deine Antwort. Ich glaube das geht schon in die richtige Richtung. Jedoch macht mir das Ganze ein bisschen Probleme, da die Anzahl der Steps und der Inkremente unterschiedlich sind. Beim Verbinden von Restart-ODBs scheint er mir dann die Steps mit gleicher Nummer zu überschreiben bzw. beim Kombinieren der Daten wirft er mir einen Fehler aus.

Leider ist es von der Rechnung her nicht möglich die Steps anders zu definieren um so beide Rechnungen hier anzugleichen.

Im Grunde geht es mir um den Fieldoutput von der Knotentemperatur bei einem bestimmten Inkrement. Dieses Inkrement hat aber in beiden ODBs nicht die gleiche Nummer bzw. Zeitstempel.

Vielleicht hat hier jemand noch eine Idee für einen Workaround?
Grüße!

nico

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Mustaine
Ehrenmitglied V.I.P. h.c.



Sehen Sie sich das Profil von Mustaine an!   Senden Sie eine Private Message an Mustaine  Schreiben Sie einen Gästebucheintrag für Mustaine

Beiträge: 3357
Registriert: 04.08.2005

Abaqus

erstellt am: 06. Feb. 2014 12:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für nbuhl 10 Unities + Antwort hilfreich


heat-1.txt


restart.txt

 
Das mit dem Restart hatte ich befürchtet, da beide Steps intern die ersten sind.

Zwei Ideen hätte ich noch:

1. Python
Du liest mit Python aus beiden odbs die gewünschten Daten aus, verrechnest sie und schreibst sie dann in einen neuen Step und neuen Frame auf eine der beiden odbs (oder eine ganz neue).
siehe Scripting Users Guide 9. Using the Abaqus Scripting Interface to access an output database

2. Restart
Du rechnest die erste Analyse ggf. nochmal und schreibst Restart-Daten.
Dann kopierst du die .inp und wandelst sie mit einem Editor in eine Restart-Analyse um. Das ist simpel, sofern man mit der Restart-Methodik vertraut ist.
Du liest von der ersten Analyse und setzt dann in einem dummy-Step alle Knotentemperaturen auf den Anfangswert zurück. Dann kommt der Step der die eigentliche zweite Analyse ist.
Danach kannst du die erste odb und die restart odb verschmelzen und die Daten verrechnen.
Ich habe das mal einem kleinen Beispiel getestet. Die Eingabedateien sind im Anhang.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

nbuhl
Mitglied
Dipl.-Ing.


Sehen Sie sich das Profil von nbuhl an!   Senden Sie eine Private Message an nbuhl  Schreiben Sie einen Gästebucheintrag für nbuhl

Beiträge: 52
Registriert: 25.06.2007

RedHat 6.0 Workstation
ABAQUS 6.101

erstellt am: 06. Feb. 2014 16:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!
Vielen Dank nochmal für deine Antwort. Ich denke ich werde mich jetzt ersteinmal um Deine erste Idee kümmern. Früher oder später muss man sich wohl eh mit Python auseinandersetzen. 
Grüße + Danke!

nico

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

nbuhl
Mitglied
Dipl.-Ing.


Sehen Sie sich das Profil von nbuhl an!   Senden Sie eine Private Message an nbuhl  Schreiben Sie einen Gästebucheintrag für nbuhl

Beiträge: 52
Registriert: 25.06.2007

RedHat 6.0 Workstation
ABAQUS 6.101

erstellt am: 07. Feb. 2014 10:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

So,.. nun nochmal ich. Ich habe mich heute Morgin hingesetzt und versucht mittels Scripting Manual und dem Internet ein entsprechendes Python-Skript zu basteln, dass mir die Temperatur NT11 an den Knoten aus den zwei verschiedenen ODBs ausliest, von einander abzieht und anschließend ausgibt. Das Schreiben in eine neue ODB halte ich nicht für notwendig, da mir die reine Ausgabe vorerst reichen soll.

Hier nun mein Skript mit dem ich Probleme habe. Im Grunde verstehe ich jeden Befehl bis auf die drei letzten Zeilen und genau da liegt auch der Hund begraben.
Bei der vorletzten Zeile bekomme ich im PDE folgende Fehlermeldung: "VisError: There is no valid step data on the output database. Requested operation cancelled"

Kann jemand helfen?     

Code:
from abaqus import *
from abaqusConstants import *
import visualization

# Welcher fieldOutput soll behandelt werden
f_output = 'NT11'

# Angabe der ODBs die verarbeitet werden sollen
odb_1 = '/pfad/zu/odb1'
odb_2 = /pfad/zu/odb2'

# Angabe der Steps und Frames in der jeweiligen ODB die verarbeitet werden sollen
# STEP
s_odb_1 = 'Step-1'
s_odb_2 = 'Step-2'
# FRAME
f_odb_1 = 16
f_odb_2 = 6

# Auslesen des fieldOutput in ODB_1
myodb = visualization.openOdb(path = odb_1)

step_odb_1 = myodb.steps[s_odb_1]
frame_odb_1 = step_odb_1.frames[f_odb_1]

temperatur_1 = frame_odb_1.fieldOutputs[f_output]

# Auslesen des fieldOutput in ODB_2
myodb = visualization.openOdb(path = odb_2)

step_odb_2 = myodb.steps[s_odb_2]
frame_odb_2 = step_odb_1.frames[f_odb_2]

temperatur_2 = frame_odb_1.fieldOutputs[f_output]

# Berechnen der Temperaturdifferenz
deltatemperatur = temperatur_1 - temperatur_2

# Viewport erstellen und mit zweiter ODB verbinden
myviewport = session.Viewport(name='Temperaturdifferenz', origin=(10,10), width=150, height=100)

myviewport.setValues(displayedObject=myodb)

# Ausgabe der Temperaturdifferenz
myviewport.odbDisplay.setPrimaryVariable(field=deltatemperatur, outputPosition=NODAL)
myviewport.odbDisplay.display.setValues(plotState=(CONTOURS_ON_DEF, ))



[Diese Nachricht wurde von nbuhl am 07. Feb. 2014 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Mustaine
Ehrenmitglied V.I.P. h.c.



Sehen Sie sich das Profil von Mustaine an!   Senden Sie eine Private Message an Mustaine  Schreiben Sie einen Gästebucheintrag für Mustaine

Beiträge: 3357
Registriert: 04.08.2005

Abaqus

erstellt am: 07. Feb. 2014 11:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für nbuhl 10 Unities + Antwort hilfreich

Du musst entweder auf der odb Step und Frame Container erzeugen um dort Daten abzulegen, oder temporär in der Session.

Schmeiß' mal alles im Code nach der deltatemperatur weg und füge das  ein.


Code:

currentOdb = session.odbs[odb_1]
scratchOdb = session.ScratchOdb(odb=currentOdb)
sessionStep = scratchOdb.Step(name='Session Step',
    description='Step for Viewer non-persistent fields', domain=TIME,
    timePeriod=1.0)
sessionFrame = sessionStep.Frame(frameId=0, frameValue=0.0,
    description='Session Frame')
sessionField = sessionFrame.FieldOutput(name='diff NT11',
    description='T1-T2', field=deltatemperatur)

Jetzt müsstest du in der ersten odb einen neuen Session Step mit einem Frame und Ergebnissen finden.
Danach kannst du noch ein paar Darstellungsbefehle hinzufügen.

Außerdem sind in deinem Code noch kleine Fehler. Du referenzierst beim verarbeiten von odb 2 mehrmals auf Dinge von odb 1.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

nbuhl
Mitglied
Dipl.-Ing.


Sehen Sie sich das Profil von nbuhl an!   Senden Sie eine Private Message an nbuhl  Schreiben Sie einen Gästebucheintrag für nbuhl

Beiträge: 52
Registriert: 25.06.2007

RedHat 6.0 Workstation
ABAQUS 6.101

erstellt am: 07. Feb. 2014 13:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!
Suuper! Es lief direkt durch und hat das gewünschte Ergebniss erzielt! Vielen Dank! 

Ich werde nun noch versuchen deinen Codeschnippsel vollends nachzuvollziehen und dann kann ich damit arbeiten! 
Grüße!

nico

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Kappel
Mitglied
WMA


Sehen Sie sich das Profil von Kappel an!   Senden Sie eine Private Message an Kappel  Schreiben Sie einen Gästebucheintrag für Kappel

Beiträge: 48
Registriert: 14.11.2006

EDIT:
Ich kann mit meinem Script defo1 und defo2 verarbeiten und daraus neue Felder erzeugen.
Der Fehler tritt also aus wenn ich die Daten aus zwei ODBs verarbeite.
Die Dimensionen der Felder müssen aber gleich groß sein weil ODB2 auf dem gleichen Modell basiert wie ODB1 wobei nur die Knotenkoordinaten verschoben wurden.

erstellt am: 27. Feb. 2014 14:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für nbuhl 10 Unities + Antwort hilfreich

Hallo mustaine, hallo nbuhl,

ich hänge mich hier einmal an weil ich an einem sehr ähnlichen Problem arbeite.
Ich habe zwei ODBs von denen ich die Verformungen (also das Feld U) vergleichen möchte.

mit dem zuvor genannten Code komme ich zu diesem Punkt!

Code:
# Berechnen der Temperaturdifferenz
deltatemperatur = temperatur_1 - temperatur_2

der bei mir dann so heißt:

Code:
# Berechnen der Verschiebungsdifferenz
dU = -defo1 +defo2

Wenn ich das nun mache bekomme ich folgende Fehlermeldung:
Specified operands are invalid.

Habt ihr eine Idee, es es dazu kommen kann?
Erik

[Diese Nachricht wurde von Kappel am 27. Feb. 2014 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Mustaine
Ehrenmitglied V.I.P. h.c.



Sehen Sie sich das Profil von Mustaine an!   Senden Sie eine Private Message an Mustaine  Schreiben Sie einen Gästebucheintrag für Mustaine

Beiträge: 3357
Registriert: 04.08.2005

Abaqus

erstellt am: 03. Mrz. 2014 14:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für nbuhl 10 Unities + Antwort hilfreich

Entweder du hast was vorher im Script nicht angepasst (z.B. den Namen der Variable) oder man kann die Verschiebungen nicht so direkt verrechnen. Vielleicht muss man es Komponentenweise machen, also U1, U2, U3.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz