我希望将Abaqus模拟的两个并行运行与Fortran编码的umat进行比较。看来我能够选择与每次运行相关的正确的standard.exe,但并不总是那么幸运。这促使我问是否有一种方法可以调用abaqus作业,并将standard.exe的名称更改为standard1.exe之类的名称,以区分运行。我检查了abaqus帮助,但似乎没有通过命令行提供的选项。
答案 0 :(得分:3)
Abaqus中的作业/分析提交还有很多改进的余地...
无论如何,请随时查看我的GitHub repo。我正在尝试填补工作提交时Abaqus缺少的东西。让我知道您是否有任何疑问。
或者您可以使用此代码来标识正在运行的作业的正确的进程IDentifier(pid)。然后,您可以终止与此ID关联的进程。
import psutil
processesList = psutil.pids()
jobname=''
print('\n\nStart')
for proc in processesList:
try:
p = psutil.Process(proc)
if (p.name()=='standard.exe' or p.name()=='explicit.exe' or p.name()=='pre.exe' or p.name()=='explicit_dp.exe'):
i=0
jobCpus='1'
jobGpus='0'
sameJob = False
print('\nPID: %s'%proc)
for line in p.cmdline():
if line == '-job':
if jobname==p.cmdline()[i+1]:
sameJob = True
else:
sameJob=False
jobname=p.cmdline()[i+1]
print('Job Name: %s'%jobname)
elif line == '-indir':
jobdir=p.cmdline()[i+1]
print('Job Dir: %s'%jobdir)
elif line == '-cpus':
jobCpus=p.cmdline()[i+1]
print('Cpus number: %s'%jobCpus)
elif line == '-gpus':
jobGpus=p.cmdline()[i+1]
print('Gpus number: %s'%jobGpus)
i+=1
except:
pass
print('\nEnd\n\n')
为了终止进程,可以使用以下命令:
import os, signal
os.kill(int(pid), signal.SIGTERM)