新开一个系列,如何通过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的结果显示同样没有问题。