APP下载

基于HAJIF的前后置处理模块的设计与实现*

2017-03-31王晓辉郭瑜超张生贵

计算机与数字工程 2017年3期
关键词:云图可视化有限元

王晓辉 黄 河 郭瑜超 张生贵

(中国飞机强度研究所 西安 710065)

基于HAJIF的前后置处理模块的设计与实现*

王晓辉 黄 河 郭瑜超 张生贵

(中国飞机强度研究所 西安 710065)

针对国产有限元软件HAJIF对大规模可视化的前后置处理功能的迫切需求,设计并实现了具有高度开放性的前后置处理模块HAJIF_PrePost。在软件框架设计方面,基于面向对象的思想,引入层次化、组件式的体系结构,该结构具有高效计算和高效通信特性,满足大规模数据处理要求;在前处理功能设计方面,引入准C++标准Boost库,解决了模型数据的持久化与内存管理问题,采用节点相关面法以及OpenGL深度缓存机制,提升了模型显示效率;在后处理功能设计方面,设计实现了彩色云图的绘制,变形和动画的生成方法,并且实现了后置动态查询功能。实际应用表明:基于面向对象方法实现的HAJIF_PrePost前后置处理模块具有很好的实用性、用户体验以及可扩展性。

可视化; HAJIF; 面向对象; 设计模式; OpenGL

Class Number TP317.4

1 引言

在有限元分析中,前后处理系统作为检查、分析有限元计算结果的有效手段,现已成为一种被广泛采用的可视化技术。同时,前后处理系统功能的强大与否也已经成为衡量有限元软件优劣的标志。虽然国外大型有限元软件(如ANSYS、ARGOL、NASTRAN、ABAQUS)等都有很强的前后处理功能,但属于通用型有限元软件其内核庞大、价格高、技术封锁、源代码封闭等知识产权问题,导致专业性不够强。而HAJIF软件作为航空工业集团自主研发的大型有限元分析软件系统,功能涵盖了静力、模态、屈曲等通用功能以及优化、静弹、颤振、热应力分析等专用求解功能[1],在经济、效率方面体现出一定的优越性。近些年来,随着计算机技术的发展和多年的潜心攻关研究,HAJIF计算系统在求解规模效率方面有了很大提升,但很长时间里只能依附于其他前后处理工具进行分析。同时,伴随着HAJIF计算系统的市场化,增强软件可视化和后置数据处理功能就显得尤为重要。

鉴于此,本文采用面向对象的程序设计思想,从软件通用性和开放性出发,采用层次化、统一化的软件体系架构,借助于主流的程序设计语言C++和OpenGL图像标准设计设计开发了有限元可视化软件HAJIF_PrePost,并针对其中的框架设计、数据管理和可视化等关键技术进行了探讨。

2 系统框架和数据结构的设计

整个软件使用Visual Studio 2010 搭建坏境,以有限元数据结构为核心,进行数据处理、数据分析和数据显示三部分内容,从而实现各种功能, 完成一个完整的前后处理系统。

2.1 统一的功能性框架模型

该模型应该具备跨平台性能的图形环境,按照面向对象的程序设计思想,利用其封装性、继承性、多态性来分离和封装处理图形图像的基本功能[2]。在总体架构上,HAJIF_PrePost软件采用三层体系架构(如图1所示),最底层为数据层,管理有限元模型数据及图显数据,属于软件的数据基础;中间层为业务层,串联界面层与数据层,完成具体功能接口的定义实现、模型读写、数据处理等,属于软件核心;最顶层为界面层,完成数据显示和用户交互功能,同时包含参数建模和求解任务的管理等。

图1 软件总体架构

鉴于框架开放性的考虑,整个软件的架构通过一个主程序和多个基础服务组件构成,整个构建过程遵循面向对象和模块化的软件构建技术,通过动态链接库的方式形成一系列基础服务组件,不同组件通过定义接口协同工作、完成数据传递(如图2所示)。

图2 基于组件式的系统结构

2.2 统一的数据结构

有限元分析数据,结构复杂,种类繁多,分析过程中涉及到大量数据[3],主要包括:1) 描述有限元分析的整体数据,如单元数、节点数、材料种类数等;2) 节点数据, 如节点坐标、节点自由度、节点力、节点位移等;3) 单元数据, 如单元类型、单元属性数据、单元材料数据等;4) 材料数据, 包括弹性模量、泊松比等;5)荷载数据, 包括体力、集中力、面力、动力荷载;6) 约束数据,包括约束节点、约束位移;7)结果信息,包含元素位移、单元力、应力、应变等数据。基于以上特征, 按照面向对象的程序设计方法,应用分层设计的原则,抽象和定义了相关的类,按照功能组合形成了程序总体数据结构,如图3 所示。

图3 有限元数据结构

其中,基本数据类Node、Element、Constraint、Load处于数据结构的核心层,分别实现了对节点数据、单元数据、荷载数据、约束数据的封装,便于生成派生类,应用于不同类型的有限元分析,同时又可以相互关联。

例如,由载荷类可以派生出力矩类、温度类,由属性类可以派生出杆元类、梁元类、壳元类等,以种类相对较多的单元类为例,其类层次关系结构见如图4所示。Property、Material类分别实现对单元属性数据、材料数据的封装,处于数据结构的最底层,直接为Element 类及其派生类服务,不与其他类发生关联。可以看出通过类的继承设计,搭建起了采用面向对象设计思想的数据结构框架。最后,结果数据主要借助节点和单元进行存储,从而与各种有限元分析结果相结合,形成了一个有机的整体。

图4 单元类数据层次关系结构

3 前处理模块关键技术

3.1 有限元模型模块

实际应用中,有限元模型文件、单元形式以及计算结果多种多样,要求该模块具有很好的可扩展性。因此,HAJIF_PrePost软件采用了工厂方法设计模式[4],利用面向对象继承的重要特性,对有限元前后置处理的所有类别进行筛选和归类,建立起一个完整的前后置处理的类层次结构。该模式通过定义产品对象接口和工厂对象接口,将类的实例化延迟到到其子类中,使系统在不修改工厂接口的情况下引进新的产品[4]。工厂方法模式示例如图5所示。

图5 工厂方法设计模式

对应于有限元模型模块,主要定义了文件导入类,元素类和结果类三个产品对象接口以及文件导入描述类,元素描述类和结果描述类三个工厂接口。元素类用于保存单元、节点数据及与其结构相关的边线和面片信息,具体包含模型数据中各个基类。由于整个模块存在多个扩展接口和工厂接口,需要通过hjf_fem中的模型管理类Femproject用于管理各种基本类。为了便于其他组件调用,管理类Femproject在组件加载时,要存储到系统全局对象列表中,供其他组件使用。

3.2 基于Boost库的模型数据管理

模型管理是CAE软件前后处理的基础,一方面要求形成统一的数据库文件,将内存中的模型数据进行存档;另一方面要求快速方便地进行内外部数据的交换。准C++标准库Boost Serialization以库的形式为C++提供了这个重要的功能,可以序列化C++中的各种类型,同时可以把存档的格式与类型的序列化完全分离,任意数据类型可采用任意格式的存档保存,具有极大的灵活性[5]。在此使用 Serialization程序库将模型对象转换为一个字节流进行存储或传输,而在需要时再恢复到与原状态一致的等价对象,同时采用Boost库的智能指针(Share_ptr)进行内存管理,避免了由于Boost Serialization在进行模型对象的(反)序列化时发生内存泄露问题。

3.3 模型网格可视化

三维模型可视化主要包括网格图形的快速形成和高效消隐,本质上即只显示计算区域外表面的信息。

首先,确定模型的内外面。在三维模型网格中,内部单元面属于并只属于两个单元,外部单元面只属于某一个单元[6~7]。因此,采取节点相关面方法确定模型的内外面:

1) 建立节点相关面列表F(node)=F1,F2…,其中node为节点编号,Fi代表一个单元面,如单元号为127的四面体的1面为127.1,2面为127.2;

2) 对非空的F(node)列表的各个相关面进行比较,剔除节点组成完全相同的面,剩下的即为节点相关的外表面。

其次,完成模型网格的绘制。绘制过程中需要通过OpenGL的深度缓存(Z缓存)技术[8],对三维模型的内部单元和被遮挡的外部单元进行消隐,从而完成三维模型的可视化。

4 后处理模块关键技术

有限元分析中的后处理技术主要是研究有限元模拟结果的可视化问题,在分析成形时,由于可视化技术具有显示、检查、调整、改善有限元分析结果的功能,因此,在大量工程应用中发挥了重要的作用。

4.1 数据描述和接口定义

后置处理系统的主要功能就是将有限元分析后置处理系统的主要功能就是将有限元分计算产生的大量的结果数据以图形化的方式显示出来,因此建立有效的数据结构,对结果数据进行详细的分析,是关系到后置处理系统成败的关键。根据系统需求和功能分析,有限元后置处理系统一般涉及到以下结果数据:

1) 节点数据,包括节点编号、节点坐标、节点法矢,节点应力应变、节点约束力;

2) 单元数据,包括单元编号、单元相关节点、单元内力、单元应力应变;

3) 结果数据描述信息,包括工况信息、结果类型、分析类型。

根据结果数据类型和可视化需求,通过引入数据块的方法,基于二进制格式文件读写快速、高效的特点,对结果数据进行了重新组织。此外,在后置模块中针对标量、矢量和张量数据定义了后置显示功能接口:

1) 节点云图显示

int showNodeContour(list〈int〉 &elemIdList, list〈ScalarData〉&nodeDataList)

说明:对节点标量数据ScalarData进行云图显示,输入数据为单元列表,外部节点号及节点相对应的标量数据。

2) 单元云图显示

int showElementContour(list〈ScalarData〉 &elemDataList)

说明:对单元标量数据ScalarData进行云图显示,输入数据为与单元相对应的数据。

3) 变形

int showDeformation(list〈VectorData〉 &nodeDeformList)

说明:按照位移矢量显示变形,输入数据为外部节点号及节点位移,且考虑放大系数。

4) 动画

int showAnimation(list〈int〉 &elemIdList, list〈int〉 &nodeIdList)

说明:时域动画显示,主要用于瞬态分析和非线性分析,输入数据为与时间或者载荷相关的节点,单元数据,进行变形和云图的显示。

5) 二维和三维曲线

void onShow2DCurve(x[],y[])

void onShow3DCurve(x[],y[],z[])

通过定义后置接口,不仅隐藏了具体功能实现的细节,更方便了后置功能的扩展,提高了模块的利用率和有效性。

4.2 结果数据可视化

有限元后处理分析中的可视化技术主要包含标量场可视化技术和矢量场可视化技术。标量场可视化技术主要包含彩色云图、等值线图、等值面及切片图,其中以彩色云图最为常用。矢量场的可视化技术比较复杂,大多数情况下也必须将其转化成对应的标量场进行可视化处理。

4.2.1 彩色云图

有限元结果数据包括位移、单元力、应力、应变等信息,可以基于彩色云图的绘制,通过颜色变化反映物理数据的变化,快速、直观、准确地表现物理量在模型中的分布、位置与极值大小等。其中,绘制彩色云图的关键之一是建立物理场量值和颜色的对应关系[9~10],如图6所示。

图6 物理量场值和颜色的对应关系

在Windows环境中确定颜色的常用方法是运用RGB宏指令,一般而言,有限元计算结果数值较大危险的部位用红色表示数值结果较小且相对安全的部位用蓝色表示。

简要的操作流程如图6所示,首先确定绘制的变量是否为节点变量,如果为单元变量则还需要转化类型;然后,按照一定规律确定颜色值集合,即色谱,根据变量相对值选定颜色数值;最后,通过OpenGL绘图命令对模型进行着色、融合和反走样处理,完成云图绘制。

图7 彩色云图绘制步骤

此外,在普通云图的基础上,通过对各个单元节点的环境颜色与色散颜色进行Lagrange线性插值,采用平滑过渡的方式实现连续云图。此外,通过剔除模型内部单元,降低模型单元渲染量,提高显示效率;采用OpenGL显示列表模式[11~12],设计成命令高速缓存,避免使用传统模式下绘图流水线的绘制方式,从而减少资源消耗,提高程序的运行效率。

4.2.2 变形显示

载荷作用下的工程结构会产生各自由度方向上的变形,经有限元分析后体现为离散节点的位移,从而将节点位移通过变形图的形式表现出来,有助于更直观、更准确、更有效地评价结构的受力变形或振动情况[10]。但离散结构的节点位移相对于结构尺寸要小得多,需要对节点位移进行适当比例的放大,再叠加到节点坐标上进行离散结构单元的重绘,由此更形象地表现整体结构的变形情况。在HAJIF_PrePost软件中将最大的节点位移放大到结构尺寸的γ(0.1~0.2)倍,对于二维和三维模型变形图的比例换算因子由式(1)确定。

(1)

其中,Sx,Sy,Sz分别表示结构模型在X,Y,Z三个方向上的最大跨距,Xi,Yi,Zi分别表示节点i在X,Y,Z三个方向的位移值。

将节点位移作为节点场变量,绘制与节点位移变形图相结合的彩色云图,不仅能考察被分析结构的位移分布情况,还能够准确直观地评价结构在计算工况下的变形情况。

4.2.3 动画显示

通过动画显示可以动态描述模型结构从受力变形至破坏的过程。其中,在OpenGL中提供了双缓存(Double Buffer)技术[11]来实现动画显示。即通过设置前后台两个缓存,在显示前台缓存中的内容时,同时在后台缓存中计算场景绘制下一帧画面,绘制完成后,交换至前台缓存,将后台缓存用于显示,而前台缓存用于绘制下一帧画面。如此循环往复,不仅提高了运行速度和显示效果,且很好地解决视觉上的停顿和闪烁问题。因此,HAJIF_prepost后置模块中采用OpenGL的双缓存技术,通过在执行绘图代码时能够在一个屏幕之外的缓存区内进行渲染,然会用交换命令把图形瞬间切换到屏幕上,大大提高了显示效率。

4.2.4 后置查询功能

为了更方便用户在后置显示时可以对云图数据进行观察和分析,基于Qt的信号与槽机制完成结果数据和视图界面对象之间的通信[13],可以动态查询节点、单元结果信息,并和云图显示一一对应,更好地完成视图与用户的交互。

5 应用算例

为验证HAJIF_PrePost软件的实际性能,选取不同模型从软件显示规模、显示效果和显示类型三方面进行了验证。试验机器选用Windows 7系统,内存8G,显存4G。

1) 超大规模有限元模型可视化

面对超大规模汽车有限元模型(168万节点,166万单元),HAJIF_prePost前置模块有很好的实用性和有效性。由于采用基于Boost库的模型数据管理方法,从而使得模型的读写操作变得快速和高效,模型导入速度和patran相当,具体如图8所示。

图8 某汽车全车模型图

图9 某汽车全车模型彩色云图

图10 某汽车底盘模型彩色云图

该数量级的模型对数据处理能力和图形渲染效率的要求都很高,HAJIF_prePost软件可以正常显示,且旋转、缩放操作流畅。

2) 某机型后堵板模型和计算结果的可视化

该实例模型包含1.5万节点,1.3万单元(如图10所示),包含位移、应力和应变等计算结果,通过快速高效地导入内存进行解读,可完成云图绘制(如图11所示)和变形显示(如图12所示),同时支持实时数据查询和高亮显示,便于后处理分析。

图11 某机身后堵板模型网格可视化

图12 某机身后堵板模型应力云图

图13 某机型后堵板变形云图和后置查询功能

3) 支持多种分析类型的结果可视化

由于在后置模块中定义了标准显示接口,因此具有很好的扩展性和兼容性。目前除支持静力、屈曲、模态外,还支持热、气弹、颤振和优化等分析结果数据的可视化分析(如图14~图16所示)。

图14 热分析下热应力变形云图

图15 热传导分析下温度梯度云图

图16 满应力分析下应力比云图

6 结语

在需求分析的基础上,通过封装基本数据类、派生出高级类的方法,建立了面向对象的系统架构,设计了统一的数据库,在具体实现中采用工厂方法设计模式,组件技术,Qt图形用户界面库,OpenGL图形处理库和准C++标准库Boost,实现了一个具有大规模数据处理能力,开放性,可扩展性的有限元前后处理模块HAJIF_PrePost;通过应用实践证明,该软件有很好的实用性,支持多种分析类型和结果类型,给用户带来了直观的感受和操作的便利,解决了一定的工程问题,同时也提升了国产CAE软件HAJIF的市场竞争力,具有广阔的发展前景。

[1] 孙侠生,段世慧,陈焕星.坚持自主创新实现航空CAE软件的产业化发展[J].计算机辅助工程,2010,19(1):1-6. SUN Xiasheng, DUAN Shihui, CHEN Huanxing. Keeping independent innovation, implementing industrialization development of aviation CAE software[J]. Computer Aided Engineering,2010,19(1):1-6.

[2] 魏泳涛,于建华,陈君楷.面向对象有限元程序设计——基本数据类[J].四川大学学报(工程科学版),2001,33(2):17-21. WEI Yongtao, YU Jianhua, CHEN Junkai. Object-oriented approach to the Finite Element Programming: Basic Data Classes[J]. Journal of SICHUAN University(Engineering Science Edition),2001,33(2):17-21.

[3] 柳洋,一种新的CAE分析结果后处理平台[J].机电一体化技术,2012,10(7):1-5. LIU Yang, A Novel Post Processing Plat form for CAE Result Analysis[J]. Electromechanical integration technology,2012,10(7):1-5.

[4] Gamma E,Helm R. Johnson R, et al. Design Patterns: Elements of Reusable object-Oriente_d software[M]. Boston: Addison Wesley,1994.

[5] 罗剑锋,Boost程序库探秘——深度解析C++准标准库[M].北京:清华大学出版社,2012:373-424. LUO Jianfeng. Deciphering Boost C++ standard libraries[M]. Beijing:Tsinghua University Press,2012:373-424.

[6] 余卫平.有限元网格图形处理技术及计算结果的可视化[J].计算机辅助设计与图形学学报,2003,15(12):1561-1565. YU Weiping. Quick Visualization of Finite Element Analysis Results[J]. Journal of computer aided design & computer graphics,2003,15(12):1561-1565.

[7] 林庚浩,马天宝,宁建国.三维有限差分计算中大规模网格生成及显示技术[J].计算机辅助工程,2012,21(4):1-5. LIN Genghao, MA Tianbao, NING Jianguo. Large-scale grid generation and display technology in 3D finite difference computation[J]. Computer Aided Engineering,2012,21(4):1-5.

[8] 简学东,陆玲,莫桂花.Z缓冲消隐算法的改进[J].计算机应用与软件,2007,24(9):149-150. JIAN Xuedong, LU Ling, MO Guihua. An improvement to z-buffer hidden surface remove algorithm[J]. Computer application and software,2007,24(9):149-150.

[9] 李建波,陈健云,林皋.针对三维有限元数据场的精确后处理算法[J].计算机辅助设计与图形学学报,2004,16(8):1169-1175. LI Jianbo, CHEN Jianyun, LIN Gao. 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.

[10] 周伟,田红旗,高广军.一种有限元科学计算可视化方法[J].工程图学学报,2010(5):112-117. ZHOU Wei, TIAN Hongqi, GAO Guangjun. Visualization in Scientific Computation of FEM[J]. Journal of engineering graphics, 2010(5):112-117.

[11] Dave Shr einer. OpenGL编程指南[M].北京:机械工业出版社,2010. Dave Shr einer. OpenGL Programing Guide[M]. Beijing: Mechanical industry publishing house,2010.

[12] 敖承谦,OpenGL在注塑模CAE后处理模块中的应用[J].计算机辅助工程,2003,16(3):7-10. AO ChengQian, Application of OpenGL in Post-treatment System of CAE for Injection Moulding[J]. Computer Aided Engineering,2003,16(3):7-10.

[13] Blanchette J. Summerfield M.C++ GUI Qt 4 编程(第二版)[M].北京:电子工业出版社,2008:15-17. Blanchette j. Summerfield M.C Qt 4 + + GUI programming (second edition) [M]. Beijing:Electronic Industry Press,2008:15-17.

Design and Implementation of Pre-Processing and Post-Processing Module Based on HAJIF

WANG Xiaohui HUANG He GUO Yuchao ZHANG Shenggui

(Aircraft Strength Research Institute of China, Xi’an 710065)

As to the large scale visualized pre-processing and post-processing demands of HAJIF Fem system, an high open pre-processing and post- processing software for HAJIF is designed and implemented. In the architecture design, the hierarchy structure design of framework is detailed based on the object-oriented design technologies. In the pre-processing, Fem model data is documented and variable memory is managed by Boost which is similarly C++ standard lib. And the method of grid-face correlativity and depth-buffer mechanism of OpenGL are used to improve visibility efficiency for Fem model. In the post-processing, the contour drawing, deforming and animation generation are design and implemented, then rear query function is added. The practical application shows that it has a practical performance, user experience, and extensibility.

visualization, HAJIF, object-oriented, design pattern, OpenGL

2016年9月8日,

2016年10月26日

王晓辉,男,硕士研究生,助理工程师,研究方向:虚拟实验与航空软件研发。黄河,男,硕士研究生,工程师,研究方向:虚拟试验与航空软件研发。郭瑜超,男,工程师,研究方向:虚拟试验与仿真优化。张生贵,男,研究员,研究方向:虚拟试验与航空软件研发。

TP317.4

10.3969/j.issn.1672-9722.2017.03.032

猜你喜欢

云图可视化有限元
基于扩展有限元的疲劳裂纹扩展分析
基于CiteSpace的足三里穴研究可视化分析
利用精密卫星星历绘制GNSS卫星云图
自然资源可视化决策系统
思维可视化
自然资源可视化决策系统
新型有机玻璃在站台门的应用及有限元分析
三维云图仿真系统设计与实现
黄强先生作品《雨后松云图》
6岁儿童骨盆有限元模型的构建和验证