在复杂航空结构仿真计算分析中,后处理及可视化过程对于理解结构的力学分析结果、优化设计评估和验证模型可靠性等方面具有关键作用。近年来,伴随着现代航空装备结构复杂性和分析精度的不断提高,大规模有限元分析结果呈现出数据量指数级增长、数据类型多维异构的发展趋势,同时在复杂服役环境下涉及的结构仿真分析数据更是融合了时空和动态性能
[1-2],这将给结构分析及后处理可视化提出极大挑战。
传统的有限元计算结果数据文件格式,主要是各软件系统自定义的相对封闭的特定文本或者二进制格式,在处理大规模海量数据时,由于数据组织模式的限制,呈现出与现代计算机软硬件环境不适配而引起的效能瓶颈问题,进而延缓甚至停止可视化分析进程,同时在数据兼容性方面也存在难以扩展的问题。HDF5
[3]作为一种高效且应用广泛的层次化结构数据存储格式,支持数据分块存储和压缩,且兼备并行I/O(input/output)操作
[4-5],从而在处理大规模数据方面具备一定优势。这对于处理大规模有限元分析结果数据,尤其是优化设计迭代计算结果
[6]、多场耦合分析结果或者与时间步(频率)相关的动力学模拟结果数据
[7],具有重要的现实意义。
调研发现,目前HDF5文件格式已被国内外众多大型机构、HPC超算中心和工业软件用于存储大规模数据,比如美国NASA
[5]的地球观测系统EOS(earth observing system)和美国劳伦斯伯克利国家实验室主持的国家超算应用项目
[3],在面临海量复杂数据存储的问题上,经过选型均采用了HDF5作为解决该问题的有效手段。同时国外一流的大型CAE软件
[8-10]也相继采用HDF5 用于存储仿真结果(如流场分布、结构应力、温度场),替代传统的文件格式,提升数据I/O效率。国内的相关研究学者对HDF5文件也进行了一系列的技术研究和应用,程鹏
[11]针对高性能计算中大规模数据融合管理问题,设计了一种基于HDF5结构的数据管理系统,具备并发和高效的数据存储和交换效率。Fu等
[12]针对核反应堆计算,提出一种 HDF5 格式的多群截面数据库 XPZLIB,具备较好的工程适用性。冯时超等
[13]基于HDF5数据格式的并发和压缩特性,提出了一种高效稳定可靠的远程访问技术,满足了异地用户对高能同步辐射光源(high energy photon source,HEPS)海量数据的访问需求。马文鹏等
[14]针对大规模数据输入输出应用场景,提出了一种基于HDF5的多层次并行IO算法,有效提升了IO效率并避免输出文件冗余。杨丽鹏等
[15]设计了一种针对流体计算数据文件的 HDF5 存储模式,提升了程序的并行I/O效率。芦鞾等
[16]采用HDF5的数据存储和I/O方法解决了核反应堆计算软件中的大规模数据管理难题。
SABRE(structural analysis breezing)系统是中国飞机强度研究所面向大型复杂装备的结构分析需求研制推出的新一代大型CAE软件系统,软件满足数字时代新需求,适应新型计算环境资源,具备通用分析、专用分析功能和强度数据库。系统采用先进的开放式、可扩充软件架构,可方便地为用户提供个性化定制开发和服务
[17-18]。伴随着复杂结构精细化分析的发展趋势,结构分析的求解精度要求越来越高,三维模型数据规模越来越大,这就对与分析求解密切相关的前后处理中的三维图形可视化带来巨大的技术挑战。
鉴于此,现针对SABRE系统在大规模有限元后处理可视化方面的性能瓶颈问题和数据扩展性及兼容性问题,基于HDF5文件在大规模数据存取方面的性能优势,结合有限元分析结果数据的特点,采用HDF5文件组织逻辑对SABRE系统的计算结果文件进行重构和数据应用类的重写,并基于数据索引和并行读取策略优化HDF5文件读取流程,最后基于SABRE系统进行程序集成。经测试表明,该方法能够准确、高效地用于复杂结构大规模有限元分析结果数据的高效读取和可视化显示,达到预期效果,可为未来复杂结构分析场景下的海量数据快速可视化提供一种全新的技术路径参考。
1 HDF5文件格式特性
HDF5文件格式源于美国超算中心(National Center for Supercomputing Applications,NCSA)牵头研发的一种用于存储和分发复杂数据的高效的层次化数据格式
[19],具备丰富的元数据支持和并行IO组件接口,其数据库是一个C模块,能够满足现代复杂系统的大规模数据存储需求,适合科学计算和仿真数据分析应用场景。
如
图1所示,HDF5文件通常包含群组(Group)与数据集(Dataset)两类基础数据对象,通过群组和数据集可以存储任意复杂的数据。
从数据应用和存储的视角来看,一个完整的HDF5文件应包括以下4个组件。
(1)文件对象(File Object): HDF5 文件的顶层入口,负责管理文件的整体结构。
(2)组(Group):一般可以包含其他组或数据集,作为支持元数据(Metadata)的特定群组结构,类似于文件系统中的文件夹。
(3)数据集(Dataset):用以存储实际的数据,可表示为数据元素的一个多维数组,并支持元数据(Metadata),类似于文件系统中的文件。
(4)属性(Attributes): 描述组或数据集的属性信息。
每一个Dataset均包含Metadata和Data两部分数据,其中Metadata包含Data相关的信息,而Data则包含数据本身,其中元数据(Metadata)的组织结构如
图2所示,展示了三维结构化数据的元数据组织与实际数据存储架构。其中,Rank表征数据空间的维度数量,取值为 3,定义该数据为三维结构;Dimensions明确各维度的尺度参数,整体数据规模为4×5×6。Metadata(元数据)涵盖数据空间、数据类型、原生属性与对象属性四大核心模块。Datatype 规定数据元素的存储类型,支持整型(Integer)与双精度浮点型(Double),Attributes为数据关联的键值对属性,Properties 定义数据存储策略。右侧Data(数据)为实际存储的数值内容,以三维阵列形式呈现。
通常,HDF5文件在磁盘上采用数据块划分的方式存储数据,通过索引来管理数据的位置。而文件中的元数据用以记录组和数据集的层次结构以及物理存储的偏移地址,从而为数据块的快速检索提供支持。
2 基于HDF5的有限元结果数据格式重构2.1 有限元分析结果数据
结构有限元分析的结果数据是开展结构力学性能分析与评定的基础数据源。后处理可视化的核心是将这些数据进行快速解读并以图形化的方式展示给工程师用户,以辅助其进行准确决策。因此,设计高效可读的有限元结果数据结构和读取流程,是关系后处理可视化性能水平高低的关键因素
[20]。其中与有限元后处理可视化相关的主要数据信息如下。
(1)整体信息:如单元总数目、节点总数目、坐标系和工况数目等数据。
(2)节点信息:如节点编号、节点坐标、节点位移、节点约束力、节点平衡力、温度场和热流等数据。
(3)单元信息:如单元编号、单元类型、单元拓扑关系、单元内力、单元应力、单元应变、单元能和优化迭代结果等数据。
(4)描述信息:如工况名称、分析类型、结果类型、分量类型、时间步和振型分布等数据。
基于以上数据特征,按照面向对象的程序设计方法,抽象和定义了有限元对象基本类,如
图3所示,包含节点、单元、载荷、边界、材料、属性和任务等基类,其中节点类Node和单元类Element是有限元对象数据结构的基础类,通过对基类的封装,可生成派生类,应用于有限元分析过程,结果数据信息可以作为模型的属性数据直接附加在节点和单元上。
2.2 有限元数据存储格式的设计
一般结构有限元分析的结果数据大多包含多个文件,但均具有较为清晰的数据类别及结构,该特点与 HDF5的层次结构特性较为契合。因此,采用HDF5文件格式将有限元分析结果数据统一存放在同一个文件中,可大幅降低由于存储多个文件引起过多的数据冗余及I/O次数。
基于HDF5的层次结构,通常将结果数据存放在HDF5文件的顶层DataSet内。但实际工程应用中,工程师用户除了需要了解整体结构的受力情况,更关注的往往是整体结构中关键部位(连接件、主承力结构),从而就需要对这些区域进行网格加密操作,实施精细化分析以获取关键部位精确的力学响应。因此,按照结构特点对有限元模型及结果数据进行分区管理,即每个区域的数据单独存储于一个 Group 中。对于细分网格的结构区域,则在相应 Group 内构建 Group,Group 内构建 DataSet,分别用于存储该区域不同密度网格的结果数据,形成不同密度网格的结果数据层次存储,如
图4所示。
2.3 基于HDF5 API的有限元对象类实现
考虑到程序实现的执行性能,基于有限元对象基础数据类,通过调用HDF5的API接口进行抽象及编码,形成全新的有限元对象类,可实现对基于HDF5文件的有限元结果数据的读取。
如
图5所示,以单元为例说明,常用的单元类属性包括单元号、单元类型、单元拓扑关系和单元结果数据等。按照业务应用需求,单元类的方法主要包含数据的设置、更新、修改、存储和获取等,主要接口如下。
(1)设置单元编号:setId( )。
(2)获取单元编号:getId( )。
(3)获取单元材料:getMat( )。
(4)获取单元节点编号列表:getNodeId( )。
(5)获取单元节点编号数:getNodeCnt( )。
(6)设置单元数据:setData( )。
(7)获取单元数据:getData( )。
(8)获取单元结果信息:getResData( )。
(9)设置单元结果信息:setResData( )。
$\text { ⋮ }$
3 基于HDF5文件的结果数据读取流程
3.1 HDF5文件数据读取常规流程
结合后处理数据读取和加载的典型流程,针对HDF5文件格式的结果数据加载流程设计如
图6所示。
具体包含以下5个步骤。
步骤1 打开文件。HDF5采用文件句柄打开文件,并初始化文件元数据结构。
步骤2 定位数据集。依据用户指定的路径关键字,通过层次结构逐层遍历找到目标数据集。例如当用户请求读取某个路径(如 /group1/dataset1)时,HDF5 按路径逐层遍历,从根组开始找到目标对象,比如在根组的索引表中查找 group1 的存储位置,进入 group1,从其索引表中查找 dataset1 的存储位置。这种逐层解析结合索引表可以定位目标数据集。
步骤3 加载数据块。根据数据集的存储布局加载相关的数据块到内存,包括以下3步。
(1)读取元数据:定位到目标数据集后读取其元数据,包括数据集的维度和类型,同时获取数据块的布局和每个块的存储地址。
(2)定位数据索引,如果数据采用了分块存储,需要计算用户请求的范围涉及的块索引,从元数据中定位相关块的物理存储位置。
(3)加载数据块到内存,如果数据是连续存储的,则根据偏移地址读取。
步骤4 解码数据。将HDF5的数据块根据内存分布解析为对应数据格式的数据,从而获取到HDF5文件的原始数据。
步骤5 返回数据。返回解码后的数据给用户进行可视化处理。
3.2 大规模HDF5数据读取优化策略
在大规模结构分析中,有时候单个工况下的数据量特别大,如50G文件数据中单个位移的数据为3 000×230×104条,常规方式根本无法直接读入缓存。因此在传统加载方法的基础上从数据块查找和数据读取两方面进行了优化,优化后的加载流程。具体描述如下。
3.2.1 数据块文件索引查找策略
在HDF5数据块中,每个特定的数据块代表特定类型的结果数据。从用户使用的角度而言,需要在UI界面选取工况(case)、结果类型(result type)和分量类型(component)3种参数,便能指定特定的结果数据。因此,通过单元映射与分量映射,绑定UI界面与HDF5数据源文件的映射关系(如
图7所示),可动态生成HDF5文件内部数据结构树,建立文件索引映射表,从而快速查找HDF5文件中指定的数据块,以提高数据索引效率。
3.2.2 数据块并行读取方法
针对大规模数据的读取优化,基于HDF5原生并行I/O支持特性,采用多线程和openMP并行的方式进行优化处理。其中多线程采用Qt 的QThread
[17,21]线程类,可创建独立线程,并行读取数据,使用QThreadPool线程池管理多个数据块读取任务,以确保每个线程读取不同的HDF5数据范围,避免冲突。
3.2.3 并行加载读取优化流程
在常规加载流程(3.1节)的基础上,根据优化策略(3.2.1节和3.2.2节)优化了HDF5数据加载流程,如
图8所示。
其中核心改进步骤描述如下。
步骤1 UI数据获取。根据所选的HDF5文件数据进行文件初始化,生成该文件对应模型的分析工况、结果类型和分量信息并显示在用户界面中。
步骤2 文件索引映射。根据在打开文件初始化时获取到的HDF5文件的树组织结构以及UI界面对应的工况-类型-分量信息,建立UI显示数据与HDF5文件原始数据的数据映射关系。
步骤3 数据缓存。通过主界面获取指定HDF5文件数据时,先通过映射关系找到对应的原始数据,然后将原始数据放入缓存中,通过3.2.2节的并行读取策略对缓存数据进行分块读取,从而获取目标数据。
4 程序实现
依据以上描述的技术算法原理,采用C++、Qt及OpenGL编程框架,基于SABRE前后置平台
[17]完成了该方法的程序集成,研发出可支持HDF5文件格式的有限元结果数据可视化模块。该模块的系统架构如
图9所示,其采用三层体系架构设计,实现了有限元分析数据流有机衔接。其中最底层为数据层,用于进行有限元模型和结果数据存储和管理;中间层为业务层,用于串联界面层参数与数据层数据,完成与渲染接口的关联;最顶层为界面层,负责用户交互参数输入和反馈结果显示及交互操作。
在此,参考文献[
22]中描述的交互界面设计方法,完成HDF5文件格式的有限元结果数据可视化模块界面开发,如
图10所示为HDF5结果数据加载和三维显示界面,包含数据加载、参数选择操作界面和三维模型渲染视图。
图10(b)中为环形散热器结构模型的静态有限元分析结果,展示了结构在
Y方向上的位移分量
Ty。
通过界面文件路径一次性加载HDF5结果文件,根据界面参数(工况、结果类型和分量)基于数据块索引映射表实现并行快速读取,然后调用SABRE前后置的图形渲染接口完成结果数据的图形显示,整个过程操作流畅。
5 测试与验证
为了测试与验证本文算法的有效性,分别使用HDF5法和C++ fstream类读取常规的OP2二进制文件的方法进行测试,以验证本文方法在读取结构分析结果数据文件方面的性能。测试硬件为单机环境:Intel(R) Core(TM) i5-10300 CPU@2.5 GHz,八核处理器。
5.1 读取准确性测试
测试对象为某机械结构部件模型,通过两种方法读取和显示相同模型的结果数据,采用数据查询的方法进行比对,如
图11所示,其中
图11(a)、
图11(b)均为机械结构模型的静态有限元分析结果,展示了结构在
X方向上的位移分量
Tx。可以看出显示云图趋势完全一致,色谱显示数组值范围一致,指定元素结果数据完全一致,从而可说明本文方法数据读取解析的准确性。
5.2 读取效率测试
测试对象为某航空机翼部件结构,通过构建6组不同密度网格的有限元模型测试HDF5数据读取效率,其中6组不同密度的网格模型规模及结果数据(OP2和HDF5数量大小)如
表1、
表2所示。
在此采用SABRE系统分别进行有限元静力分析,获取不同密度的结果数据。鉴于篇幅,此处只展示最大网格密度(组6)的结构模型结果,如
图12所示,为机翼结构模型的静态有限元分析结果,展示了结构在
X方向上的位移分量
Tx。
测试数据和结果分析如
表3和
图13所示。可以看出,在单机多核的并行环境下,所提出的基于HDF5文件格式的有限元结果数据存储和并行读取方法具有较高的性能水平,实现50 s内完成G级数据的读取,能够显著解决大规模结果数据读写瓶颈问题。同时,本文方法随着模型规模的扩大,读取效率显著提高,其效率接近传统方法的3倍。
6 结论
针对复杂航空装备精细化结构分析中产生的大规模复杂结果数据读取速度慢、可视化能力弱的问题,基于HDF5文件格式特性,分别从结果数据结构的重构、标准应用类的重写、结果数据的并行加载读取和图形渲染流程的关联等方面进行重点研究,提出了一种基于HDF5文件格式的大规模结构分析结果数据并行加载和快速读取方法,并基于SABRE系统框架从界面设计、业务流程串联和底层数据支持三方面构建了程序实现框架,完成了软件系统集成,形成了一款可支持复杂结构大规模后处理可视化的三维显示软件。测试表明,本文方法在大规模有限元结果数据读取方面具备显著技术优势,可支持单机环境下千万自由度模型的三维可视化,其中读取效率接近传统方法的 3 倍,整体性能可支持G级数据可视化需求,大幅提高了自主 CAE 软件 SABRE的后处理可视化水平,同时可兼容主流CAE软件的HDF5结果数据格式,具备较高的工程应用推广价值。