ABAQUS批量提交Job与Python读取ODB结果应力应变数据

2022-05-17 16:47:30 浏览数 (1)

今天完成了一些节点性工作,下午有些时间,回答一个后台有网友的提问:

这个问题具有一定的普遍性和通用性,普遍性是很多人都会遇到,通用性是指应用场景很广泛,尤其是现在很多人赶时髦搞深度学习和机器学习什么的,需要进行大量计算和数据处理来构建数据集,这就不可避免的要进行批量化处理了,因此对这些问题进行基本的讲解也就有了意义,我原来也写过一些相关文章,点击下面图片可以跳转。

该网友的问题,实际上是两个问题:

问题1是如何批量提交job;

问题2是如何从ODB结果文件中读取计算结果数据。

因此本文也从两个方面来进行介绍。

问题1 如何批量提交job——计算任务

批量提交计算任务这个问题实际上是老生常谈了,可以用两种基本的方式实现。

方法1:在cmd中使用命令行的方式,这种方式也可以保存为bat文件的方式运行,这个方式我并不常用,可参考帮助文档中的如下部分,很详细。

方法2 采用python程序进行批量提交

如果你的若干个job已经在job界面建好了,并且打算每算完一个job自动的进行后处理的话,采用python脚本会很方便。

批量提交的核心是需要等待当前计算任务的结束,上图中若干个job的提交代码如下:

代码语言:javascript复制
# coding: utf-8
#微信公众号:ABAQUS二次开发
#作者:阿信老师CAE
#email:axin_cae@163.com
#2022.03.17
from abaqus import *
from abaqusConstants import *

jobList = mdb.jobs.keys()    #获取所有计算任务的jobName
for jobName in jobList:          
    mdb.jobs[jobName].submit(consistencyChecking=OFF) #提交计算
    mdb.jobs[jobName].waitForCompletion()             #等待计算完成
    print jobName , "is completed"  

不过在实际的操作过程中,我们可能会需要避开一些job不提交,或者job窗口事先并没有建立job,等等,总之实际问题永远比任何教程都复杂,不过只需要灵活面对就可以了,处理起来并不难。

问题2 如何从ODB结果文件中读取计算结果数据

第二个问题是大家经常要面对的,常规的数据提取采用ABAQUS自带的后处理工具已经能满足需求了,但是如果我们需要进行一些写出文本,数据筛选,数据的二次计算处理。。。,我们就需要用程序语言的帮助了。

针对今天的问题——提取结果并写出到文本,如果用自带的工具,可以导出abaqus.rpt文件,不过这种方式并不能满足我们较为苛刻的要求,用python程序会的自由度会更大一些。

另外需要说明的是,如果我们仅仅只是看看某单元或者节点的各种计算结果,或者简要的数据处理,临时用一用,可以采用如下方式,不必费心写复杂的程序,不值当浪费时间,青春易逝,头发宝贵。当然了,通过阿信这里给出的基本程序改一改,能省几根头发。

限于时间关系,这里只列出基本的应力提取程序,写入文本比较简单,随意百度即可实现,不再给出。

代码语言:javascript复制
# coding: utf-8
#微信公众号:ABAQUS二次开发
#作者:阿信老师CAE
#email:axin_cae@163.com
#2022.03.17

from odbAccess import *
from visualization import *

frame_num = 20             #定义需要输出的帧
odbName = 'X:/***/***.odb' #odb路径和名称
elemSetName = '***'        #单元set
odb = openOdb(path=odbName)#打开odb
region = odb.rootAssembly.elementSets[elemSetName]
frameRps = odb.steps['Step-1'].frames
f_S1 = frameRps[frame_num].fieldOutputs['S']  #需要输出的场变量
sub_f_S1 = f_S1.getSubset(region=region) 
S_Value = sub_f_S1.values
#读取所有单元的应力值
for i in range(len(S_Value)):
    Stress =S_Value[i].data
    print Stress
odb.close()

若有缘,江湖再会。

阿信

2022.3.17

0 人点赞