首页/文章/ 详情

binout结果解析-使用Python对binout文件进行解析与可视化

28天前浏览1054

新开一个系列,如何通过Python来解析不同求解器的结果。

后处理的结果种类比较多,可以分为数值类,曲线类,动画类,动画类包含了图片类,动画可以理解为很多祯的图片。按照维度来说就是,一维,二维,三维的结果。

我们这里通过Python语言实现,以解析DYNA的binout结果为例,作为简单的演示。

同样的,对于解析Nastran,ABAQUS,ANSYS等求解器的计算结构文件均能找到合适的Python包。在哪里找,当然是GitHub或者浏览器了。

当然对于不常用的求解器,如果结果是纯文本文件,即使是没有对应的模块,我们也可以基于第三方模块,例如numpy等进行解析。

我们最终目的是解析结果,相信小伙伴们所在的公司都有购买软件。那么,既然有功能更完善的商业软件,为什么不选择用呢,钱都花了,就要利用起来。

商业软件提供了一整套的API,在解析结果的性能方面也是进行了优化,速度也能更快。不要本末倒置,为了使用开源库而使用开源库。并且在商业软件安装的时候Python的环境也一并安装完成,免去了配置环境的问题了。

还一个疼点,就是可移植性,了解编程的小伙伴可以在自己电脑上可以配置好环境,但是不能要求每一个都掌握如何配置环境。更多的小伙伴是需要这样一个工具,只需要关注如何使用,提高工作效率即可。所以基于软件自身框架开发会减少很多工作,更近一步打包成可执行文件也是可以的。

当然了,哪种方法孰强孰弱就看各位小伙伴自己的实际工作需求了。如果是需要对结果进行数据分析,或者训练模型,建议还是使用单独的python环境,因为软件可能对于python版本有特殊要求,或者是重编译的,两者之间最好隔离开来。

如果说自研软件就可以忽略上面的话,可以从0开始构建自有的代码库。

步骤如下:

1、找到解析binout文件的第三方模块,一般这种主流的,原厂都会提供解析的包,具体的可以在github上搜索求解器的关键字获取,越是主流的求解器,对应的模块越容易找到。

2、这里使用的第三方包是lasso.dyna,能解析Binout文件和D3plot文件。具体的功能介绍可以访问在线帮助文档。

3、查看关于lasso.dyna的帮助文档,了解模块的逻辑,因为程序返回的数据结构,基本上和商业软件返回的是不一致的。商业软件为了兼顾不同求解器的格式,返回的结果是基于自己软件逻辑返回的,所以有自己的风格。并且商业软件之间的数据结构也存在差异,比如HyperWorks的后处理模块与META都存在不同差异。对于第一次接触的小伙伴,建议把返回的结果打印出来,便于了解所调用模块解析文件所返回的格式。

4、根据需求编写代码,实现binout文件的读取功能。这里以读取bndout的结果为例,并将三个方向的计算结果进行了汇总,得到新的曲线,商业软件是直接有all force和all total结果的component,而调用lasso.dyna还得通过计算生成。

下图是通过matplotlib模块和HyperGraph显示的结果。

matplotlib

HyperGraph

可以看到,通过lasso.dyna绘制的曲线和hypergraph绘制的是一致的。

5、这里仅做简单的演示。更复杂的功能,也能实现,对于D3Plot的结果显示同样没有问题。

来源:TodayCAEer
HyperViewNastranAbaqus二次开发pythonUM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-08-14
最近编辑:28天前
TodayCAEer
本科 签名征集中
获赞 16粉丝 9文章 163课程 0
点赞
收藏
作者推荐

HyperWork必备知识-templex语言3-循环结构

foreach循环{num=0}{gmat={10,20,30,40}}{foreach(elem=gmat);num++}Element{num}:{elem}{endloop}我们可以来完成阶乘计算的功能{num=0}{gmat={1,2,3,4,5,6,7,8,9}}{foreach(elem=gmat);num++}{fact=1}{for(i=1;i<=elem;i++)}{fact=fact*i}{endloop}Element{num}({elem}!):{fact}{endloop}通过for计算指定角度的正弦和余弦值:{for(a=0;a<=3.1415926;a+=3.1415926/12)}Angle:{a,%6.4f}Sin:{sin(a),%6.4f}Cos:{cos(a),%6.4f}{endloop}while循环输出字符,cr()在这里表示换行符,大括号可以同时包括多行代码。{i=0;while(i<5);i;cr();i++endloop}计算1到10的每个数字的平方,同时检查平方结果是否是偶数或奇数。{i=1;}{while(i<=10);}{square=i*i;}{if(square%2==0)}Number{i}squaredis{square},whichiseven.{else}Number{i}squaredis{square},whichisodd.{endif}{i++;}{endloop}同时应用while,for,if的案例{numbers={1,2,3,4,5,6,7,8,9,10}}{stop_number=10}{i=0}{while(i<stop_number)}{current_number=numbers[i]}{if(current_number%2==0)}{{fact=1}}{for(j=1;j<=current_number;j++)}{fact=fact*j}{endloop}Number{current_number}iseven,itsfactorialis{fact}.{else}{square=current_number*current_number}Number{current_number}isodd,itssquareis{square}.{endif}{i++}{endloop}九九乘法的显示{for(i=1;i<=9;i++)}{for(j=1;j<=9;j++)}{product=i*j}{if(j==1)}{cr()}{endif}{product,%2d}x{j,%2d}={i*j,%2d}{endloop}{endloop}来源:TodayCAEer

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈