Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  gemittelte Knotenspannung per Pythonskript abfragen

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:  gemittelte Knotenspannung per Pythonskript abfragen (1645 mal gelesen)
aup
Mitglied



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

Beiträge: 78
Registriert: 16.08.2007

erstellt am: 29. Nov. 2018 06:59    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

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


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

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 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 aup 10 Unities + Antwort hilfreich

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.



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: 29. Nov. 2018 10:24    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 aup 10 Unities + Antwort hilfreich

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



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

Beiträge: 78
Registriert: 16.08.2007

erstellt am: 29. Nov. 2018 11:00    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

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.



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: 29. Nov. 2018 11:44    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 aup 10 Unities + Antwort hilfreich

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



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

Beiträge: 78
Registriert: 16.08.2007

erstellt am: 29. Nov. 2018 13:08    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

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.



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: 29. Nov. 2018 14:29    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 aup 10 Unities + Antwort hilfreich

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



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

Beiträge: 78
Registriert: 16.08.2007

erstellt am: 15. Mai. 2019 10:44    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

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.



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: 17. Mai. 2019 10:39    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 aup 10 Unities + Antwort hilfreich

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



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

Beiträge: 78
Registriert: 16.08.2007

erstellt am: 20. Mai. 2019 10:52    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 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.



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: 20. Mai. 2019 19:08    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 aup 10 Unities + Antwort hilfreich

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



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

Beiträge: 78
Registriert: 16.08.2007

erstellt am: 22. Mai. 2019 06:24    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

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



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

Beiträge: 78
Registriert: 16.08.2007

erstellt am: 22. Mai. 2019 06: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


abaqus.rpt.jpg


abaqus.rpt.txt

 
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.8045

Anzahl 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

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