Autor
|
Thema: mit Python NT11 an Knoten auslesen (3713 mal gelesen)
|
Kampf-Ameise Mitglied Ingenieur
Beiträge: 129 Registriert: 12.03.2002 Abaqus Standard 6.5.1 bis 6.9.2, Intel Fortran 9.1
|
erstellt am: 30. Jan. 2008 08:17 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte mir einige immerwiederkehrende Arbeiten mit Hilfe eines Python Skriptes erleichtern. Da ich kaum Python-Kenntnisse habe geht die Sache bei mir etwas zäh von der Hand. Ich möchte nun mit Hilfe von "odbAccess" nodal temperatures (NT11) an einigen Knoten auslesen und in eine Datei schreiben. Leider schaffe ich es nicht ganz die Werte an einem Knoten auszulesen. Über probieren bin ich schonmal soweit mit dem Befehl gekommen: Code: odb.steps['Kriechrechnung'].frames[2].fieldOutputs['NT11']
weiß aber nicht was ich da noch weiter dran hängen soll und ob das überhaupt der richtige Weg ist. Gibt es irgendeine Möglichkeit die Befehle von odbAccess nachzuschauen? Ich habe bisher über probieren also mit "print" und tab usw. versucht herauszufinden welche Befehle existieren. Vielen Dank schonmal an alle die Posten. [Diese Nachricht wurde von Kampf-Ameise am 30. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nicksen Mitglied wissenschaftlicher Mitarbeiter
Beiträge: 239 Registriert: 04.05.2007
|
erstellt am: 30. Jan. 2008 08:35 <-- editieren / zitieren --> Unities abgeben: Nur für Kampf-Ameise
Hallo, also zum einen gibt es ein ABAQUS Scripting User's Manual und ein ABAQUS Scripting Reference Manual und zum anderen werden saemtliche Aktionen im CAE in der Datei "abaqus.rpy" gespeichert. Hier im Forum kam schon oft der Tip, dass man einfach alle seine Aktionen nacheinander durchfuehrt und anschließend die entsprechenden Befehle dort rauskopiert, ggf. editiert und in einem eigenen Skript ablegt. Dann kann man dieses Makro stets ausfuehren, ohne staendig die Aktionen per Klick zu taetigen. Ich schlage also vor, diese *.rpy Datei anzuschauen und dann mit den angesprochenen Hilfebuechern die notwendigen Aenderungen einzubringen. Viel Erfolg dabei. Gruß vom Nixxon ------------------ ========== == Dingsen == ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kampf-Ameise Mitglied Ingenieur
Beiträge: 129 Registriert: 12.03.2002 Abaqus Standard 6.5.1 bis 6.9.2, Intel Fortran 9.1
|
erstellt am: 30. Jan. 2008 08:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Nicksen, Im Abaqus Scriptin Manual habe ich nachgeschaut. Dort stehen die Infos nicht die ich benötige. Über die einzelnen Befehlsstrukturen steht da leider wenig drinne,oder ich finde es nicht. Die Möglichkeit mit dem Report-File fällt für mich in diesem Fall aus, da ich nicht über XY-Report oder ähnliches gehen möchte sondern ich will die Werte direkt ansprechen und über Python rausschreiben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 30. Jan. 2008 11:05 <-- editieren / zitieren --> Unities abgeben: Nur für Kampf-Ameise
Du kannst bei der Report-Funktion auch direkt auf Field Output zugreifen. Das ist der einfachst und schnellste Weg NT11 für Knoten in eine Datei schreiben zu lassen. Also Report->Field Output. Dann musst du bei Position auf 'Unique Nodal' umstellen. Nachdem du ggf. noch weitere Optionen eingestellt hast, werden nun für alle im Viewport dargestellten Knoten NT11 in eine Datei geschrieben. Es gibt auch noch einen zweiten Weg ohne Scripting. Mit dem Keyword *NODE PRINT kannst du schon vom Solver NT11 für alle Knoten oder ein Knotesets in die dat-Datei schreiben lassen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kampf-Ameise Mitglied Ingenieur
Beiträge: 129 Registriert: 12.03.2002 Abaqus Standard 6.5.1 bis 6.9.2, Intel Fortran 9.1
|
erstellt am: 30. Jan. 2008 13:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Mustaine, ich möchte schon über Python an die Knoten und dessen NT Werte direkt heran. Über Report->FieldOutput bekomme ich ja eine Liste der NT11 Werte aller Knoten. Da mein Modell zu groß ist und ich die Werte in einer bestimmten Anordnung in eine Datei schreiben möchte will ich das schon über Python machen. Ein Arbeitskollege, der leider, leider nichtmehr bei uns ist hat das auch schon getan. Allerdings hat er zeitliche VErläufe über einen Centroid audgegeben. Diese Beispiel versuche ich zu übertragen. Sein Code lautete so: Code: for step in odb.steps.values(): count+=1 counti=0 # print 'step=',count # if count>3: break for frame in step.frames: counti+=1 # print ' increment=',counti # if counti>3: break # print frame.fieldOutputs stressall=frame.fieldOutputs['S'] stress=stressall.getSubset(region=center, position=CENTROID) stressValues=stress.values
Ein weiterer Punkt warum ich genau so die Werte ansprechen will ist, dass das Script ohne CAE/Viewer laufen soll. ich will das ganze soweit automatisieren dass ich mit Hilfe eines Batch-Files die Jobs starte und danach gleich auswerte. D.h. in meinem Python-Code darf kein "viewports" vorkommen. [Diese Nachricht wurde von Kampf-Ameise am 30. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 30. Jan. 2008 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für Kampf-Ameise
Das sollte dir helfen Zugriff auf NT11 zu erhalten. Code:
from odbAccess import * from abaqus import * from abaqusConstants import *odb = openOdb(path='Job-1.odb') lastFrame = odb.steps[odb.steps.keys()[-1]].frames[-1] temperature = lastFrame.fieldOutputs['NT11'] nodes = temperature.getSubset(region=odb.rootAssembly.nodeSets[' ALL NODES']) text = '' for x in nodes.values: output = str(x.nodeLabel) +' '+ str(x.data) text = '\n'.join([text, output]) datei=file('results.txt', 'w') datei.write(text) datei.close() odb.close()
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kampf-Ameise Mitglied Ingenieur
Beiträge: 129 Registriert: 12.03.2002 Abaqus Standard 6.5.1 bis 6.9.2, Intel Fortran 9.1
|
erstellt am: 30. Jan. 2008 14:22 <-- editieren / zitieren --> Unities abgeben:
|
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 30. Jan. 2008 14:46 <-- editieren / zitieren --> Unities abgeben: Nur für Kampf-Ameise
Wenn du mehrere Bauteile hast und du mit Part- und Assemblystruktur arbeitest, solltest du erst auf die Instancen und dann auf deren Knoten zugreifen (am besten über Sets). Ansonsten tauchen Nummern mehrfach in der Liste auf. Beispiele gibts genügend im Manual. siehe Abaqus Scripting Users Manual 8.5.4 Reading model data 8.5.7 Using regions to read a subset of field output data 8.5.9 An example of reading node and element information from an output database Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |