1. 引言
如【Abaqus作业管理器出现错误 (Job Manager)】所述,不知道什么原因导致在CAE环境内不能正常使用作业管理器(Job Manager),直接影响着数据检查(Data Check)和作业递交(Submit),只能在命令行中运行。这个操作虽然很简单,但来回切换还需要手动输入命令,于是想使用Pyhton代替这个操作。
工作原理其实非常简单,只需调用subprocess即可,麻烦在于2023版以前的Abaqus内置的Python版本是2.7,不明白为什么这么多年不使用Python 3,2024版使用了Python 3.10,不过目前还没有使用2024版,因此下面的代码仍然使用的是Python 2.7的语法。
2. 代码
下面的代码实现了上述想法,在File>Run Script...中运行这个代码即可完成计算任务。不过,有一个问题是当修改完inp文件后再次运行这个代码,会执行不下去,原因是上次执行时的结果还驻留在内存中,一个自动的方法可能是加几行代码,首先删除上次产生的结果文件,然后再运行计算,目前仅使用手工删除方法。
import subprocess
def run_abq_inp_with_processors(inp_file, num_processors):
abaqus_command = "abaqus job={0} cpus={1}".format(inp_file, num_processors)
abaqus_command = "C:/SIMULIA/Commands/abaqus job={0} cpus={1}".format(inp_file, num_processors)
try:
return_code = subprocess.call(abaqus_command, shell=True, stderr=subprocess.STDOUT)
if return_code == 0:
print("Job {0} completed successfully with {1} processors.".format(inp_file, num_processors))
else:
print("Error running job {0} with {1} processors.".format(inp_file, num_processors))
except subprocess.CalledProcessError as e:
print("Error running job {0} with {1} processors.".format(inp_file, num_processors))
print(e.output)
inp_file_name = "inp file"
num_processors = 8
run_abq_inp_with_processors(inp_file_name, num_processors)