Saturday, May 16, 2026

工程仿真软件中的网格1:数据结构

现代工程仿真软件的功能丰富,网格作为所有仿真计算的入口模块,在整个软件中占据着越来越重要的位置。网格模块的功能、稳定性与效率,直接影响到整个仿真软件的使用。网格直接关系到软件的计算功能,三维显示,人机交互等方面。本系列从开发者的角度探讨工程仿真软件中的网格模块,内容覆盖网格划分,算法,数据结构,特殊功能等。本文作为系列的第一篇文章,讨论网格的数据结构及其输入输出。 Image 有限元网格的数据结构 有限元软件向上承接CAD软件的几何拓扑数据,向下生成求解器支持的网格,因此有限元网格数据需要包含两者的信息,起到承上启下的作用。同时,还需要支持网格的三维显示,因此开发者必须要对数据结构进行精心地构架。最常见的方式,是以几何拓扑为出发点,每个几何体(entity)都包含下一级的几何体和相关的有限元节点与单元信息。 Image 如几何模型命名为Model,会包含名为Region,Face, Edge,和Vertex数据,这本质上是一种简化版的B-Rep格式,即用物体的边界(面/边/点)来表示实体,是精确的曲面与精确的拓扑数据几何。从层级由高到低分类, Compound → CompSolid → Solid → Shell → Face → Loop → Wire-> Edge → Vertex 这也是常见CAD引擎的B-Rep数据方式,其中Wire与Edge的区别是Wire会有曲率,Loop是闭合边序列,构成Face的边界。Shell是连通的Face集合。CompSolid是多个Solid粘连,是多体零件的数据形式。网格划分对于CompSolid要对做特殊处理,需要确保网格要沿着共享内表面和共享边划分。关于B-Rep数据的细节会在以后的文章中详细讨论。 Region数据指向的是CompSolid和Solid几何体,包含所有的几何面信息,内部的几何面,几何边,几何节点,和网格体单元信息。 Face数据指向的是Face和Shell几何体,包含所有几何边信息,所属的几何体,内部的几何边与几何节点信息,以及网格面单元信息,如三角单元,四边形单元,和多边形单元。 Edge数据指向的是Wire与Edge几何体,包含所有的几何节点信息,所属的几何面,所含有的网格线单元。 Vertex数据指向Vertex几何体,包含所属几何节点与网格节点信息,所属几何边的信息。 这样的数据映射方式,可以快速的查找网格与几何体数据,如获得某一个几何面上的网格面单元或节点,这在有限元计算的边界条件上经常用到。 B-Rep与网格的转换有两种,一种是通过tessellation/triangulation网格化/三角化转变为表面网格,用于显示几何体。另一种是实体网格,用于有限元计算和网格显示,如使用VTK的非结构网格数据。现代有限元软件,两种转换都是必备的。而逆向的网格转换为B-Rep几乎难以完美实现,因此很少应用。 网格数据的输入与输出 网格数据有大量的交互需求,现代仿真软件除了支持自有的网格格式外,还需要能够支持常见的通用格式。对于有限元(包含有限体积,谱单元)等类型的网格,常见的格式有UNV, VTU(PVTU), GMSH,EXO,CGNS, MED, INP等。这些格式都各有优点。 Image 开发者可以直接应用这些格式或开发包,来构建软件的核心数据结构和读写网格文件。UNV是一款功能丰富且易于使用的网格格式,支持大量的网格元素,如定义可以支持边界条件的组信息,读写都有ASCII与Binary两种格式支持。VTU在图形显示上有着天然的优势,有整个VTK开源代码与生态的支持,也是一款很好的网格数据读写格式。目前WELSIM主要使用UNV和VTU两种格式作为基础网格数据,同时支持这些格式的数据导入与到处。 当仿真软件的功能变多时,开发者可能还需要增加其他的数据。如CAD拓扑信息与网格的映射关系,动网格数据每个层级的关系,子模型与全局模型的网格映射等等。这些数据是基础网格数据的重要补充,由于这些数据大小可能不一,需要一种灵活且可压缩的数据格式来支持,比较理想的是用Hdf5格式文件。WELSIM会在网格划分完毕后,生成一个名为s2m.h5的文件,来包含几何拓扑与网格的映射关系。 总结 本文讨论了仿真软件的网格数据结构与输入输出方式。是被验证了可以应用于通用仿真软件的网格模块。可以满足大部分功能需求。甚至对于一些高级网格功能,如实时仿真,并行计算都能够很好的适应。对于一些复杂的特殊功能,如边界层网络,多体零件的内部嵌入面网格划分,都可以在此数据结构上进行开发。

No comments:

Post a Comment