Autor
|
Thema: Python-Skript zur automatischen Erstellung von LOADS (976 mal gelesen)
|
Mono Seb Mitglied Berechnungsingenieur (Dipl.-Ing. TU)
Beiträge: 20 Registriert: 23.12.2014
|
erstellt am: 23. Dez. 2014 13:21 <-- editieren / zitieren --> Unities abgeben:
Guten Tag zusammen, ich bin gerade ein bisschen ratlos und frage hier mal nach Rat/ Denkanstößen. Es geht um folgendes: Ich setze gerade eine transiente FEM-Rechnung in ABAQUS auf. Nun muss ich die PRESSURE LOADs definieren. Das Problem: ich möchte das via Python-Skript erledigen, da ich manuell 155 Surfaces jeweils einen Druck zuweisen muss und das Ganze dann auch noch für 5 Steps, macht also schlappe 775 LOADs, welche manuell zu setzen sind... dies ist mir aber zu blöd und kann ja prinzipiell wunderbar automatisiert werden Übrigens: Ich bin Python-Neuling. Meine Idee: ein Dictionary bauen, mit einer "Spalte" SURFACES, der Spalte, die den Namen der Belastung enthält und der Magnitude. Dafür möchte ich dann einfach eine FOR-Schleife generieren, welche mir dann 155 LOADs für meine 155 verschiedenen Flächen erzeugt. Leider stehe ich gerade komplett auf dem Schlauch, da ich irgendwie keine Ahnung habe, wie ich korrekt auf die Spalteneinträge im Dictionary zugreifen kann. Hier noch ein Code-Schnipsel, welcher noch nicht funktioniert: # -*- coding: mbcs -*- # Do not delete the following import lines from abaqus import * from abaqusConstants import * import __main__ # deklaration myLOAD_P1={} myLOAD_P1['SURF']=['HP STAGE 01 1', 'HP STAGE 01 2', 'HP STAGE 01 3', 'HP STAGE 01 4'] myLOAD['name']=['P1 HP STAGE 01 1', 'P1 HP STAGE 01 2', 'P1 HP STAGE 01 3', 'P1 HP STAGE 01 4' ] myLOAD['magnitude']=[3800000, 3800000, 3800000, 3610000] import section import regionToolset import displayGroupMdbToolset as dgm import part import material import assembly import step import interaction import load import mesh import optimization import job import sketch import visualization import xyPlot import displayGroupOdbToolset as dgo import connectorBehavior a = mdb.models['Model-1'].rootAssembly for SURF in myLOAD.items(): region = a.instances['INNER_CASING-1'].surfaces[myLOAD.items()] mdb.models['Model-1'].Pressure(name='P1_Load-1', createStepName='Step-1', region=region, distributionType=UNIFORM, field='', magnitude=3800000.0, amplitude='AMP-ALPHA P0->P1') Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mustaine Ehrenmitglied V.I.P. h.c.
Beiträge: 3554 Registriert: 04.08.2005 Abaqus
|
erstellt am: 23. Dez. 2014 14:25 <-- editieren / zitieren --> Unities abgeben: Nur für Mono Seb
Mach' einfach 3 Listen für Surface, Name und Magnitude. Dann verwendest du eine For-Schleife um durch die Listen zu gehen und erstellst jeweils eine Last. Dabei verwendest du immer den i-ten Eintrag aus jeder Liste. Ein exemplarisches Beispiel (nicht vollständig und nicht lauffähig): Code: surfs=['a','b','c'] names=['x','y','z'] mags=[1,2,3]for i in range(3): region=surfs[i] mdb.models['Model-1'].Pressure(name=names[i], createStepName='Step-1', region=region, distributionType=UNIFORM, field='', magnitude=mags[i], amplitude='AMP-ALPHA P0->P1')
[Diese Nachricht wurde von Mustaine am 23. Dez. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mono Seb Mitglied Berechnungsingenieur (Dipl.-Ing. TU)
Beiträge: 20 Registriert: 23.12.2014
|
erstellt am: 05. Jan. 2015 09:50 <-- editieren / zitieren --> Unities abgeben:
Zuerst: frohes Neues Jahr! @Mustaine: Vielen Dank für den Vorschlag. Ich habe also nun 3 Listen erstellt und diese dann in einer FOR-Schleife verwurstet. In der PDe-Umgebung meckert der Complier nun auch nicht mehr rum. Ergo könnte man meinen, dass dat Skript nun laufen sollte, sprich es sollten ein paar LOADs erzeugt werden. Starte ich dieses Skriptchen nun in der gui, dann passiert einfach gar nix??? Hier unten noch der lauffähige Code: # -*- coding: mbcs -*- # Do not delete the following import lines from abaqus import * from abaqusConstants import * import __main__ def GEN_LOAD(): import section import regionToolset import displayGroupMdbToolset as dgm import part import material import assembly import step import interaction import load import mesh import optimization import job import sketch import visualization import xyPlot import displayGroupOdbToolset as dgo import connectorBehavior # deklaration surfs=['abc1','abc2','abc3'] names=['P1 HP STAGE 01 1','P1 HP STAGE 01 2','P1 HP STAGE 01 3'] mags=[3000000,3500000,3800000] for i in range(3): region=surfs[i] mdb.models['Model-1'].Pressure(name=names[i], createStepName='Step-1', region=region, distributionType=UNIFORM, field='', magnitude=mags[i], amplitude='AMP-PRESSURE P0->P1') Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mono Seb Mitglied Berechnungsingenieur (Dipl.-Ing. TU)
Beiträge: 20 Registriert: 23.12.2014
|
erstellt am: 05. Jan. 2015 10:35 <-- editieren / zitieren --> Unities abgeben:
Nochmal ein Nachtrag: in der letzten Zeile des codes gibt der Compiler folgende kryptische Fehlermeldung zurück: Traceback (most recent call last): File "/.home/schulte/DEF_LOAD.py", line 38, in <module> amplitude='AMP-PRESSURE P0->P1') TypeError: region; found string, expecting Region Bei dem Thema TRACEBACK geht's ja im Prinzip darum, die entsprechende Zeile "compilergemäß" einzurücken. Bei dem letzten Teil der Fehlermeldung mit dem TypeError steige ich dann aber einfach mal verständnismäßig aus.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mono Seb Mitglied Berechnungsingenieur (Dipl.-Ing. TU)
Beiträge: 20 Registriert: 23.12.2014
|
erstellt am: 05. Jan. 2015 11:53 <-- editieren / zitieren --> Unities abgeben:
Ich bin nun selbst auf die Lösung gekommen. Für die Nachwelt: Man muss die FOR-Schleife wie unten angegeben konstruieren, dann funktioniert das Ganze auch wie 'ne Eins. surfs=['HP STAGE 01 1','HP STAGE 01 2','HP STAGE 01 3','HP STAGE 01 4'] names=['P1 HP STAGE 01 1','P1 HP STAGE 01 2','P1 HP STAGE 01 3','P1 HP STAGE 01 4'] mags=[3800000,3800000,3800000,3610000] for i in range(4): a = mdb.models['Model-1'].rootAssembly region = a.instances['INNER_CASING-1'].surfaces[surfs[i]] mdb.models['Model-1'].Pressure(name=names[i], createStepName='Step-1', region=region, distributionType=UNIFORM, field='', magnitude=mags[i], amplitude='AMP-PRESSURE P0->P1') Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|