2016-05-21 12 views
0

Ich habe eine Baugruppe, die nur aus einem Teil besteht. Ich versuche, die Summe aller Stress-Komponenten der gesamten Assembly/Part in Python zu bekommen. Mein Problem mit meiner aktuellen Methode ist, dass es ewig dauert, die Belastung jedes Elements zu summieren (siehe Code unten). Die Berichtsdateien liefern mir die Totals innerhalb einer Sekunde, also muss es einen besseren Weg geben, um diese Werte über die ODB-Datei zu bekommen.Abaqus Summe aller Spannungskomponenten

Dankbar für jeden Hinweis!

odb = session.openOdb(name='C:/temp/Job-1.odb') 
step_1 = odb.steps['Step-1'] 
stress_1=step_1.frames[-1].fieldOutputs['S'] 
#Step-1 
sum_Sxx_1=sum_Syy_1=sum_Szz_1=0 
for el in range(numElemente): 
Stress=stress_1.getSubset(region=Instance.elements[el],position=CENTROID, elementType='C3D8R').values 
sum_Sxx_1 = sum_Sxx_1 + Stress[0].data[0] 
sum_Syy_1 = sum_Syy_1 + Stress[0].data[1] 
sum_Szz_1 = sum_Szz_1 + Stress[0].data[2] 
+0

können Sie schnell auf die Daten des Integrationspunkts zugreifen: sehen Sie sich 'stressdata = stress_1.values' und dann' stressdata [i] .data' an. Das Ermitteln des Schwerpunktwerts erfordert eine zusätzliche Berechnung, die zwangsläufig langsam ist. Es ist natürlich kaum sinnvoll, den Stress so zu summieren, es sei denn, Ihre Elemente sind alle gleich groß. – agentp

Antwort

0

Direkter Zugriff von Python auf Werte ist in der Tat sehr langsam (ich habe die gleichen Probleme erlebt). Sie können mit jedem Wert eine Berichtsdatei schreiben und dann erneut mit Textdateien mit Python arbeiten. Datei nur zeilenweise füttern, relevante Zeile finden, teilen, um Spannungen zu erhalten, summieren und fortfahren.

+0

Das habe ich auch gemacht! Aber es gibt einen schnelleren Weg, die ODB-Dateien zu lesen. Schauen Sie einfach in das Handbuch von Abaqus. Sie zeigen Ihnen, wie Sie es richtig lesen. Der Code, den ich oben verwende, sucht nach jedem Element oder so. aber da gibt es einen anderen Abschnitt der odb, in dem alles zusammen addiert wird ... – wasntme0804

+0

Dann denke ich, dass es kein Python-Code mehr ist, sondern C++ (wenn ich mich richtig erinnere), mit dem du direkt auf odb zugreifst. – Nikolay

+0

Es ist definitiv Python. Ich habe keine Ahnung von C++ und beginne gerade mit dem Erlernen von Python ... Ausschau nach "Abaqus Scripting Benutzerhandbuch" Kapitel 9.5. "Aus einer Ausgangsdatenbank". In 9.5.10 zeigen sie Ihnen, wie Dispallacements gelesen werden, indem Sie Folgendes verwenden: für v in centerDisplace.values: v.data [0] usw. drucken ... Überprüfen Sie es. So habe ich es endlich getan. Der Report-File-Weg dauert noch eine Sekunde weniger, aber es ist nicht sehr elegant. Lass es mich wissen, wenn du es herausgefunden hast. Ich kann hinzufügen und Beispiel in meinem oberen Beitrag innerhalb der nächsten paar Tage, wenn Sie wünschen – wasntme0804

Verwandte Themen