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

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

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


       该网友的问题,实际上是两个问题:
问题1是如何批量提交job;
问题2是如何从ODB结果文件中读取计算结果数据。
因此本文也从两个方面来进行介绍。

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

       批量提交计算任务这个问题实际上是老生常谈了,可以用两种基本的方式实现。
         方法1: 在cmd中使用命令行的方式,这种方式也可以保存为bat文件的方式运行,这个方式我并不常用,可参考帮助文档中的如下部分,很详细。
ABAQUS批量提交Job与Python读取ODB结果应力应变数据的图3

方法2   采用python程序进行批量提交
       如果你的若干个job已经在job界面建好了,并且打算每算完一个job自动的进行后处理的话,采用python脚本会很方便。
ABAQUS批量提交Job与Python读取ODB结果应力应变数据的图4
     批量提交的核心是需要等待当前计算任务的结束,上图中若干个job的提交代码如下:
  
  
# 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程序会的自由度会更大一些。
      另外需要说明的是,如果我们仅仅只是看看某单元或者节点的各种计算结果,或者简要的数据处理,临时用一用,可以采用如下方式,不必费心写复杂的程序,不值当浪费时间, 青春易逝,头发宝贵 ABAQUS批量提交Job与Python读取ODB结果应力应变数据的图5ABAQUS批量提交Job与Python读取ODB结果应力应变数据的图6。当然了,通过阿信这里给出的基本程序改一改,能省几根头发。

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



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

# 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 = '***'        #单元setodb = openOdb(path=odbName)#打开odbregion = odb.rootAssembly.elementSets[elemSetName]frameRps = odb.steps['Step-1'].framesf_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 Stressodb.close()

若有缘,江湖再会。
阿信
2022.3.17


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


文章来源:ABAQUS二次开发

(1条)
默认 最新
你好,老师,有办法用python批量提取节点处的应力嘛
评论 点赞
点赞 2 评论 1 收藏 11
关注