【问题标题】:Compile user subroutine only once when running consecutive jobs in Abaqus在 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=',这可以说没有意义,因为根据在手册中我可以使用'abaqus make {job= OR library=}'。谢谢
  • 我的猜测是您的“abaqus”命令实际上是一个脚本,它试图在将您的参数传递给真正的 abaqus 命令之前进行一些预处理。尝试确定 abaqus 可执行文件的实际完整路径并运行它。
  • @agentp 谢谢你的建议。我现在按如下方式运行命令'/path/abaqus make library=umat.f',它尝试开始编译,而不是之前的,所以这是正确的一步。但是,我收到一个命令行错误,上面写着“sh: ifort: command not found”。我想我的 .env 文件有问题。我已经使用选项指定了 compile_fortran 变量,并且在运行作业时进行编译时,我能够即时编译子例程。谢谢
  • 好吧,如果我对脚本的看法是正确的,那么该脚本可能会将 ifort 放在您的路径上。找出 ifort 的路径并将其添加到您的环境中不会太难。

标签: python compilation fortran subroutine abaqus


【解决方案1】:

通过输入

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 代码了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-29
    • 2011-06-20
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多