首页 > 解决方案 > 如何使用 abaqus python 脚本运行多个作业?

问题描述

我正在尝试使用 abaqus python 运行多个作业,其中为每个可用的 umat 子例程运行不同的模型,但在执行第一个作业后循环退出

import os
import shutil
import subprocess
current_Path = os.getcwd()

umat_Path = current_Path+'\\'+'UMATS'
umat_list = os.listdir(umat_Path)
print(umat_list)

model_Path = current_Path+'\\'+'Models'
model_list = os.listdir(model_Path)

print(model_list)

os.chdir(model_Path)
for umat in umat_list:
    umat = umat_Path+'\\'+umat
    for model in model_list:
        model=os.path.splitext(model)[0]
        odbname=umat+model
        os.system('cmd /k "abaqus job=%s user=%s globalmodel=%s interactive"'%(model,umat,odbname))

标签: pythonabaqus

解决方案


基本上,你必须使用waitForCompletion()方法。
而且我认为,您不能使用“cmd”命令来提交作业。相反,使用输入文件从输入文件创建作业JobFromInputFile()submit()然后使用方法提交作业。最后,您可以使用waitForCompletion()等待提交的作业完成或中止。
找到代码片段:

import os
import shutil
import subprocess
import job  # to access job related commands

current_Path = os.getcwd()

umat_Path = current_Path+'\\'+'UMATS'
umat_list = os.listdir(umat_Path)

model_Path = current_Path+'\\'+'Models'
model_list = os.listdir(model_Path)

os.chdir(model_Path)
for umat in umat_list:
    umat = umat_Path+'\\'+umat
    for model in model_list:
        model=os.path.splitext(model)[0]
        odbname=umat+model
        myJob = mdb.JobFromInputFile(name=model, 
                inputFileName=odbname, type=ANALYSIS, 
                atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90, 
                memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, 
                explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, userSubroutine=umat, 
                scratch='', parallelizationMethodExplicit=DOMAIN, numDomains=1, 
                activateLoadBalancing=False, multiprocessingMode=DEFAULT, numCpus=1)
        
        myJob.submit()
        myJob.waitForCompletion()

推荐阅读