Autor
|
Thema: ALLSE aus .odb in .txt Datei mit Python (2010 mal gelesen)
|
exzessiv Mitglied Student
Beiträge: 23 Registriert: 04.07.2012
|
erstellt am: 04. Jul. 2012 23:06 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich beschäftige mich erst seit kürzerem mit dem Python-Programmieren und habe somit noch erhebliche Schwierigkeiten die Befehle im Scripting Manual zu verstehen, geschweige denn anzuwenden. Da ich auch neu im Forum bin, hoffe ich mal, dass meine Frage hier auch am richtigen Platz gestellt wird. Also: Ich muss für ein Projekt aus einer .odb Datei die Gestaltänderungsenergie (ALLSE) auslesen und den Wert bestenfalls in einer .txt Datei speichern, um ihn später vergleichen zu können. Es interessiert die endgültige Energie am Ende des Steps (ich habe nur einen). Hat da vll jemand schonmal etwas in die Richtung gemacht? Wenn ja, wäre es super wenn mir einer ein solches oder ähnliches Script geben könnte, damit ich mir die Befehle klarmachen kann. Vll wisst ihr ja aber auch die Befehle die ich brauche und ich versuchs alleine hinzuschustern Ich bin über Hilfe jeder Art dankbar Grüße, Elias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
slein89 Mitglied
Beiträge: 139 Registriert: 30.04.2012
|
erstellt am: 05. Jul. 2012 10:53 <-- editieren / zitieren --> Unities abgeben: Nur für exzessiv
|
exzessiv Mitglied Student
Beiträge: 23 Registriert: 04.07.2012
|
erstellt am: 05. Jul. 2012 11:07 <-- editieren / zitieren --> Unities abgeben:
|
slein89 Mitglied
Beiträge: 139 Registriert: 30.04.2012
|
erstellt am: 06. Jul. 2012 09:15 <-- editieren / zitieren --> Unities abgeben: Nur für exzessiv
Hi sry hat etwas gedauert, weil mir was dazwischen kam. Im Anhang findest du ein Python Skript, welches dir die Energie zum letzten Zeitpunkt in eine *.txt Datei schreibt. Ich habe es ein wenig kommentiert, aber alles nur husch husch erledigt. Wenn du noch Fragen hast immer her damit. Wie du das Skript ausführst weißt du? Grüße Slein Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
exzessiv Mitglied Student
Beiträge: 23 Registriert: 04.07.2012
|
erstellt am: 06. Jul. 2012 12:26 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank, das ist ja überragend. Ich hatte nicht verstanden, dass man für alles Objekte erzeugen muss. Ja, ich weiß wie man das Skript in Abaqus ausführen kann. Gibt es auch die Möglichkeit es durch einen Doppelklick auf das Programm zu starten, wenn Abaqus geöffnet ist? Quasi einen Skript-laden-Befehl? Gehe ich ähnlich vor, wenn ich mir für die Knoten in einem Modell die Verschiebung ausgeben lassen will? Also die einzelnen Objekte erzeugen und dann über odb.steps['Step-1'].frames[1].fieldOutputs[''].values gehe? Ich habe mich einmal an einem Skript versucht. Ich will die Knoten und die dazugehörige Spannung ausgeben lassen und wieder in eine .txt Datei schreiben. Die Knoten und die Spannungen bekomme ich. Allerdings haut das speichern nicht hin. Auserdem interessiert mich die Magnitude der Verschiebung, so wie man sie sich auch in Abaqus ausgeben lassen kann und nicht die Verschiebungen in die einzelnen Richtungen. Danke schonmal im Voraus [Diese Nachricht wurde von exzessiv am 06. Jul. 2012 editiert.] [Diese Nachricht wurde von exzessiv am 06. Jul. 2012 editiert.] So, jetzt wird auch eine Datei erstellt, allerdings mit fortlaufendem Text. Ich hätte gerne, dass jeder Knoten mit den jeweiligen Verschiebungen in einer eigenen Zeile steht. Auserdem verstehe ich moch nicht, wie ich die Magnitude bekomme... Gruß, Elias [Diese Nachricht wurde von exzessiv am 06. Jul. 2012 editiert.] [Diese Nachricht wurde von exzessiv am 06. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
slein89 Mitglied
Beiträge: 139 Registriert: 30.04.2012
|
erstellt am: 06. Jul. 2012 14:42 <-- editieren / zitieren --> Unities abgeben: Nur für exzessiv
Hi. Was genau meinst du mit "Mit Doppelklick ausführen, wenn ABAQUS bereits läuft"? Willst du in deinem Datei Browser auf die Datei "skript.py" klicken und dann soll das Skript ausgeführt werden? Das dürfte so einfach nicht funktionieren, weil du für die Auswertung der ODB das Skript über ABAQUS starten musst. Ich kann deine angehängt Datei nicht lesen. Was meinst du mit Abspeichern? In eine Datei schreiben? Dazu brauchst du in Python eigentlich nur 3 Sachen: 1. FILE = open('datei.txt','w') ... öffnet eine Datei zum Schreiben. FILE ist ein Objekt mit dem du auf die Datei zugreifen kannst. 2. FILE.write() ... schreibt alles in den runden Klammern in die Datei 3. FILE.close() ... mit leeren runden Klammern!!! Schließt die Datei. Magnitude ist doch nur der Betrag oder? Den kannst du dir selber ausrechnen aus den Verschiebungskomponenten.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
slein89 Mitglied
Beiträge: 139 Registriert: 30.04.2012
|
erstellt am: 06. Jul. 2012 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für exzessiv
Du musst noch Zeilenumbrüche schreiben. Der lautet wie in den meisten Sprachen "\n" Schreib mal statt der letzten for Schleife: from math import sqrt for v in fieldValues: magnitude = sqrt(v.data[0]**2 + v.data[1]**2) OUT.write('Node = %d U[x] = %6.4f, U[y] = %6.4f, Magnitude = %6.4f\n' % (v.nodeLabel, v.data[0], v.data[1, magnitude])) Habe das nicht getestet, sollte aber funktionieren, wenn ich mich nicht vertippt habe.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
exzessiv Mitglied Student
Beiträge: 23 Registriert: 04.07.2012
|
erstellt am: 06. Jul. 2012 15:00 <-- editieren / zitieren --> Unities abgeben:
Ja, ich meinte mit doppelklick auf Programm.py und das wird dann in Abaqus geladen. Ich habe ein 3D Modell, wie lasse ich mir auch noch die Verschiebung in z Richtung ausgeben? Ich habe das vorhin einfach mal mit U[z] und v.data[3] versucht, das hat allerdings nicht hingehauen... Wenn ich das Skript umschreibe kommt eine Fehlermeldung: in v.data[0], v.data[1, magnitude] invalid Index. Bedeutet das, dass magnitude da nicht reingehört? So, ich habe die Verschiebung in z-Richtung jetzt auch. Ich muss v.data[2] verwenden, da Python ja bei 0 anfängt.... [Diese Nachricht wurde von exzessiv am 06. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
slein89 Mitglied
Beiträge: 139 Registriert: 30.04.2012
|
erstellt am: 06. Jul. 2012 15:43 <-- editieren / zitieren --> Unities abgeben: Nur für exzessiv
|
exzessiv Mitglied Student
Beiträge: 23 Registriert: 04.07.2012
|
erstellt am: 10. Jul. 2012 20:13 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank, meine Probleme sind gelöst. Ich habe jetzt ein Script, dass mir die Energie und eines, das mir die Verschiebung zugehörig zu den Knoten ausgibt. Die Magnitude habe ich aus den 3 Verschiebungen errechnet, das klappt auch super Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
slein89 Mitglied
Beiträge: 139 Registriert: 30.04.2012
|
erstellt am: 11. Jul. 2012 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für exzessiv
Alternativ kannst du auch direkt die Magnitude auslesen siehe: https://www.sharcnet.ca/Software/Abaqus610/Documentation/docs/v6.10/books/ker/default.htm Abschnitt 31.6.6. bei dir dürfte das dann so was wie: magnitude = fieldValues.getScalarField(invariant=MAGNITUDE) for m in magnitude: OUT.write("Knoten: %d, Magnitude: %6.4f\n",(m.nodeLabel, m.data)) sein. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |