Ich habe eine ODB-Datei namens plate2.odb, die ich die Stammdaten aus extrahieren möchte. Dazu habe ich den folgenden einfachen Code erstellt, der die Feldausgabe E (Dehnung) für jedes Element durchläuft und in einer Liste speichert.Beschleunigen Sie eine langsame Schleife in Abaqus-Python-Code zum Extrahieren von Stammdaten aus ODB-Datei
from odbAccess import openOdb
import pickle as pickle
# import database
odbname = 'plate2'
path = './'
myodbpath = path + odbname + '.odb'
odb = openOdb(myodbpath)
# load the strain values into a list
E = []
for i in range(1000):
E.append(odb.steps['Step-1'].frames[0].fieldOutputs['E'].values[i].data)
# save the data
with open("mises.pickle", "wb") as input_file:
pickle.dump(E, input_file)
odb.close()
Die Ausgabe ist, die for-Schleife, die die Dehnungswerte in eine Liste lädt wird eine lange Zeit (35 Sekunden 1000 Elemente) nehmen. Bei dieser Rate (0,035 Abfragen/Sekunde) würde ich 2 Stunden brauchen, um die Daten für mein Modell mit 200.000 Elementen zu extrahieren. Warum dauert das so lange? Wie kann ich das beschleunigen?
Wenn ich eine Single-Strain-Abfrage außerhalb von Python lool mache dauert es 0,04 Sekunden, also weiß ich, dass dies kein Problem mit der Python-Schleife ist.
Hinweis Sie können dies noch kompakter schreiben mit Listenverständnis 'E = [v.data für v in EE.values]' (vielleicht auch ein wenig Leistungssteigerung) – agentp
Nizza. Übrigens kann diese Technik (die auch im Abaqus Scripting Benutzerhandbuch unter "Erstellen von Objekten zum Speichern temporärer Variablen" erwähnt wird) in jedem Python-Skript verwendet werden, in dem Sie wiederholte Rekonstruktionen einer Folge von Objekten vermeiden möchten. –