Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SIMULIA/ABAQUS
  Job starten mittels Python

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:  Job starten mittels Python (3873 mal gelesen)
HerrHansen
Mitglied
Dipl.-Ing.


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

Beiträge: 257
Registriert: 03.12.2005

Abaqus/CAE 6.3 bis 6.12

erstellt am: 15. Feb. 2008 14: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

Liebe Gemeinde,

im Zuge einer Optimierungsaufgabe versuche ich, einen Job aus einem Python-Script heraus zu starten. Hierzu möchte ich allerdings kein CAE verwenden (da die Zahl der Lizenzen bei uns stark beschränkt ist).
Man korrigiere mich, wenn folgende Aussage falsch sein sollte: Ohne CAE im Hintergrund mitlaufen zu lassen, funktioniert der Code

Code:

import job
...
submit(meinJobname.inp)
waitForCompletion(meinJobname.inp)


nicht. Zumindest bekomme ich beim Versuch, ihn ohne CAE laufen zu lassen, eine Fehlermeldung "ImportError: No module named job".

Meine Idee war nun folgende:

Code:

import os
...
os.system('abaqus job=meinJobname.inp cpus=xxx')


Dies funktioniert soweit ganz gut, jedoch möchte ich den Jobnamen automatisiert im Script ändern. Das heißt, ich will eine For-Schleife programmieren, die mir eine fortlaufende Nummer an den Dateinamen hängt. Beispielsweise also "meinJobname_1.inp", "meinJobname_2.inp", "meinJobname_3.inp" und so weiter. Nun ergibt sich aber das Problem, dass ich den Jobnamen, den ich im Python-Script erzeuge, nicht an die "Kommandozeile" übergeben kann.
Der Code
Code:

DasHierWillIchBerechnenLassen = 'meinJobname_23.inp'
os.system('abaqus job=DasHierWillIchBerechnenLassen cpus=xxx')


funktioniert also nicht. Bei der Ausführung fragt der Abaqus-Solver nach der input-Datei, er hat also keine Datei "DasHierWillIchBerechnenLassen.inp" gefunden.

Hat hierzu jemand einen Lösungsvorschlag? Ich würde mich über jegliche Vorschläge freuen.

MfG
HerrHansen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

milasan
Mitglied



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

Beiträge: 165
Registriert: 24.04.2007

erstellt am: 15. Feb. 2008 14:57    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 HerrHansen 10 Unities + Antwort hilfreich

Das job-modul gehört zu CAE, dh. Du kannst es nur aus CAE aufrufen.

Dein Code könnte so aussehen:

abaquscommand = 'abaqus job='
jobname = 'meinJobname_23.inp'
oscommand = abaquscommand + jobname
os.system(oscommand)

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: 15. Feb. 2008 15: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 HerrHansen 10 Unities + Antwort hilfreich

Probier mal statt:
DasHierWillIchBerechnenLassen = 'meinJobname_23.inp'
os.system('abaqus job=DasHierWillIchBerechnenLassen cpus=xxx')

das hier:
DasHierWillIchBerechnenLassen = 'meinJobname_23.inp'
os.system('abaqus job= '+DasHierWillIchBerechnenLassen+' cpus=xxx')

So werden Strings aus Text und Variablen verknüpft.


Das Problem ist aber, dass dann das
waitForCompletion(meinJobname.inp)
nicht funktionieren wird. Das ist glaube ich ein CAE-eigener Befehl. Du musst wahrscheinlich einen anderen Weg finden das Script pausieren zu lassen.


[Diese Nachricht wurde von Mustaine am 15. Feb. 2008 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: 15. Feb. 2008 17:18    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 HerrHansen 10 Unities + Antwort hilfreich

Mir ist grad eingefallen dass das hier gehen müsste um das Script zu pausieren:

DasHierWillIchBerechnenLassen = 'meinJobname_23.inp'
os.system('abaqus job= '+DasHierWillIchBerechnenLassen+' cpus=xxx interactive')
print 'Job '+DasHierWillIchBerechnenLassen+' beendet'


Durch das "interactive" bleibt das Command-Fenster gesperrt bis der Job fertig ist und das Script muss solange warten um den print-Befehl auszuführen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HerrHansen
Mitglied
Dipl.-Ing.


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

Beiträge: 257
Registriert: 03.12.2005

Abaqus/CAE 6.3 bis 6.12

erstellt am: 16. Feb. 2008 12:40    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 @milasan und @Mustaine,

vielen Dank zunächst für eure Vorschläge, sie sehen sehr vielversprechend aus. Am Montag werde ich alles ausprobieren.

Ich verteile die U's 50:50 

MfG
HerrHansen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HerrHansen
Mitglied
Dipl.-Ing.


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

Beiträge: 257
Registriert: 03.12.2005

Abaqus/CAE 6.3 bis 6.12

erstellt am: 18. Feb. 2008 08:13    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 Gemeinde,

beide Varianten funktionieren ohne Probleme. Ich werde für meine Zwecke eine Kombination aus beiden Ansätzen verwenden.

Vielen Dank und mfG
HerrHansen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nicksen
Mitglied
wissenschaftlicher Mitarbeiter


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

Beiträge: 239
Registriert: 04.05.2007

erstellt am: 18. Feb. 2008 12:38    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 HerrHansen 10 Unities + Antwort hilfreich

Also ich hab hier ein script das funktioniert und auch mehrere Jobs hintereinander ausfuehrt:

mdb.Job(name=Job_name, model=myModel_str,)      #Job wird erzeugt
mdb.jobs[Job_name].submit()                    #Job wird abgeschickt
mdb.jobs[Job_name].waitForCompletion()


Das script wird als CLI im Command- Line- Interface von Cae ausgefuehrt.

Vielleicht hilft das ja auch noch weiter.

beste Grueße
Nick

------------------
==========
==  Dingsen  ==
==========

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HerrHansen
Mitglied
Dipl.-Ing.


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

Beiträge: 257
Registriert: 03.12.2005

Abaqus/CAE 6.3 bis 6.12

erstellt am: 18. Feb. 2008 16:57    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

Eher weniger, da ich ja das Script als "Standalone" ausführen will, also ohne CAE  .

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