Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
   Python-Skript zur automatischen Erstellung von LOADS

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:   Python-Skript zur automatischen Erstellung von LOADS (787 mal gelesen)
  
Die Gewinne der Zukunft werden mit intelligenten, autonomen Elektrofahrzeugen eingefahren. (3DEXPERIENCE)
Mono Seb
Mitglied
Berechnungsingenieur (Dipl.-Ing. TU)


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

Beiträge: 20
Registriert: 23.12.2014

erstellt am: 23. Dez. 2014 13:21    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

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.



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: 3393
Registriert: 04.08.2005

Abaqus

erstellt am: 23. Dez. 2014 14:25    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 Mono Seb 10 Unities + Antwort hilfreich

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)


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

Beiträge: 20
Registriert: 23.12.2014

erstellt am: 05. Jan. 2015 09:50    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

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)


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

Beiträge: 20
Registriert: 23.12.2014

erstellt am: 05. Jan. 2015 10:35    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

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)


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

Beiträge: 20
Registriert: 23.12.2014

erstellt am: 05. Jan. 2015 11:53    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

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 >>)

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)2020 CAD.de | Impressum | Datenschutz