Abaqus后处理脚本:Odb对象的使用技巧

开场白

今天咱们就直奔主题,上干货。还有下集的三维骨料我记着的。不会丢的。今天我给大家讲一讲关于后处理的脚本。讲的比较简单,先给各位入个门,后面再慢慢往深了讲。

其实从难度上说,我个人觉得后处理的脚本是比较简单的,因为在以前的学习当中,其实多多少少都积累了不少关于数据分析的基础。只不过当时可能不是用编程语言做的而已,那么abaqus后处理脚本,一般来说,其实就两个步骤,第一是从odb中提取数据,第二是对于这些数据做相应的处理,改画图的画图,改做运算的做运算。是不是这个理?

其实第二部分,不算是难点,各位不知道的应该是这第一部分,怎么从odb文件里,利用python脚本提取数据?我猜的应该没错吧。

1 今日内容

下面我们就主要讨论一下,怎么从odb文件里提取数据。首先需要介绍一下,odb对象,(参考自帮助文档):

Odb对象与前处理的Model对象是一个阶层的,相较于Model对象,Odb对象里的内容稍微少一点,主要都集中在数据处理上面,因为分析都已经做完了。它所包含的内容如下:

其中红色的表示对象,蓝色的表示仓库。

2 打开odb

首先是需要打开一个结果文件,怎么打开呢?不卖关子了,直接放代码:

这里把打开的odb文件,赋予myOdb变量。那么myOdb里,其实就已经存了我们需要的所有数据了,接下来,就是想法子,把数据一层一层的扒出来,跟剥玉米一样。。。

上图,所示,其实就是odb对象里的数据存储层级了,非常清楚明了,直接照着扒,就能把后处理结果扒出来了。但是问题来了,这些一层一层的东西,也不好记呀,是吧。现在年纪大了,也背不掉了。该如何是好?

当然有办法,办法总比问题多。提醒大家平时多动动脑筋,不能一有问题就过来问我,独立思考才是王道,这个要注意啊(各位的有些问题实在是我能力范围之外)

3 利器-print函数

接下来就介绍一个前后处理常用的利器,print函数。

有些人可能会怀疑我脑子是不是瓦特了。估计你们会寻思,这货不是Hello World里就出现了吗,学python第一个接触的函数就是这个print函数。用起来是平淡无奇,毫无特点。往往这种看起来平淡无奇,朴实无华的东西,实则内里是惊为天人的,都是一种扫地僧的存在。在现实生活也一样,就比如我啊,走在路上,可能正面看像个小老头,背面看像个小学生,侧面看可能像个智障,那种打王者荣耀被黄金当猪杀,打撸啊撸在黑铁段永世不得翻身的憨批。但是实则是一名极为拔尖的、顶尖的、极度优秀的、强的一的键盘大侠,简称键盘侠,敲键盘快的一。像我这种的优秀的up主,公众号的号主,收藏起来别丢了。如同键盘界的扫地僧。

扯远了,扯远了,我一般不在各位面前展示我自己的一些实力什么的,今天例外啊,秀了一把,各位不用眼红,多敲多练,你也会变得像我一样强,以后键盘界群雄争霸,岂不为一方美谈。

又扯远了。。。我收敛一下。。。我想说的意思是,那个,print函数,能帮助我们知道,每个对象里有哪些内容,记都不用记的那种。先展示个例子,比如我就知道odb里有哪些内容如下:

这么多,是不是很多,上面官方图里有的内容,这里有,它上面没写的内容,省略掉的内容,我这里也有。是不是很舒服。也不用刻意去记,只要在写脚本的时候,一级一级的去找就行了。

4 后处理层级关系的探索

不卖关子了,这个东西从哪里来呢。代码如下:

只需要在command里把你想知道的对象print出来即可。

结果:

方法二:

由于这个字典看起来不是很清楚,只有一行,所以要想实现我一开始的结果,还需要换一种方式打印:

command结果:

结果展示:

这样是不是就方便很多了,print函数是利器。遇到某些变量或者对象,你不知道里面有什么的时候,直接在abaqus command里print出来,或者prettyPrint出来。谨记

5 Steps仓库

下面我就一级一级的带着大家找,我们需要的场变量数据在哪:

首先,一级肯定在steps仓库里。注意,steps是仓库,要有对应的某个具体的对象才可以打印出来。

这里其实就有我们Step-1分析步的所有信息。这个odb是我随便找的一个,如果是多分析步,steps仓库里不止这一个。这里有两个仓库要注意一下,一个是frames,一个是historyRegions。frames对应了分析中,每次储存的结果,一半standard里默认是,每个增量不储存,所以frames默认是对应每个增量步的结果,这个结果其实就是场变量的结果。而historyRegions其实就对应了历史变量的结果:

大家现在反过来,再看这张图的时候,也许就清晰了许多。

6 Frames仓库

好,我们继续往下走,走到了frames这里,我还想知道,frames里面,有哪些数据。同样的办法,打印出来:

7 fieldOutputs仓库

从output4可以看出,frames里的fieldOutputs仓库,就是我们要的数据了,因为只有它是仓库类型,才能放那么多的数据。继续打印,看一下fieldOutpus里有些什么:

到这里,便是,豁然开朗,土地平旷,屋舍俨然了。终于看到我们想要的结果了。。

8 单元的数据

巴适,离最后的结果还有一步之遥。

就是找到这些具体的数据。

从上面可以看出,values就存了我们需要的所有数据,values对象里有1134个数据,分别对应了1134个单元。每个单元的数据构架如output8所示,这里要注意一点,不仅仅是应变,每个场变量的结果构架都是一样的。没有的数据都是None,这一点非常重要。

到此为止,我们就已经找到了,数据的所有层级关系了,经过我们的不懈努力。下面,就是,脚本实战环节了。

9 后处理脚本实战

假设,我今天想把,每一帧,也就是每个frame下的,所有单元的场量的平均值求出来。它的脚本应该怎么写。还是挺简单的对吧,大家自己可以随便找个odb练习一下。

你们暂停,别往下看了,自己尝试尝试。然后再看我的结果,实践出真知,看的时候你以为你会了,实际上并不一定。实战一下就知道了。

我就直接上代码了。

其实很简单吧,代码也少,重在分析,找到那一层层的关系。咱们在多做一步,把场变量的平均值数据都存一下:

这样就能把应力和应变的平均值结果,存储在txt文档里了。

10 结语

其实每次,我感觉我都说了好多,但是写上来,也并没有多少。我觉得,和视频相比,文章的魅力可能就在于急剧精简性。每个人看文章的速度快慢都是不同的,理解快的看的快,理解慢的看的慢。对于我们写程序的来说,快速过一个例子,也许会是更好的选择。

大家起初在学习的时候,文章的阅读,确实不如视频那么轻松自在,那么的直观,因为很多细节东西,我没办法用文字都交给大家。这也是我后期会变化的,等我自己也积累一点经验之后,我会出更好的教学视频给大家。

等你学有所成之后,看视频,绝对会影响你的速度,因为你的盲区往往是一个算法的核心,一个创新点而且。不值得再花费大量时间去看视频。所以,专栏还是专栏,我也会一直守着它,不会丢了。

今天的内容给大家一个启发吧。剩下的对于数据处理的部分,相信以各位的实力来说,是小case了。喜欢文章的欢迎评论留言告诉我,有不明白的地方或者觉得我哪里需要补充的也留言告诉我吧。我们下期再见,88

cut-off

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空