在 Abaqus 中运行连续作业时只编译一次用户子程序
Posted
技术标签:
【中文标题】在 Abaqus 中运行连续作业时只编译一次用户子程序【英文标题】:Compile user subroutine only once when running consecutive jobs in Abaqus 【发布时间】:2016-06-28 11:59:27 【问题描述】:我有一个用 Python 编写的脚本,它根据上一个作业的输出来校准材料参数,也就是说,它在 Abaqus 中连续运行许多作业,直到误差足够小。
我使用一个 Fortran 子例程,它在每个作业之前编译。
问题在于,对于我提交的每个作业,都会编译用户子例程。即使输入参数与上一个作业不同,用户子程序也不必再次编译。子程序的编译大约需要运行作业的 80% 时间。
我如何指定只编译一次用户子例程并将其用于所有连续运行?
以下是用Python编写的相关代码的sn-ps。我通过键入来执行我的脚本
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。
【问题讨论】:
在手册中查找abaqus make
@agentp 是的,我使用命令 'abaqus make library=umat.f' 但我收到提示'缺少必需的参数:job=通过输入
module add abaqus
module add intel
module add gcc
我然后被允许进入
abaqus make library=usub.f
编译子程序。
【讨论】:
对于可能遇到此问题的其他人,此答案是系统特定的。 @agentp 是的,我可以补充一点,我在运行 CentOS 6.7 的 Gridcore Gompute 集群上运行所有这些【参考方案2】:对于 Windows 平台:
首先,使用“abaqus make library”命令创建一个“.dll”文件。您可以在 ABAQUS 目录中找到它。
其次,通过添加以下行来编辑环境文件(例如“abaqus_v6”)
usub_dir_lib="xxx"
其中 xxx 是“.dll”文件(此处为 ABAQUS 目录)的路径。
现在,您可以执行 Python 代码了
【讨论】:
以上是关于在 Abaqus 中运行连续作业时只编译一次用户子程序的主要内容,如果未能解决你的问题,请参考以下文章