利用Python批量提交inp文件

本文介绍如何利用Python脚本批量提交Abaqus的inp文件进行计算,包括 Bat 文件提交方法和Python提交方法的对比,以及通过Python脚本实现计算任务的监控和错误处理,确保计算队列的连续性。
摘要由CSDN通过智能技术生成

最近,笔者在使用Abaqus的过程中遇到了需要重复计算多种工况的问题,并且需要提取每一个工况下的时间历程数据。如果采用手动提交的方式,则提交过程非常繁琐,并且只能等到前一个模型计算完成之后才能进行后续的计算。因此,笔者很快想到能否在Abaqus中实现inp文件的批量提交。

通过查阅相关资料,笔者发现目前inp文件的批量运算主要有两种实现方法:Bat文件提交方法和Python提交方法。Bat文件提交方法主要是利用了Abaqus Command中的任务提交语句。例如,一个最简单的inp文件提交格式如下所示:

abaqus job=case1.inp cpus=4 inter

为了批量提交inp文件,可以将多个inp文件的提交语句汇总到一个批处理文件(.bat)中,通过执行该bat文件即可完成计算。一个包含多个inp文件的提交命令如下所示:

cmd/c abaqus job=case1.inp cpus=4 inter``cmd/c abaqus job=case2.inp cpus=4 inter``cmd/c abaqus job=case3.inp cpus=4 inter

注意,为了保证inp文件顺序提交,必须使用cmd/c而非call关键字,并且需要使用int关键字(int为interactive的缩写,int关键字用于在运行过程中反馈进程,在隐式计算中输出log文件,还可以保证inp文件顺序提交,防止同时提交时导致计算机资源耗尽)。

Bat文件提交方法使用较为简单,但在计算过程中无法实现其他交互式操作。另一种方法为采用Python脚本批量提交inp文件进行计算,一个最简单的计算脚本如下所示:

# -*- coding: UTF-8 -*-``from abaqus import *``from abaqusConstants import *``   ``#inp文件列表``Jobs_list = ['case1', 'case2', 'case3']``   ``#利用for循环批量提交计算``for i in Jobs_list:`    `mdb.JobFromInputFile(name = i,`                         `inputFileName = i + '.inp',`                         `numCpus = 4,`                         `numDomains = 4)`    `mdb.jobs[i].submit()`    `mdb.jobs[i].waitForCompletion()

上述脚本的计算原理为将inp文件名存放在一个名为Jobs_list的列表中,随后通过mdb对象中的JobFromInputFile方法读取inp文件并创建一个jobs对象,并利用jobs对象中的submit方法提交任务进行计算。注意在提交之后必须使用waitForCompletion方法保证只有当计算完成之后才执行后续语句,否则程序将直接进入下一轮循环,导致inp文件被同时提交计算。

在Abaqus中,Python脚本可以通过两种方式被执行:一种为在打开Abaqus/CAE的情况下,通过菜单栏中的File→Run Script直接运行脚本;另一种方式为在Abaqus Command中执行如下语句:

abaqus cae noGUI=xxx.py

该语句可以在不打开Abaqus/CAE的情况下执行Python脚本。

尽管上述语句给出了利用python批量提交inp文件的实现原理,但在使用过程中仍存在一定的局限性。例如在计算队列中若某一个计算任务意外终止,则会导致整个计算队列终止,无法完成后续计算。此外,笔者还需要在计算完成后顺序输出每一个模型中的时间历程数据。为了解决上述问题,本文拟通过Python脚本实现下述功能:

  • 基于inp文件名顺序提交计算,并检测计算状态,当计算意外终止时自动开始后续任务的计算;

  • 每次计算完成后实时输出该模型对应的时间历程数据。

1. 时间历程数据提取方法

利用Python批量处理Abaqus时间历程数据一文中,笔者详细介绍了通过Abaqus中的Session对象获取时间历程数据的实现原理。在本文中,笔者将介绍提取时间历程数据的另一种方法:通过Odb对象直接获取时间历程数据或场输出结果。为了对Odb对象有一个更为清楚的认识,本文给出了输出数据库(Output database)对象的模型图,如图1.1所示。通过该模型图,可以帮助我们理解模型中父对象与子对象之间的关系。

图1.1 输出数据库对象模型图

例如,当我们打开或创建一个输出数据库(.odb文件)时,Abaqus会自动创建一个Odb对象。从图1.1中可以看出,Odb对象中包含有模型数据(Model Data)和结果数据(Results Data)。模型数据包含有用于组成装配的部件(Part)和部件实例(Part instance),如节点坐标和单元类型等;结果数据则包含有模型的分析结果,如应力、应变和位移等数据,本文需要提取的时间历程数据同样包含在结果数据中。从图1.1中可以看出,所有的结果数据都包含在Odb对象的成员——Step对象中,而Step对象又同时拥有Frame对象和historyRegion对象,分别用于存储场输出结果和时间历程输出结果。

为了对Abaqus中的Odb对象有更为清晰的认识,本文依照利用Python批量处理Abaqus时间历程数据一文中的方法,通过对象名.__members__命令来输出对象中的所有成员。首先,通过如下命令打开数据库文件(.odb),并输出Odb对象的所有成员:

# -*- coding: UTF-8 -*-``from odbAccess import *``   ``Work_directory = 'C:/Users/Desktop/'``Job_name = 'Model_Case'``   ``odb = openOdb(path = Work_directory + Job_name + '.odb')`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值