Abaqus命令行计算及批量计算技巧

您所在的位置:网站首页 abaqus怎么用 Abaqus命令行计算及批量计算技巧

Abaqus命令行计算及批量计算技巧

2023-03-15 23:21| 来源: 网络整理| 查看: 265

1.abaqus命令行基础

使用abaqus时,如果需要进行参数分析,就需要生成大量的模型,这时一般会使用python文件定义函数进行批量生成并计算。

如果已经生成了计算文件(*.inp文件),那么就可以直接在命令行进行求解,abaqus支持命令行计算,计算格式一般如下:

abaqus job=job-name cpus=n int

这里的 job-name 是与要计算的 inp 文件同名的文件名(但不包含.inp后缀),这将默认创建一个名为 job-name 的任务并提交计算。cpus=n 是指定计算时使用的 cpu 的核心数。int 是指 interactive ,即abaqus在计算时会在命令行窗口打印一些信息供用户了解abaqus现在在干嘛。如下所示:

abaqus命令行提交任务及批量计算技巧abaqus job command

如果想指定任务名称,则可以使用 input 关键字指定输入文件,再用 job 关键字指定任务名称,如下:

abaqus input=inpFileName.inp job=job-name cpus=n int

在遇到已经存在的任务时,abaqus会询问是否覆盖先前的 job,如果不想被询问直接覆盖先前的任务,可以在上述命令结尾加上 ask=off

这里说的只是最简单的大家常用的命令,至于显式计算,使用gpu计算等其他命令,可以自己去搜索。

更多关键字及更详细的命令见下图:

abaqus命令行提交任务及批量计算技巧abaqus job command

2.abaqus批量计算

(2.1节和2.2节批量计算的内容参考了http://www.feaworks.org的部分网页)

在命令行求解有一个好处就是可以实现不同job的连续计算,不用人守着每次等上一个任务计算完成再手动提交下一个任务。

2.1 dos批处理情况1:不同inp文件位于同一文件夹下

假设该文件夹里inp文件分别为:job-1.inp, job-2.inp, job-3.inp...

在该文件夹下新建记事本(.txt)文档,将其后缀修改为 .bat 文件,在 bat 文件中输入以下内容,运行该文件实现批处理:

call abaqus job=job-1 cpus=10 int call abaqus job=job-2 cpus=10 int call abaqus job=job-3 cpus=10 int .... pause

以上命令加上 int 后,会让abaqus在当前计算完成后,才会转入下一个模型的计算。如果要实现不同job同时计算,去掉 int 即可

call abaqus job=job-1.inp cpus=10 call abaqus job=job-2.inp cpus=10 call abaqus job=job-3.inp cpus=10 .... pause

最后的pause 命令会让 cmd 窗口等待用户输入,否则在执行完最后一条指令后 cmd 窗口将直接关闭,如果计算中出了问题,显示在 cmd 窗口的信息我们也看不到了,所以建议使用此命令。

abaqus命令行提交任务及批量计算技巧abaqus job command

情况2:不同inp文件位于不同文件夹下

假设在以下路径有以下文件:

D:\temp\A\job-1.inp

D:\temp\B\job-2.inp

D:\temp\C\job-3.inp

则可以每次进入一个文件夹,再调用abaqus进行计算,命令如下:

cd D:\temp\A call abaqus job=job-1.inp cpus=10 int cd D:\temp\B call abaqus job=job-2.inp cpus=10 int cd D:\temp\C call abaqus job=job-3.inp cpus=10 int pause

将上述命令保存为.bat 文件,双击运行即可

情况3:计算完成后自动关机

有时候我们会希望计算机在计算完成后自动关机,可以通过在上述命令的最后面添加关机命令:

shutdown -s -f -t 30

-s 关闭本地计算机

-f 强制关闭计算机

-t xx 将用于系统关闭的定时器设置为 xx 秒,例如上面的设置是 30秒。

2.2 Python实现

Python语言可以实现ABAQUS前后处理模块的二次开发,同时也可以采用Python实现ABAQUS所用功能,这里采用Python实现不同job的连续计算。

实现job批处理的Python基本代码:

# 导入所需的模块和常量 from abaqusConstants import* import job # 使用job-1.inp文件提交job-1的计算任务,numCpus=2设置cpus数,numDomains=2设置线程数 mdb.JobFromInputFile(name='job-1',inputFileName='job-1.inp',numCpus=2,numDomains=2) # 提交计算任务 mdb.jobs['job-1'].submit() # 中断python文件的执行,等待计算任务的完成。 # 在这里waitForCompletion相当于dos批处理下的参数interactive mdb.jobs['job-1'].waitForCompletion() mdb.JobFromInputFile(name='job-2',inputFileName='job-2.inp',numCpus=2,numDomains=2) mdb.jobs['job-2'].submit() mdb.jobs['job-2'].waitForCompletion() # 导入其他模块 import os,time,sys # 实现自动关机 o="c:\windows\system32\shutdown -s -f -t 60" os.system(o)

将上面的python文件保存为 run.py ,进入run.py所在目录,打开cmd窗口输入以下命令即可运行批处理文件:

abaqus cae noGUI=run.py其他问题

(以下内容参考自https://zhuanlan.zhihu.com/p/149086691)

之前在网上查到的ABAQUS inp文件任务批量提交方法,如用批处理命令或利用ABAQUS内置Python环境提交,有一定局限性,比如如果批量提交的任务中,某个任务由于计算不收敛而终止,会造成整个提交队列终止,而不能继续进行。

本程序利用Python subprocess模块并行提交任务,任务间不会互相干扰,即使某个任务报错或不收敛,不会影响整个队列。

import subprocess import time import os task_list=[] for volfrac in [0.1,0.2,0.3,0.4,0.5,0.6]: #循环生成包含不同参数的文件名列表 for R in [4,5,6]: for num in range(1,11): #["Tension_x","Tension_y","Shear"] for bc in ["Tension_x","Tension_y","Shear"]: task_list.append([volfrac,R,num,bc]) i=0 for volfrac,R,num,bc in task_list: file_name="{}_{}_{}_{}.inp".format(volfrac,R,num,bc)#inp文件名 job_name="Job-{}_{}_{}_{}".format(int(volfrac*100),R,num,bc)#任务名 #通过命令行提交任务 subprocess.Popen('abaqus job={} input={} cpus=2 int ask_delete=OFF'.format(job_name,file_name),shell=True) print("{} submitted.".format(job_name)) i=i+1 if i==10: i=0 print("Waiting...") time.sleep(180)#防止一次提交过多电脑崩溃或license用尽,所以通过sleep等待任务结束 print("Finished")

在inp文件所在目录下,运行此Python程序,即可批量提交任务。

3.abaqus命令行显示计算求解进程

虽然命令中有 int 参数,但是abaqus只能显示简单的信息,如第一张图中所示。

在进行多步求解时,例如隐式多步或者显式计算时,我们有时想看到目前计算到哪一步了,但是abaqus自身无法在命令行打印出这些信息。

可以使用一种曲线救国的方法,即在任务文件夹中读取与任务同名的 .sta 文件,并实时显示。注意,以下命令只在 Windows PowerShell 中有效:

Get-Content .\job-name.sta -Tail 10 -Wait

这将会自动读取 job-name.sta 的最后10行内容。随着abaqus的计算, .sta 文件也会不断写入内容,而这条命令(因为有-Wait参数)也会不断读取最新的内容并刷新显示,如下图所示(这里是一个隐式计算求解):

abaqus命令行提交任务及批量计算技巧abaqus job command

最后计算完成的视图如下:

abaqus命令行提交任务及批量计算技巧abaqus job command

如果要在 cmd 窗口实现以上内容,则需要以下命令:

powershell -nologo "& "Get-Content -Wait job-name.sta -Tail 10"

实际上还是调用 Windows PowerShell 执行 Get-Content 程序。因此,前提是你的电脑有 Windows PowerShell 较新版。如果没有 Windows PowerShell 或者其版本太低可能会提示找不到 Get-Content 程序。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3