Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  [Python Skript] Ausgewählte Daten aus odb auslesen

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
  
Die Gewinne der Zukunft werden mit intelligenten, autonomen Elektrofahrzeugen eingefahren. (3DEXPERIENCE)
Autor Thema:  [Python Skript] Ausgewählte Daten aus odb auslesen (3624 mal gelesen)
O Shovah
Mitglied
Student


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

Beiträge: 17
Registriert: 01.03.2011

Catia V5 R19
Phenom II X4 940 BE
HD 4870X2
8 GB RAM

erstellt am: 01. Aug. 2013 16:50    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 bin noch ziemlich neu im Thema python scripting für Abaqus und tue mich etwas schwer mich durchs Scripting User´s und Reference Manual zu kämpfen. Grundsätzlich brauche ich das Skript um Daten aus verschiedenen odb-Dateien auszulesen und in eine Textdatei zu schreiben. Erste Iteration, die schon klappt ist manuell im Skript Jobname, gewünschten Step etc. einzutragen und dann das Skript die Ergebnisdatei schreiben zu lassen.
Jetzt würde ich das gerne ein wenig automatisieren oder vereinfachen, damit man nicht für jede Auswertung erst das halbe Skript umschrieben muss. In einem Beispielcode hab ich folgendes gefunden:

odbName = session.viewports['Viewport: 1'].displayedObject.name
odb= session.odbs[odbName]

womit ich schon mal den Job über die aktive Auswahl in Abaqus auswählen kann. Das würd eich jetzt gerne weiterführen und z.B. auch über Auswahl der Elemente festlegen können, welche Werte rausgeschrieben werden. Der Befehl getActiveNodeLabels() scheint da aber nicht das richtige zu sein, oder? Activ sind hier scheinbar immer alle im Viewport angezeigten Elemente. Gibts ne einfach Möglichkeit die markierten Elemente zu verwenden?

Vielen Dank schon mal im Vorraus!

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

O Shovah
Mitglied
Student


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

Beiträge: 17
Registriert: 01.03.2011

Catia V5 R19
Phenom II X4 940 BE
HD 4870X2
8 GB RAM

erstellt am: 02. Aug. 2013 14:31    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

Ich glaube ich bin der Lösung schon ein wenig näher gekommen mit diesem Codebeispiel:

vp = session.viewports.values()[0]
odbName = vp.displayedObject.name
odb= session.odbs[odbName]


current_step_number = vp.odbDisplay.fieldFrame[0]
current_step_name = odb.steps.keys()[current_step_number]
current_frame_number = vp.odbDisplay.fieldFrame[1]

Damit kann ich jetzt entweder alle Frames oder einen bestimmten übers selektieren ausgeben. Wie könnte man jetzt am besten eine Auswahl an Frames bestimmen? Markieren lässt sich ja immer nur einer. Doch wieder mauell ins Skript eintragen?

Das Thema Knoten auswählen müsste doch irgendwie über leaf zu Lösen sein oder?

leaf = dgo.LeafFromOdbElementPick(elementPick=(('PART-1-1', 225, (........ Hier sind dann die ganzen selektierten Knoten in irgendeiner Form aufgelistet

session.viewports['Viewport: 1'].odbDisplay.displayGroup.replace(leaf=leaf)

Wie bekomme ich jetzt die Knoten aus der aktuellen Auswahl?

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: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 02. Aug. 2013 15:21    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 O Shovah 10 Unities + Antwort hilfreich

Wenn Regionen (Knoten oder Elemente) erst während dem Postprocessing ausgewählt werden sollen, ist es das Beste wirklich mit ein- und ausblenden zu arbeiten und dann die aktiven Knoten und Elemente abzufragen.
Sind die Regionen vorher schon klar, arbeitet man am besten mit Knoten- und Elementsets.


Will man während das Skript läuft Daten eingeben (z.B. den zu verwendenden Frame), kann man sich mit getInput() oder raw_input() eine kleine Abfrage einbauen.

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

O Shovah
Mitglied
Student


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

Beiträge: 17
Registriert: 01.03.2011

Catia V5 R19
Phenom II X4 940 BE
HD 4870X2
8 GB RAM

erstellt am: 05. Aug. 2013 14: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

danke für die Antwort Mustaine! Ja, ich bekomme die odbs und muss damit arbeiten, am Modell kann ich nichts beeinflussen, aber es soll natürlich möglichst universell auf verschiebene Jobs passen.

Aber ausblenden ist denk ich auch nicht viel mehr Arbeit als markieren, das stimmt schon. Ich werde denk ich eh zwei Skripte machen. Eins das mit der Auswahl im CAE arbeitet und eins das man über mehrere odbs laufen lassen kann mit festen Eingaben.
Da tu ich mich als jemand der nur gelegentlich programmiert aber etwas schwerer. Wie strukturiere ich das Skript am besten, dass sich einerseits möglichs variabel alles einstellen und auswählen lässt, andererseits der User aber nicht das ganze Skript nach den Stellgrößen durchsuchen muss. Im ersten Schritt hab ich einfach ein-/auskommentiert, aber das ist ja nicht zumutbar. Vielleicht am Anfang des Skripts ein paar Variablen einführen mit denen man bestimmte Funktionen über if-Abfragen einschaltet oder Stellgrößen bereits am Anfang definiert?

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: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 05. Aug. 2013 17:55    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 O Shovah 10 Unities + Antwort hilfreich

Variablen sind wahrscheinlich effektiver als Code-Blöcke auszukommentieren.

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

O Shovah
Mitglied
Student


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

Beiträge: 17
Registriert: 01.03.2011

Catia V5 R19
Phenom II X4 940 BE
HD 4870X2
8 GB RAM

erstellt am: 06. Aug. 2013 14:47    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

Eigentlich brauchte ich die Werte doch an den Integrationspunkten, nicht an den Knoten. Ich bin aber noch nicht drauf gekommen wie ich an diese Werte dran komme.

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: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 06. Aug. 2013 15:03    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 O Shovah 10 Unities + Antwort hilfreich

Abaqus Scripting Users Manual 9.5.7 Using regions to read a subset of field output data

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

O Shovah
Mitglied
Student


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

Beiträge: 17
Registriert: 01.03.2011

Catia V5 R19
Phenom II X4 940 BE
HD 4870X2
8 GB RAM

erstellt am: 07. Aug. 2013 14:28    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

wenn ich den Abschnitt richtig verstehe kann ich zwischen odb.steps[AB].frames[bla].FieldOutput[XY] und .values[Yz].data ein .getSubset(position=INTEGRATION_POINT) einfügen. Das läuft auch ohne Fehler, gibt aber die gleichen Werte aus. Nimmt er wenn ich den Teil weglasse default die Integrationspunkte?
Der Fehler liegt doch wo anders. Der Code gibt zwar die richtige Anzahl an Werten aus, aber leider die falschen wie ich jetzt bemerkt habe und sogar für Elemente die keine Werte für die SDVs haben. Ich glaub die Schleife über die activeNodeLabels ist flasch, da muss ich nochmal drüber schaun.

Wichtiger wäre es jetzt eigentlich die gewünschten Elemente auch ohne CAE übers Skript auszuwählen. Über ElementLabel wird keinen Sinn machen, eher über Koordinaten. Die Proben sind i.d.R. quaderförmig.

Edit:
Nach kleineren Schwierigkeiten kann ich jetzt auf die Koordinaten zugreifen, aber wie verknüpfe ich die jetzt? Über odb.rootAssembly.instance['PART-1-1'].nodes[n].coordinates bringts mir ja nichts, weil ich dann immern noch nicht weiß welches values.data zu welchen Koordinaten gehört.

Aber über step.frames[Y].fieldOutputs['bla'].values[X].instance.nodes[Z].coordinates bekommt man sie ja auch. Aber warum gibts zu einem Value wieder alle Knoten? Ich glaube ich habe da noch ein Verständnisproblem. Ich bekomme doch von jedem Element zu jedem Integrationspunkt einen Wert, deswegen hab ich auch mehr Values als Knoten. Aber müsste ein Value (oder eben max. 8) nicht trotzdem einem Knoten zugeordnet werden können? Gibt es sowas wie die Koordinaten eines Integrationspunktes? Ich muss für die Werte ja mit einer Schleife übe rdie Values laufen und die Abbruchbedingung sollte aus der Geometire folgen.

[Diese Nachricht wurde von O Shovah am 07. Aug. 2013 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: 3554
Registriert: 04.08.2005

Abaqus

erstellt am: 08. Aug. 2013 09:56    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 O Shovah 10 Unities + Antwort hilfreich

Wenn du COORD als Field Output für Integrationspunkte anforderst (geht nicht in CAE), müsstest du das mit deinem Skript abfragen können.

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

O Shovah
Mitglied
Student


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

Beiträge: 17
Registriert: 01.03.2011

Catia V5 R19
Phenom II X4 940 BE
HD 4870X2
8 GB RAM

erstellt am: 30. Aug. 2013 14:55    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

Komme jetzt erst wieder dazu am Skript weiter zu arbeiten. Den Field Output müsste ich ja vor der Simulation anfordern oder? Das Problem ist, dass ich fertige odbs bekomme bei denen dieser Fieldoutput im Moment nicht gesetzt ist. Würde das überhaupt mein Problem lösen? Damit kann die Koordinaten doch immer noch nicht bestimmten Values zuweisen.

Das einzige was ich bisher gesehen hatte war über das assembly die ElementLabels zu bekommen und die zugehörigen Nodes. Deren Koordinaten vergleiche ich dann in der Schleife mit meinem gewünschten Bereich. Mit den gefilterten Labels geh ich dann wieder in die FieldOutputs mach ne Schleife über die Values mit passendem Label und schreib mir deren Wert raus. Geht das nicht irgendwie eleganter? Das sind ja jetzt 3 Schleifen über alle Elemente/Knoten was bei größeren Parts mit vielen Frames ganz schön dauern kann.

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)2023 CAD.de | Impressum | Datenschutz