| |  | Die Gewinne der Zukunft werden mit intelligenten, autonomen Elektrofahrzeugen eingefahren. (3DEXPERIENCE) |
Autor
|
Thema: Python, (2751 mal gelesen)
|
i6231701 Mitglied
 Beiträge: 5 Registriert: 12.12.2008
|
erstellt am: 19. Aug. 2009 15:16 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, das wichtigste vorweg, ich bin in Abaqus Python Scripting leider vollkommen(!) unbedarft Der Makrorecorder hilft in meinem Fall nicht weiter, da er die gewünschten Aktionen nicht aufzeichent! Ich möchte über: Tools -> Ouery -> "General Queries": Node -> "Visualization Module Queries": Probe values bestimmte Knoten auswählen (immer die gleichen, daher könnten diese im Skript fest verdrahtet bleiben) und deren Werte (z.B Mises) in eine Datei schreiben. Das lässt sich wahrscheinlich relativ einfach umsetzen, weis jemand wie Schon mal DANKE im Voraus!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kutscher81 Mitglied Doktorand

 Beiträge: 20 Registriert: 19.08.2009
|
erstellt am: 19. Aug. 2009 16:38 <-- editieren / zitieren --> Unities abgeben:          Nur für i6231701
Hi, einen Makrorecorder unter Abaqus kenne ich ehrlich gesagt nicht, aber alle deine Aktionen werden zum einen in einer rec-Datei gespeichert, die findest du in dem Ordner, in dem du dein Modell abspeicherst, und zum anderen werden alle Aktionen auch noch in ein Session-replay file gespeichert, einer rpy-Datei. Die rec-Datei wird gelöscht sobald du Abaqus beendest. Die rpy-Dateien werden eventuell auch durchnummeriert. Jedenfalls kannst du mit diesen Dateien und dem Scripting Manual ziemlich gut eigene Scripte erzeugen. Das nur mal so allgemein. Dein spezielles Problem kannst du wie folgt lösen: Wenn du ein Job gerechnet hast und im Visualization-Modul bist, dann erzeuge ein x-y Plot aus deinem field output, der sollte schon die gewünschten Ausgabe-Variablen enthalten, dort kannst du auswählen an welcher Stelle du den Output haben möchtest, u.a. unique nodal. Dann wählst du noch aus was für diesen Knoten angezeigt werden soll, z.B. Mises. Einen Tab weiter kannst du dir die Knoten über deren Label wählen. Dann klickst du auf Plot und der Kram wird dir angezeigt. Abschließend erzeugst du ein report-file des current viewport. Das report-file ist deine gewünschte Datei, die die gewünschten outputs enthält. Den ganzen Kram guckst du dir dann über das rec-file an und du kannst den Code fast eins zu eins übernehmen, um ihn in ein Script einzubauen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
i6231701 Mitglied
 Beiträge: 5 Registriert: 12.12.2008
|
erstellt am: 19. Aug. 2009 17:21 <-- editieren / zitieren --> Unities abgeben:         
Hallo, .... den Markorekorder gibt es unter: File -> Macro Manager -> Create ... Danke für den Hinweis mit den XY Plots, auf die Idee kam ich in der Zwischnzeit auch schon. Heraus kommt dabei folgendes
from abaqus import * from abaqusConstants import * import __main__
def Macro1(): import visualization import xyPlot import displayGroupOdbToolset as dgo odbName=session.viewports[session.currentViewportName].odbDisplay.name session.odbData[odbName].setValues(activeFrames=(('AnonymousSTEP1', (80, )), )) odb = session.odbs['irgend_eine.odb'] session.xyDataListFromField(odb=odb, outputPosition=NODAL, variable=(('U', NODAL, ((INVARIANT, 'Magnitude'), )), ), nodeLabels=(('PART-1-1', ( '982702', )), )) ... usw. Praktisch wäre es nun noch, wenn man den Step-Namen und den in diesem Fall letzten Frame nicht händisch vorgeben müsste. Lässt sich irgendwie abfragen wie der Name des z.B. ersten Steps ist und wieviele Frames dieser hat? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HerrHansen Mitglied Dipl.-Ing.
 
 Beiträge: 257 Registriert: 03.12.2005 Abaqus/CAE 6.3 bis 6.12
|
erstellt am: 20. Aug. 2009 08:19 <-- editieren / zitieren --> Unities abgeben:          Nur für i6231701
Anzahl der frames: len(session.odbs[abcxyz].steps[abcxyz].frames)Name erster Step: session.odbs(abcxyz).steps.keys()[0] Wenn du im Command line interface jeweils "print" davor schreibst, kannst du dir die Ausgaben "live" anschauen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kutscher81 Mitglied Doktorand

 Beiträge: 20 Registriert: 19.08.2009
|
erstellt am: 20. Aug. 2009 09:36 <-- editieren / zitieren --> Unities abgeben:          Nur für i6231701
Hmm... Ich plotte meist über alle Steps und alle Frames, da stellt sich mir die Frage nicht. Darüber hinaus erzeuge ich meine Steps auch mit einem Python-Script und gebe dort direkt den Namen vor, den ich dann später aufrufe, wenn ich ihn brauche. Schau mal in die Dokumentation (im Scripting Manual), wie der Befehl dort erklärt wird, vielleicht ist es gar nicht nötig, den Step und den Frame vorzugeben. session.odbData[odbName].setValues(activeFrames=(('AnonymousSTEP1', (80, )), )) odb = session.odbs['irgend_eine.odb'] So wie ich diesen Befehl verstehe, wählst du hier einen speziellen Step und einen speziellen Frame, wenn du diesen Befehl weglässt, dann bekommst du die Werte von allen Frames und allen Steps oder willst du das gar nicht? Ansonsten kann dir hoffentlich ein anderer Forumsteilnehmer weiterhelfen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
i6231701 Mitglied
 Beiträge: 5 Registriert: 12.12.2008
|
erstellt am: 20. Aug. 2009 14:36 <-- editieren / zitieren --> Unities abgeben:         
Besten Dank für die Hilfestellung! Meine Lösung sieht nun so aus:
from abaqus import * from odbAccess import * from abaqusConstants import * import __main__ knoten = [1526573,1526574,1526838] odbname = "blablubb.odb" out_file = "output.txt" var = "U" odb = openOdb(path=odbname);
# Step 1 step = odb.steps.keys()[0] print "Step : " + step # -1: letzter Frame des Steps # Ansonsten Frame Nr. lastFrame = odb.steps[step].frames[-1] variable=lastFrame.fieldOutputs[var] fieldValues=variable.values f=open(out_file, 'w') for v in fieldValues: if knoten.count(v.nodeLabel) != 0: # Hier die Formatierung der Ausgaben anpassen print 'Node = %d U[x] = %6.4f, U[y] = %6.4f' % (v.nodeLabel, v.data[0], v.data[1]) f.write("Node = " + str(v.nodeLabel) + " U[x]= " + str(v.data[0]) + " U[y]= " + str(v.data[1]) +"\n") f.close() Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |