| |
| KISTERS 3DViewStation: Effektiver Know-how-Schutz von sensiblen Produktdaten, eine Pressemitteilung
|
Autor
|
Thema: gemittelte Knotenspannung per Pythonskript abfragen (1700 / mal gelesen)
|
aup Mitglied
Beiträge: 80 Registriert: 16.08.2007
|
erstellt am: 29. Nov. 2018 06:59 <-- editieren / zitieren --> Unities abgeben:
Liebe Abaqus/Python-User, ich möchte die gemittelte Knotenspannung S11 (vmtl. .data[0]) eines Auswerte-NodeSets an einem Biegebalken abfragen. Das NodeSet an den Balkenvarianten ist mit unterschiedlicher Netzdichte und verschieden Elementen vernetzt. (Der Balken ist eine Modellbeispiel.) Die Spannungen will ich aufsummieren und durch die Anzahl der erhalten Knotenspannungen (Knoten) teilen und damit Durchschnittsspannung berechnen. Das Ergebnis möchte ich in eine Liste schreiben, die ich später zippe und als Tabelle exportiere. 1.) Mein Problem ist aber die Spannungsabfrage. Ich werde leider aus dem Manual nicht schlau. und sämtliche Programmierversuche schlugen fehl. Gibt es irgendwo eine - bestenfalls mit Beispielen hinterlegte - Übersicht uber eine Odb-Abfrage? 2.) Kann man "elegant" nach der Knotenanzahl des NodeSets oder der Anzahl der Knotenspannungswerte fragen, damit ich den Durchschnitt berechnen kann? Oder gelingt dies nur durch aufsummieren eines "Zählers"? 3.) Ich bin mir auch nicht sicher ob es richtig ist, wie ich die Modelle der Modellschar aufgebaut habe. Ich habe Geometry-Sets im Part erzeugt und muss dann immer die Instance mit angeben... ist es besser die Geometry-Sets im Assembly zu erstellen? Ich freue mich schon auf eure Antworten und Bedanke mich im Voraus Gruß, aup ------------------ Unser Wissen ist ein Tropfen, was wir nicht wissen, ist ein Ozean. Isaac Newton (1643-1727) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
samson05 Mitglied Wissenschaftlicher Mitarbeiter
Beiträge: 104 Registriert: 20.05.2013 Xeon E3-1245 v5 @3.50 GHz 64GB Ram 512 Gb SSD Inventor 2019, Ansys 2020R2, Abaqus 2020 Windows 7 64bit
|
erstellt am: 29. Nov. 2018 08:42 <-- editieren / zitieren --> Unities abgeben: Nur für aup
Guten Morgen, eine schnelle Antwort von mir. Ich habe kürzlich ähnliches gemacht. Code:
s11Set = odb.rootAssembly.elementSets['SIGMA_ZUG'] s11_Values = odb.steps['load'].frames[-1].fieldOutputs['S'].getSubset(region=s11Set)s11_List = [] summe_s11 = 0 for i,e in enumerate(s11_Values.values): s11 = s11_Values.values[i].data[0] s11_List.append(s11) summe_s11 = summe_s11 + s11 #hier ist die Schleife vorbei #Hier die Mittelwertberechnung s11_max = max(s11_List) Laenge_s11 = len(s11_List) s11_mean = summe_s11/Laenge_s11
Code:
#Das muss noch vor den Code, habe ich vergessen.. odbname = 'Modellname' path = './' myodbpath = path + odbname + '.odb' odb = openOdb(myodbpath)
Einfach mal ausprobieren. Die Sets habe ich in der Assembly erstellt.
[Diese Nachricht wurde von samson05 am 29. Nov. 2018 editiert.] [Diese Nachricht wurde von samson05 am 29. Nov. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3585 Registriert: 04.08.2005 Abaqus
|
erstellt am: 29. Nov. 2018 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für aup
Vorsicht, Spannungen sind erstmal Elementergebnisse und liegen an den Integrationspunkten. Dort würde man sie dann auch auslesen. Entweder man fordert vom Solver die Daten gemittelt an den Knoten an und liest sie dann dort auch gezielt aus oder man geht einfach über Report ->Field Output->Unique Nodal. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aup Mitglied
Beiträge: 80 Registriert: 16.08.2007
|
erstellt am: 29. Nov. 2018 11:00 <-- editieren / zitieren --> Unities abgeben:
Richtig, das oben genannte Skript gibt mir eine Mittlung die Spannungswerte der Integrationsstützstellen der Elemente, die an mein GeometrySet (Linie) grenzen, an. Das ist das gleiche wie ein avg() via HistoryOutput. Das ist nicht das was ich wollte. Ich will die gemittelten Knotenspannungen direkt an der Linie. Sprich an der Linie entstehen unterschiedlich viele Knoten, je nach Netzdichte, und über diese will ich mitteln. Via FieldOutput Unique_Nodal geht es auch über die Oberfläche. Wie kann ich das per Python-Skript abfragen. Gruß ------------------ Unser Wissen ist ein Tropfen, was wir nicht wissen, ist ein Ozean. Isaac Newton (1643-1727) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3585 Registriert: 04.08.2005 Abaqus
|
erstellt am: 29. Nov. 2018 11:44 <-- editieren / zitieren --> Unities abgeben: Nur für aup
Erstmal musst du die Ergebnisse an den Knoten anfordern. Das wird im Preprocessing nicht von A/CAE unterstützt und muss über die Keywords gemacht werden. *Output, field *Element Output, position=averaged at nodes, elset=set-edge S Im Postprocessing wird die Anzeige dieser Daten erst ab R2019 unterstützt, aber man kann die Daten trotzdem auslesen. Hier ein Beispielskript:
Code:
from abaqus import * from abaqusConstants import *odb=session.odbs['Job-1.odb'] myset=odb.rootAssembly.nodeSets['SET-EDGE'] print '\nKontrolle Anzahl Knoten im Set: ' + str(len(myset.nodes[0])) lastframe=odb.steps['Step-1'].frames[-1] myS = lastframe.fieldOutputs['S'].getSubset(region=myset, position=NODAL) count_nodes = 0 sum_stress = 0.
for i in myS.values: count_nodes = count_nodes + 1 sum_stress = sum_stress + i.data[0] print 'Anzahl Knoten: ' + str(count_nodes) print 'Summe Spannungen S11: ' +str(sum_stress)
[Diese Nachricht wurde von Mustaine am 29. Nov. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aup Mitglied
Beiträge: 80 Registriert: 16.08.2007
|
erstellt am: 29. Nov. 2018 13:08 <-- editieren / zitieren --> Unities abgeben:
Super, ich habe R2018 und es funktioniert trotzdem! Danke für den Tipp. Ist das in R2019 dieser Ausdruck " *Output, field [...]" in der CAE-Oberfläche anwählbar? Danke nochmal. Mustaine, auf dich ist Verlass! Grüße ------------------ Unser Wissen ist ein Tropfen, was wir nicht wissen, ist ein Ozean. Isaac Newton (1643-1727) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3585 Registriert: 04.08.2005 Abaqus
|
erstellt am: 29. Nov. 2018 14:29 <-- editieren / zitieren --> Unities abgeben: Nur für aup
Wie gesagt, nur das visualisieren geht noch nicht in R2018, aber ansonsten sind die Daten da. Im Preprocessing werden die Ausgabeanforderungen anscheinend auch in R2019 nicht unterstützt. Man könnte die Befehle in eine separate Datei legen und im Keyword-Editor den *Include-Befehl einbauen. So könnte man mit dem Modell spielen ohne jedesmal nachträglich die Keywords in die .inp einfügen zu müssen. [Diese Nachricht wurde von Mustaine am 29. Nov. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aup Mitglied
Beiträge: 80 Registriert: 16.08.2007
|
erstellt am: 15. Mai. 2019 10:44 <-- editieren / zitieren --> Unities abgeben:
Bei Solid-Elementen funktioniert es! Funktioniert das auch bei Flächenelementen? Wenn ja, wie kann ich das für SNEG abfragen? Wäre cool, wenn das jemand weiß? ------------------ Unser Wissen ist ein Tropfen, was wir nicht wissen, ist ein Ozean. Isaac Newton (1643-1727) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3585 Registriert: 04.08.2005 Abaqus
|
erstellt am: 17. Mai. 2019 10:39 <-- editieren / zitieren --> Unities abgeben: Nur für aup
Es funktioniert quasi genauso, nur dass du jetzt halt Daten für jeden angeforderten Section Point hast. Nehmen wir das Script, welches ich weiter oben gepostet habe. Wenn du also im Set-Edge 10 Knoten hast und die zwei äußeren Section Points in der Ausgabeanforderung, dann hat die Liste mit den Knotenergebnisse 20 Einträge. Die Abfrage myS.values[0].sectionPoint gibt dir den Section Point für den ersten Eintrag. Zusammen mit myS.values[0].nodeLabel weißt du also genau wo der Wert liegt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aup Mitglied
Beiträge: 80 Registriert: 16.08.2007
|
erstellt am: 20. Mai. 2019 10:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Mustaine, leider komme ich mit der Aussage nicht weiter. Ich habe einen Biegebalken und will das Problem, welches ich Solidelementen umgesetzt habe nun auch mit Flachenelementen und Balkenelementen erreichen.
Code:
from abaqus import * from odbAccess import * from abaqusConstants import *odb = openOdb('{Pfad zur Odb}') KnotenSet=odb.rootAssembly.nodeSets['AUSWERTUNG'] print '\nKontrolle Anzahl Knoten im Set: ' + str(len(KnotenSet.nodes[0])) step = odb.steps[odb.steps.keys()[-1]] frame = step.frames[-1] Knotenspannung = frame.fieldOutputs['S'].getSubset(region=KnotenSet, position=NODAL) Knoten_Anzahl = 0 S11_aufsummiert = 0. for S in Knotenspannung.values: Knoten_Anzahl += 1 S11_aufsummiert += S.data[0] print('Knoten '+str(Knoten_Anzahl)+': '+str(S.data[0])) S11_gemittelt = S11_aufsummiert / Knoten_Anzahl print('\nAnzahl Knoten: ' + str(Knoten_Anzahl)) print('Summe Spannungen S11: ' +str(S11_aufsummiert)) print('mittlere Spannungen S11: ' +str(S11_gemittelt)) #odb.close() ''' !!! Vorher muss ueber den Keyword Editor folgendes eingetragen werden!!! *Output, field *Element Output, position=averaged at nodes, elset=Auswertung S '''
Jetzt weiß ich noch nicht wie ich die unterseite der Surface abfrage und die beiden unteren Stellen beim Balken (Bottom Right Corner, Bottom Left Corner) Danke für deine Hilfe ... im Voraus
------------------ Unser Wissen ist ein Tropfen, was wir nicht wissen, ist ein Ozean. Isaac Newton (1643-1727) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3585 Registriert: 04.08.2005 Abaqus
|
erstellt am: 20. Mai. 2019 19:08 <-- editieren / zitieren --> Unities abgeben: Nur für aup
Die Section Points sind durchnummeriert. Das Nummernschema ist im Handbuch erklärt und hängt von der Orientierung der Struktur ab. Also bei Schalen z.B. was ist Ober- und Unterseite (SPOS, SNEG). Wie ist also die Normalenrichtung. Das kann man grafisch und per Python abfragen und kontrollieren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aup Mitglied
Beiträge: 80 Registriert: 16.08.2007
|
erstellt am: 22. Mai. 2019 06:24 <-- editieren / zitieren --> Unities abgeben:
Nach vielen Versuchen habe ich endlich sowas wie eine Lösung für das SHELL-Modell das Modell ist eine Biegebalken als Schalenmodell ausgeführt. - Festlager, Loslager, mittig angreifende Kraft über ein Kinematic Coupling (Kontraktion quer freigegeben) - Reine Biegung - Auswertung erfolgt an der Linie unter der Krafteinleitung auf der Zugseite Code:
from abaqus import * from odbAccess import * from abaqusConstants import *odb = openOdb({Pfad zur Odb}) KnotenSet = odb.rootAssembly.nodeSets['AUSWERTUNG'] num_KnotenSet = len(KnotenSet.nodes[0]) print '\nKontrolle Anzahl Knoten im Set: ' + str(num_KnotenSet) KnotenLabel = [] for i in range(0, num_KnotenSet): KnotenLabel.append(KnotenSet.nodes[0][i].label) print KnotenLabel step = odb.steps[odb.steps.keys()[-1]] frame = step.frames[-1] Knotenspannung = frame.fieldOutputs['S'].getSubset(region=KnotenSet, position=NODAL) S11_aufsummiert = 0. for i in range(0, num_KnotenSet): S11_aufsummiert += Knotenspannung.values[num_KnotenSet+i].data[0] print('KnotenID '+str(KnotenLabel[i])+': '+str(Knotenspannung.values[num_KnotenSet+i].data[0])) S11_gemittelt = S11_aufsummiert / num_KnotenSet print('\nAnzahl Knoten: ' + str(num_KnotenSet)) print('Summe Spannungen S11: ' +str(S11_aufsummiert)) print('mittlere Spannungen S11: ' +str(S11_gemittelt))
es waren ja doppelt soviele Werte drin (Zug- und Druckseite), deswegen das Offset "num_KnotenSet+i" damit ich an die Zugseitenwerte komme. Gibt es einen eleganteren Weg? Mit Code: values[0].sectionPoint
und Code: values[0].nodeLabel
kam ich nicht zurecht und habe auch im Handbuch nichts für mich Aussagekräftiges gefunden. Vielen Dank für euer Mitdenken! ciao, aup ------------------ Unser Wissen ist ein Tropfen, was wir nicht wissen, ist ein Ozean. Isaac Newton (1643-1727)
[Diese Nachricht wurde von aup am 22. Mai. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aup Mitglied
Beiträge: 80 Registriert: 16.08.2007
|
erstellt am: 22. Mai. 2019 06:49 <-- editieren / zitieren --> Unities abgeben:
kleiner Rückschlag... gerade eben wollte ich die Werte mit Probe Value verifizieren... ..dann das! Gibt mir 'Probe value' die Knotenspannung gemittelt und im rpt-File die Einzelwerte? Was bekommt dann das Skript heraus? Die Werte an den Integrationsstützstellen? Skriptausgabe
Code:
Kontrolle Anzahl Knoten im Set: 17 [1, 2, 7, 8, 9, 10, 11, 12, 13, 730, 735, 739, 743, 747, 751, 755, 759] KnotenID 1: 27.6616 KnotenID 2: 27.6616 KnotenID 7: 22.268 KnotenID 8: 23.2464 KnotenID 9: 24.0798 KnotenID 10: 24.3667 KnotenID 11: 24.0798 KnotenID 12: 23.2464 KnotenID 13: 22.268 KnotenID 730: 24.8045 KnotenID 735: 22.8647 KnotenID 739: 23.7007 KnotenID 743: 24.2386 KnotenID 747: 24.2386 KnotenID 751: 23.7007 KnotenID 755: 22.8647 KnotenID 759: 24.8045Anzahl Knoten: 17 Summe Spannungen S11: 410.095380783 mittlere Spannungen S11: 24.1232576931
------------------ Unser Wissen ist ein Tropfen, was wir nicht wissen, ist ein Ozean. Isaac Newton (1643-1727) [Diese Nachricht wurde von aup am 22. Mai. 2019 editiert.] [Diese Nachricht wurde von aup am 22. Mai. 2019 editiert.] [Diese Nachricht wurde von aup am 22. Mai. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |