在 Abaqus 中 运行 个连续作业时仅编译用户子程序一次

Compile user subroutine only once when running consecutive jobs in Abaqus

我有一个用 Python 编写的脚本,它根据上一个作业的输出校准 material 参数,也就是说,它 运行 在 Abaqus 中连续执行许多作业,直到误差够小了。

我使用在每个作业之前编译的 Fortran 子例程。

问题是对于我提交的每个作业,用户子例程都会编译。即使输入参数与上次作业不同,用户子程序也不必重新编译。子例程的编译大约占用了 运行 作业时间的 80%。

如何指定只编译一次用户子程序并在所有连续的运行s中使用它?

以下是在Python中编写的相关代码片段。我通过键入

来执行我的脚本
abaqus cae nogui=script.py

在终端中。代码使用 Abaqus 脚本接口。

创建工作:

mdb.Job(name=self.jobName, model='Model-1', description='', type=ANALYSIS, 
        atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90, 
        memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, 
        explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF, 
        modelPrint=OFF, contactPrint=OFF, historyPrint=OFF,
        userSubroutine=self.userSubroutinePath, 
        scratch='', resultsFormat=ODB, multiprocessingMode=DEFAULT, numCpus=1, 
        numGPUs=0)

提交并等待作业完成:

mdb.jobs[self.jobName].submit(consistencyChecking=OFF)
mdb.jobs[self.jobName].waitForCompletion()

此代码是 运行 每次我 运行 使用前一个 运行 的数据的连续作业。

编译器是 Intel 64 Fortran Compiler XE,版本 15.0.0.090 Build 20140723。

通过输入

module add abaqus
module add intel
module add gcc

然后被允许进入

abaqus make library=usub.f

这将编译子例程。

对于 windows 平台:

首先,使用"abaqus make library"命令创建一个“.dll”文件。您可以在 ABAQUS 目录中找到它。

其次,通过添加以下行编辑环境文件(例如"abaqus_v6")

usub_dir_lib="xxx"

其中 xxx 是“.dll”文件(此处为 ABAQUS 目录)的路径。

现在,您已准备好执行您的 Python 代码