Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  python step time, frames & Fieldoutput Variablen

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:  python step time, frames & Fieldoutput Variablen (4728 mal gelesen)
Gunkerle
Mitglied
WMA


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

Beiträge: 133
Registriert: 15.03.2007

erstellt am: 15. Apr. 2008 15:49    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 alle zusammen,
ich habe ein paar Fragen bzgl. Python skripting:

Ziel ist alle vorhanden steps und jeweils alle dazu verfügbaren Frames & jeweils alle dazu verfügbaren FieldOutput-Variablen auszulesen abzuspeichern in Variablen, um Sie für die spätere Verwendung/Manipulation zur Verfügung zu haben.
Dazu benötige ich die steptime für jeden step, die maximale anzahl an frames, maximale Anzahl an feldvariablen (pro frame), um diese gezielt mittels for schleifen ansprechen zu koennen. 

Meine Fragen lauten deshalb:


(1.)  Wie komme ich für jeden beliebigen step an die jeweilige step time heran?
(2.)  Wie komme ich für jeden beliebigen step an die maximale frameanzahl heran?
(3.)  Wie komme ich für jeden beliebigen step an die maximale FieldOutput-Anzahl heran?

Bezogen auf einen fest vorgebenen step, fest vorgebenen frame & eine fest vorgegebene Ausgabevariable würde laut Abaqus Manual das ganze wie folgt aussehen:

lastFrame = odb.steps['Step-1'].frames[-1]  # letzter frame
for fieldName in lastFrame.fieldOutputs.keys():
    print fieldName                # ausgabe aller Feldvariablen
for f in lastFrame.fieldOutputs.values():
    print f.name, ':', f.description
    print 'Type: ', f.type
displacement=lastFrame.fieldOutputs['U']  # exemplarisch x,y-Werte von Displacement von Step-1, letzter frame ausgeben
fieldValues=displacement.values
for v in fieldValues:
    print 'Node = %d U[x] = %6.4f, U[y] = %6.4f' % (v.nodeLabel,
    v.data[0], v.data[1])

# Mein Versuch das zu bewerkstelligen lautet bisher:


from abaqus import *
from abaqusConstants import *
import visualization
import odb
import odbAccess
import step

myOdb=session.openOdb(name='myOdb', path='visco_3steps.odb', readOnly=False)
# oeffnen der ODB

Nosteps1={}
Nosteps1=myOdb.steps.keys()
laengeS=len(Nosteps1)
# ablegen aller stepnamen in Nosteps1 & Gesamtanzahl der steps in laengeS


# Was klappt ist für alle steps den Gesamt-Container des letzten frames ausgeben:
lastFrame={}
for stepanz in range (0,laengeS):
  lastFrame = myOdb.steps[myOdb.steps.keys()[stepanz]].frames[-1]
#firstFrame= lastFrame = myOdb.steps[myOdb.steps.keys()[stepanz]].frames[0]
  print 'last FRAME :',stepanz, lastFrame
# Zugriff auf den letzten (ersten) Frame des jeweiligen Steps

Obiger Print Befehl liefert für den ersten Step:
last FRAME : 0 ({'cyclicModeNumber': None, 'description': 'Increment      4331: Step Time =  5.0000E-03', 'domain': TIME, 'fieldOutputs': 'Repository object', 'frameId': 4331, 'frameValue': 0.00499999988824129, 'frequency': None, 'incrementNumber': 4331, 'isImaginary': False, 'loadCase': None, 'mode': None})

Step time ist also hinterlegt, nur wie komme ich an Step-Time, frameID===Increment Nummer, frameValue===realer Zeitpunkt  heran?

Gewollt ist etwas in der Art:
frames_steps={}
for stepanz in range (0,laengeS):
    for anzahlframes in range (0,anzFrame):
        frames_pro_steps=myOdb.steps[myOdb.steps.keys()[stepanz]].frames[  ÜBER ALLE FRAMES d.h. von 0.0 bis maxframe    ]
# Abspeichern der Step/Frame-Daten in eine Liste der Form (steps-1 x frames_step1, step-2 x frames_step2, ..., last_step x frames_last_step)
# um damit beliebig auch auf unbekannte Daten zugreifen zu können

felder_frame={}
for anzahlfelder in range (0,anzFelder)
    felder_frame=frames_pro_steps.fieldOutputs[  Speicherstelle des aktuellen OUTPUTFIELDS === anzahlfelder(???)  ] 

# An der Stelle --> [  Speicherstelle des aktuellen OUTPUTFIELDS === anzahlfelder(???)  ] wird ein String erwartet
# würde obige Variante funktionieren?

Sinn der ganzen Sache ist es dann mittels
felder_frame.values[] etc. auf die abgespeicherten Werte, positionen Typen etc. ganz beliebig zugreifen zu können, diese durch das Speichern z.B. in externen Dateien dann besser verwalten zu können.

# Mein Versuch die Anzahl der gespeicherten Felder zu bestimmen ging leider schief:
counter=0
for fieldName in lastFrame.fieldOutputs.keys():
    counter=counter+1
    laengeFeldnamen=len(fieldName)
# gibt die Laenge der Strings der einzelnen Feldvariablen aus & leider nicht die Anzahl der vorhandenen Feldvariablen :-(
    AnzFelder=counter # kommt einfach nur Quark heraus
    print anzFelder, laengeFeldnamen, fieldName


# Mittels folgendem Code-Teil kann man dann  auf die jeweiligen frames zugreifen.
for anzsteps in range (0,laengeS):
    s1=myOdb.steps[myOdb.steps.keys()[anzsteps]]
    print  's1 ist =', s1
    frK= s1.getFrame(0.03)
    print  'frK ist =', frK

Wenn jemand Rat weiss auch bei Unterpunkten bitte Antworten.


ciao Gunkerle


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: 19. Apr. 2008 13:51    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 Gunkerle 10 Unities + Antwort hilfreich


odb_info_mod.txt

 
Ich habe mir deinen Post nicht komplett durchgelesen, aber das beigefügte Script sollte dir trotzdem helfen.

Öffne deine odb und starte das Script. Du solltest dann etwas in der Message Area im Viewer sehen.

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