前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABAQUS批量提交Job与Python读取ODB结果应力应变数据

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

作者头像
阿信老师CAE
发布2022-05-17 16:47:30
3.5K0
发布2022-05-17 16:47:30
举报
文章被收录于专栏:ABAQUS二次开发

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

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

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

问题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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ABAQUS二次开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档