黄河++姚刚+段世慧
摘要: 为满足国产有限元软件HAJIF对大规模可视化的前置建模和后置数据处理功能的迫切需求,基于面向对象的程序设计思想设计并实现具有高度灵活性的前后处理模块.提出层次化、组件式的软件设计架构.在前处理功能设计方面,引入准C++标准Boost库,解决模型数据的持久化和内存管理问题;采用节点相关面法以及OpenGL深度缓存机制大大提升模型显示效率.在后处理功能设计方面,建立物理场量值与颜色的对应关系,并构建结构变形比例放大因子计算公式.研究表明:面向对象的程序设计方法可以大大提高开发效率和前后处理模块的可维护性.
关键词: HAJIF; 前处理; 后处理; 有限元; 面向对象程序设计
中图分类号: TP317.4 文献标志码: B
0 引 言
商业化的CAE软件,如Abaqus和Nastran等,大多具有友好的前后处理模块.HAJIF是航空工业集团研发的大型有限元分析软件,其功能涵盖静力、模态、屈曲等通用计算以及优化、静弹、颤振、热应力分析等专用求解计算功能.[1]近年来,随着数值分析方法的逐步完善,尤其是计算机运算速度的飞速发展,整个HAJIF计算系统求解规模越来越大,求解效率也越来越高,但由于缺少对大规模模型的前后处理功能,HAJIF软件的长远发展与市场销售受到制约,因此,增强可视化的前置建模和后置数据处理功能十分迫切.
在分析有限元前后处理特点的基础上,提出以有限元数据结构为中心构建前后置程序架构的思路,借助主流的程序设计语言C++,采用面向对象的程序设计思想,设计开发前后置模块HAJIF_PrePost,并重点对其中的关键功能技术进行探讨,如底层数据结构设计、模型数据持久化、大规模网格与云图显示技术等.
1 总体架构
HAJIF_PrePost模块采用层次化的三层体系架构,见图1.底层是数据层,负责有限元模型数据的管理以及图形显示数据管理,是前后置模块的基础;中间层是业务层,承上启下,串联界面层与数据层,负责具体功能接口的定义实现、模型卡读写、图形处理、数据处理等,是前后置模块的核心;最上面层是界面层,主要提供数据显示、交互及建模功能,并负责各个求解模块的界面定义和任务管理.
出于开放性的考虑,HAJIF_PrePost模块遵循面向对象、模块化的软件构建技术,按照高内聚低耦合的原则,以库函数的方式形成一系列基础服务组件即动态链接库,不同功能组件通过约定的接口协同工作、传递数据,整个架构由一个主程序和多个基础服务组件构成,见图2.
2 前处理关键功能设计
2.1 数据结构设计
利用C++面向对象继承的重要特性,建立HAJIF_PrePost模块完整的前后处理类层次结构.[2-3]分别构建Element,Node,Material,Property,Load和Bound等基类,用于对有限元单元、节点、材料、属性、载荷和边界等数据的公共部分进行封装.在设计好基类后,可以派生出更加具体的子类,例如:由载荷类可以派生出力矩类、温度类,由属性类可以派生出杆元类、梁元类和壳元类等.
为实现有限元数据的可扩展性,HAJIF_PrePost模块采用工厂设计方法模式,通过工厂对象接口,将实际创建工作推迟到子类中,使系统在不修改工厂接口的情况下引进新的产品.如:分别定义单元类ElementSet,材料类MaterialSet,属性类PropertySet和载荷类LoadSet等8个工厂接口,然后通过定义模型管理类FemManager存储管理相应的工厂类.以种类相对较多的单元类为例,其数据结构见图3.
2.2 模型数据管理
模型数据管理是CAE软件前后处理的基础:一方面需形成统一的数据库文件,将内存中的模型数据进行存档;另一方面能根据用户需要快速方便地进行内外部数据的交换.基于C++标准库的I/O流框架虽然提供富有弹性且易于使用的流处理机制,但不具备快速对模型对象进行序列化存储、存档的能力.准C++标准Boost Serialization能以库的形式为C++提供这个重要的功能,可以序列化C++中的各种类型,同时Serialization库把存档的格式与类型的序列化完全分离开来,任意的数据类型都可以采用任意的格式保存,非常灵活.[4]由于HAJIF_PrePost模块是按照面向对象的思想进行设计的,因此可以应用Serialization库将模型对象转换为一个字节流进行存储或者传输,在需要时再恢复成与原状态一致的等价对象.
仅仅依靠Boost Serialization进行模型对象的序列化与反序列化,会存在内存泄露的问题,特别是在反序列化时虽然分配内存但是却没有合理的地方释放,采用外部释放又存在释放不完全的风险,故引入Boost库的智能指针Share_ptr进行内存管理.以材料对象为例,在材料类集合对象映射表中存储其智能指针,伪代码如下.
2.3 大模型网格的可视化
有限元模型是由三维网格单元组成的,随着建模精度的逐渐提高,网格单元数量级可能上亿.由于在三维模型可视化过程中需要显示的只是所选择的计算区域外表面的信息,因此大模型网格的可视化问题就转化为快速判断在三维网格中哪些单元面是外表面,以及哪些外表面可见的问题.
针对单元内外面问题,众所周知,由于在三维模型网格中内部单元面属于并只属于2个单元,外部单元面只属于某一个单元.组建结构外部单元面的一般方法为先形成结构中所有单元的单元面,然后对各个单元面进行比较,节点组成完全相同的面即为内部单元面,其余的即为外部单元面.[5-6]随着网格单元数目的增加,这种方法的运算量将呈几何级数增加.为提高模型的显示速度和效果,采取如下更高效的节点相关面方法.
(1)建立节点相关面列表,F(n)=F1,F2,…,其中:n为节点编号,Fi代表一个单元面,例如单元号为154的四面体的1面为154.1,2面为154.2.
(2)对非空的F(n)列表的各个相关面进行比较,剔除节点组成完全相同的面,剩下的即为节点相关的外表面.
在提取出外表面后,需要把三维模型信息经过某种投影变换在二维显示的表面上绘制出来.投影变换会失去深度信息,导致图形的二义性.要消除二义性,就要在绘制时消除实际不可见的面,对三维模型的内部单元和被遮挡的外部单元进行消隐.HAJIF_PrePost模块应用基于OpenGL的帧缓存图形消隐技术,即OpenGL的深度缓存.深度缓存保存每个像素的深度值,深度通常用视点到物体的距离来度量,有较大深度值的像素会被较小深度值的像素替代,即远处的物体被近处的物体所遮挡.[7]深度缓存也称为Z-buffer.在实际应用中,常用x和y度量屏幕上水平与垂直距离,而用z度量眼睛到屏幕的垂直距离,如果像素的z坐标值小于深度缓冲区中的深度值,则深度缓冲区中的深度值被z坐标值替代,即只保留距离观察点近的图形元素所对应的像素,也就是说他们没有被其他元素遮挡住并最终在眼前显示.对有限元模型每个显示对象的每个面上的每个点都进行上述处理后,即可得到消除隐藏面的有限元模型.某机翼盒段结构三维网格模型见图4.
3 后处理关键功能设计
3.1 彩色云图绘制
有限元数值结果主要包括位移、应力和应变等信息,相应的后处理程序以彩色云图的绘制为主要内容,以便能快速准确地掌握模型中物理量的客观分布以及极值的大小和位置等.
在计算结果平滑云图的绘制过程中,彩色云图绘制的关键之一是建立物理场量值与颜色的对应关系.[8-9]通常,有限元计算结果数值较大且危险的部位用红色表示,数值结果较小且相对安全的部位用蓝色表示.在HAJIF_PrePost模块中彩色云图的配色主要采用RGB方案,最小场值配色为蓝色,最大场值配色为红色,场值中值配色为绿色,物理量场值和颜色呈线性分布,见图5.最后,通过OpenGL绘图命令对模型进行着色,并进行绘制和填充,填充后的彩色云图使有限元分析数据的描述更为直观.某机翼盒段模型应力云图见图6.
3.2 变形图绘制
由于载荷作用,工程结构会产生各自由度方向上的变形,经有限元分析后体现为离散节点的位移.将节点位移以变形图形式表现出来,有助于更直观、更准确有效地评价结构的受力变形或振动情况.[10]但是,离散结构的节点位移相对于结构尺寸要小得多,若直接将节点位移叠加到节点坐标上并进行离散结构单元的重绘,由此得到的离散结构变形图几乎看不出整体结构的变形情况,因此需要对节点位移进行适当程度的放大.基于此,在HAJIF_PrePost模块中将最大的节点位移放大到结构尺寸的f倍,取f为0.15~0.2,模型变形图的比例换算因子
4 算 例
为验证HAJIF软件前后置模块的实际性能,选取飞机机身结构进行验证.机身模型见图8.该有限元模型包含928 768个节点,由231 600个杆元和694 800个四边形单元等近百万个单元组成,在8GB内存、2GB显存的计算机上,应用操作流畅,显示效果良好,满足使用要求.计算结果见图9.
5 结束语
(1)通过封装基本数据类派生出高级类的方法,建立面向对象的系统架构,符合现代软件的设计思想,大大提高HAJIF_PrePost模块开发效率和可维护性,对于提高软件质量以及缩短开发周期具有现实意义.(2)HAJIF_PrePost模块具有操作简单、功能全面、可扩展性强等特点,给用户带来直观的感受和操作的便利,提升国产CAE软件HAJIF的竞争力,具有广阔的发展前景,为进一步市场开拓打下坚实的基础.
参考文献:
[1] 孙侠生, 段世慧, 陈焕星. 坚持自主创
新 实现航空CAE软件的产业化发展[J]. 计算机辅助工程, 2010, 19(1): 1-6. DOI: 10.3969/j.issn.1006-0871.2010.01.003.
SUN X S, DUAN S H, CHEN H X. Keeping independent innovation, implementing industrialization development of aviation CAE software[J]. Computer Aided Engineering, 2010, 19(1): 1-6. DOI: 10.3969/j.issn.1006-0871.2010.01.003.
[2] 魏守水, 张合宝, 姜春香, 等. 面向对象微流体有限元分析软件的设计[J]. 计算机应用与软件, 2008, 25(10): 27-29. DOI: 10.3969/j.issn.1000-386X.2008.10.011.
WEI S S, ZHANG H B, JIANG C X, et al. The design of object-oriented finite element analysis software for microfluid[J]. Computer Applications and Software, 2008, 25(10): 27-29. DOI: 10.3969/j.issn.1000-386X.2008.10.011.
[3] 魏泳涛, 于建华, 陈君楷. 面向对象有限元程序设计——基本数据类[J]. 四川大学学报(工程科学版), 2001, 33(2): 17-21. DOI: 10.3969/j.issn.1009-3087.2001.02.005.
WEI Y T, YU J H, CHEN J K. Object-oriented approach to the finite element programming: basic data classes[J]. Journal of Sichuan University(Engineering Science), 2001, 33(2): 17-21. DOI: 10.3969/j.issn.1009-3087.2001.02.005.
[4] 罗剑锋. Boost程序库探秘——深度解析C++准标准库[M]. 北京: 清华大学出版社, 2012: 373-424.
[5] 徐良寅, 李云鹏, 陈飙松. 面向超大规模有限元计算的通用可视化系统SiPESC.POST的设计与实现[J]. 计算力学学报, 2015, 32(2): 220-224. DOI: 10.7511/jslx201502013.
XU L Y, LI Y P, CHEN B S. Design and implementation of general visual system SiPESC.POST for large scale finite element computation[J]. Chinese Journal of Computational Mechanics, 2015, 32(2): 220-224. DOI: 10.7511/jslx201502013.
[6] 林庚浩, 马天宝, 宁建国. 三维有限差分计算中大规模网格生成及显示技术[J]. 计算机辅助工程, 2012, 21(4): 1-5. DOI: 10.3969/j.issn.1006-0871.2012.04.001.
LIN G H, MA T B, NING J G. Large-scale grid generation and display technology in 3D finite difference computation[J]. Computer Aided Engineering, 2012, 21(4): 1-5. DOI: 10.3969/j.issn.1006-0871.2012.04.001.
[7] 简学东, 陆玲, 莫桂花. Z缓冲消隐算法的改进[J]. 计算机应用与软件, 2007, 24(9): 149-150. DOI: 10.3969/j.issn.1000-386X.2007.09.053.
JIAN X D, LU L, MO G H. An improvement to Z-buffer hidden surface remove algorithm[J]. Computer Application and Software, 2007, 24(9): 149-150. DOI: 10.3969/j.issn.1000-386X.2007.09.053.
[8] 李建波, 陈健云, 林皋. 针对三维有限元数据场的精确后处理算法[J]. 计算机辅助设计与图形学学报, 2004, 16(8): 1169-1175. DOI: 10.3321/j.issn:1003-9775.2004.08.024.
LI J B, CHEN J Y, LIN G. Precise visualiztation algorithm for the post-processing of 3D finite element model[J]. Journal of Computer Aided Design & Computer Graphics, 2004, 16(8): 1169-1175. DOI: 10.3321/j.issn:1003-9775.2004.08.024.
[9] 周伟, 田红旗, 高广军. 一种有限元科学计算可视化方法[J]. 工程图学学报, 2010, 31(5): 112-117. DOI: 10.3969/j.issn.1003-0158.2010.05.019.
ZHOU W, TIAN H Q, GAO G J. Visualization in scientific computation of FEM[J]. Journal of Engineering Graphics, 2010, 31(5): 112-117. DOI: 10.3969/j.issn.1003-0158.2010.05.019.
[10] 倪昱, 金建海, 单威俊. 舰船综合水动力分析虚拟试验系统中试验结果的可视化关键技术研究[J]. 船海工程, 2013, 42(2): 8-12. DOI: 10.3963/j.issn.1671-7953.2013.02.003.
NI Y, JIN J H, SHAN W J. Key techniques of visualization of virtual experimental result in ship hydrodynamic performance analysis system[J]. Ship & Ocean Engineering, 2013, 42(2): 8-12. DOI: 10.3963/j.issn.1671-7953.2013.02.003.