Autor
|
Thema: Variantenuntersuchung (1082 mal gelesen)
|
lukasz Mitglied
Beiträge: 157 Registriert: 25.11.2005
|
erstellt am: 23. Aug. 2006 08:50 <-- editieren / zitieren --> Unities abgeben:
Ich habe ein kleines Problem mit CAE. Zwecks Parameteruntersuchung muß ich 48 verschiedene Varianten eines Models rechnen. Sie unterscheiden sich in Materialparametern und Randbedingungen. Bei jeder Variante muß ich so 6 bis 8 verschiedene BCs erstellen. Diese sind aber weitestgehend gleich. Also habe ich vlt insgesamt 12 verschieden BCs für alle 48 Varianten. Die Varianten werden in einem Job als lineare perturbation Steps gerechnet. Allerdings stelle ich fest dass ich bei jedem Step die BCs neu definieren muß. Der Aufwand ist beträchtlich. Weiß jemand wie ich das geschickt anstelle ? Lassen sich die Bcs von einem perturbation Step in das nächste übernehmen ? Oder kann man das gut mit einem Skript oder Protokoll erschlagen ? Habe keine Lust ca. 300 BCs "per Hand" definieren zu müssen. Vlt sollte ich noch anmerken dass ich was CAE angeht ein absoluter Neuling bin. Ich arbeite normalerweise mit Inputfiles bzw. anderen Preprozessoren. Allerdings ist es hier die Vorgabe des Auftraggebers, dass die Berechnung komplett in CAE abgewickelt werden soll. vg Lukasz 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. Aug. 2006 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für lukasz
Mhhh, deine Frage ist schwierig zu beantworten. Ich fasse erstmal zusammen wie ich die Frage verstanden habe (um Missverständnissen vorzubeugen): - du berechnest für 4 verschiedene Materialparameter jeweils 12 verschiedene Varianten -> =48 - d.h. dass du mindestens 4 Jobs aufsetzen musst - hast du eine Materialvariante in CAE vollständig definiert, brauchst du für die anderen 3 nur noch das Material modifizieren - pro Job rechnest du 12 "Probleme" - BC die im "Initial"-Step definiert wurden, gelten für alle Steps - die Frage ist also, wie du die Lasten der 12 Probleme am effektivsten erstellst, richtig? Wenn die Lasten/Randbedingungen größtenteils identisch sind, würde ich ein "Problem" mit den übergreifenden Definitionen (Steps, Output, BC, Loads) vollständig in /CAE definieren. Von dieser Definition würde ich mir die "Mitschrift" aus der .rpy-Datei kopieren und in eine andere Datei legen. Ich empfehle bei der Definition in CAE mit Sets und Surface-Sets zu arbeiten. So wird die Mitschrift wesentlich einfacher zu verstehen.
Jetzt kannst du in dieser neuen Datei mit Copy&Paste oder einer Schleife die Definition der anderen Steps, BC usw. einfügen. Du musst den Steps natürlich jeweils einen neuen Namen geben und musst dann jeweils die Definitionen der BC, Loads usw. auf den neuen Step anwenden. Falls du Phyton etwas kannst ist das mit der schleife nicht schwer. Du machst am Anfang eine Liste oder ein Dictionary, wo du den Ziffern i=1 bis 12 (oder in Phyton 0 bis 11) einen Namen (den Stepnamen) zuweist. Dann baust du eine Schleife um eine komplette Definitionen. Bei jedem Schleifendurchlauf wird i um 1 erhöht. Den Stepnamen bzw. Step in dem eine Last oder BC erstellt wird, ziehst du nun aus der Liste oder dem Dict., so dass mit jedem Schleifendurchlauf ein neuer Step mit allen Definitionen erstellt wird. Noch einfacher wird es, wenn du die Stepnamen durchnummerieren kannst. Dann kannst du den Namen auch in der Schleife erzeugen. Also "Step-i" bzw. in Phyton-Syntax 'Step-%i'%i Hier mal ein Beispiel. Kopiere das Script in eine leere Datei (Endung .py). Erzeuge in CAE in "Model-1" ein beliebiges Bauteil und eine Instance davon. Definiere ein Set mit dem Namen "Bereich-Last". Dann lass dieses Script ablaufen (File->Run Script).
Code: from abaqus import * from abaqusConstants import * for i in range(12, 0, -1): mdb.models['Model-1'].StaticLinearPerturbationStep(name='Step-%i'%i, previous='Initial') a = mdb.models['Model-1'].rootAssembly region = a.sets['Bereich-Last'] mdb.models['Model-1'].DisplacementBC(name='Last-%i'%i, createStepName='Step-%i'%i, region=region, u1=UNSET, u2=-10.0, u3=UNSET, ur1=UNSET, ur2=UNSET, ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, localCsys=None)
Es werden 12 Perturbation Steps und jeweils eine Last/BC erstellt. Nicht wundern, die Steps werden rückwärts erstellt (range(12, 0,-1)). Der Grund ist dieses "previous='Initial'". Das lässt sich schlecht parametrisieren.
In diese Schleife kannst natürlich noch mehr tun. Mehr Lasten, BC, Output Request usw. Das soll nur als Beispiel dienen. Nun musst du nur noch für jedes "Problem" die Definitionen erstellen, welche jeweils unterschiedlich sind. Ob das Ganze nun schneller und einfacher ist als die 12 Probleme per Hand zu definieren musst du selbst wissen. PS: Wenn das Model viele DOF hat, macht es eventuell Sinn die 12 "Probleme" mit 1 Perturbation Step und 12 Loadcases zu rechnen. Siehe Manual 6.1.3 "Multiple load case analysis" Das Vorgehen würde aber genauso funktionieren. Nur das du jetzt in der Schleife die Loadcases erstellst usw.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lukasz Mitglied
Beiträge: 157 Registriert: 25.11.2005
|
erstellt am: 23. Aug. 2006 15:53 <-- editieren / zitieren --> Unities abgeben:
Danke für die ausführliche Antwort und vor allem das Skriptbeispiel. Genau nach so einer Möglichkeit habe ich gesucht. Habe mir schon gedacht dass es die Möglichkeit gibt in CAE mit Skripten zu arbeiten. Python kann ich zwar nicht, allerdings sieht es nicht so wild aus, da komme ich denke ich klar. Scheint Perl ähnlich zu sein - das kenne ich ein wenig - für ein paar if und for -Befehle sollte es reichen Nochmal danke !!! 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. Aug. 2006 16:35 <-- editieren / zitieren --> Unities abgeben: Nur für lukasz
Freut mich dass ich dir helfen konnte. Phyton ist wirklich nicht schwer und es gibt viele Tutorials in Netz um die Grundlagen zu erlernen. Und den ABAQUS-spezifischen Syntax bekommt man aus den Mitschriften. Damit kommt man dann schon sehr weit. Bei meinem Script sind übrigens die 4. und die 4.-letzte Zeile etwas verrutscht. Die 4. Zeile sollte da anfangen wo die 6. anfängt ("a ="); die 4.-letzte da wo die 3.-letzte anfängt. In Phyton wird nämlich das Ende einer Schleife nicht durch ein "Ende"-Kommando oder sowas angegeben. Der Körper/Inhalt einer Schleife wird über Einrückungen vorgegeben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lukasz Mitglied
Beiträge: 157 Registriert: 25.11.2005
|
erstellt am: 31. Aug. 2006 09:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Mustaine, DAs mit den Skripten hat sehr gut funktioniert, allerdings habe ich manches nicht so elegant umsetzen können, wie ich es gern würde. Da muß ich mich erstmal etwas ausführlicher mit Python auseinandersetzen. Eine Frage hätte ich noch. Wie ist die richtige Syntax wenn ich zwei verschachtelte Schleifen benutzen will ? So etwas (nur ein Beispiel) habe ich probiert, allerdings scheint die Syntax falsch zu sein. Code:
from abaqus import * from abaqusConstants import * for i in range(4, 0, -1): for j in range(4, 0, -1): mdb.models['Model-1'].StaticLinearPerturbationStep(name='Step-%i%j'%i%j, previous='Initial')
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: 31. Aug. 2006 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für lukasz
Hallo, das Problem ist ganz einfach. Das % im Namen ist der Platzhalter. Das i sagt, dass eine Integer-Variable kommt. Vielleicht war mein Beispielscript nicht so günstig, da man doch das i=Integer mit i=Zählvariable verwechseln kann. Hier dein Script korrekt: Code:
from abaqus import * from abaqusConstants import * for i in range(4, 0, -1): for j in range(4, 0, -1): mdb.models['Model-1'].StaticLinearPerturbationStep (name='Step-%i%i'%(i,j),previous='Initial')
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| |
lukasz Mitglied
Beiträge: 157 Registriert: 25.11.2005
|
erstellt am: 31. Aug. 2006 14:00 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|