网格(Mesh)用于计算机屏幕渲染和物理模拟,如有限元分析(Finite Element Analysis, FEA)和计算流体力学(Computational Fluid Dynamics, CFD)。通过将复杂形状(如桥梁)分解为简单单元(如三角形),我们可以对每个单元进行计算并模拟其相互作用,从而实现模拟和可视化。
网格生成(Mesh Generation)是指将连续的几何空间划分为离散的几何单元和拓扑单元的过程。
这一过程通常通过计算机算法完成,必要时可结合人工干预。网格生成的目标是创建一个既能准确反映输入域几何特征,又具有高质量(形状良好)单元的网格。同时,需要避免生成过多的单元,以免增加后续计算的难度。在对后续计算至关重要的区域,网格应更为精细(单元尺寸较小),以提高计算精度。
术语
网格生成
- Mesh generation / Meshing(网格生成/网格划分):指生成网格的过程。
- Grid generation / Gridding(网格生成/网格布置):范围更广??包含网格优化,即通过调整网格以提高数值计算的速度或精度。
- Tessellation(镶嵌/铺砖):在计算机图形学和数学中,有时用作网格的同义词。
网格单元命名
- Nodes / Points(节点):表示0维单元,在计算几何中通常称为Vertices(顶点)。
- Edges(边):表示1维单元。
- Faces / Cells / Entities(面/单元/实体):2维或更高维的单元,具体名称视应用而定。
- Elements(单元):在有限元中,表示最高维的网格单元。 例如,3D网格中最高维单元是Elements,其2D子单元称为Faces。
常见单元
- Triangles (Tris)(三角形):二维三角形单元。简单,灵活
- Quadrilaterals (Quads)(四边形):二维四边形区域。对于规则几何区域比较高校,精度优于三角形网格
- Tetrahedra (Tets)(四面体):三维四面体单元。易于生成
- Hexahedra (Hexes)(六面体/拓扑立方体):六面体单元。较难生成,具有良好的数值性能。
网格类型
按几何结构分类
- 二维网格(2D Mesh):主要用于二维问题,常见网格类型有三角形(Triangles)和四边形(Quadrilaterals)。
- 三维网格(3D Mesh):主要用于三维问题,常见网格类型有四面体(Tetrahedra)、六面体(Hexahedra)、棱柱体(Prisms)和金字塔(Pyramids)。
按网格结构分类
- 结构化网格(Structured Mesh):网格单元按规则排列,适用于规则几何体,计算效率高。
- 非结构化网格(Unstructured Mesh):网格单元没有固定连接规则,适用于复杂几何形状,灵活性高。
- 混合网格(Hybrid Mesh):结合结构化和非结构化网格的优点,适用于规则和复杂区域。
图片取自:Metal Forming Formability, Simulation, and Tool Design (Chris V. Nielsen, Paulo A.F. Martins)
按网格类型分类
- 点集网格(Point Set Mesh):由离散点组成,通常不包含连接信息,适用于点云数据处理。
- 面片网格(Surface Mesh):网格单元仅限物体表面,常见类型有三角形面片网格和四边形面片网格。
- 体积网格(Volume Mesh):由三维单元组成,适用于三维问题,常见类型有四面体网格和六面体网格。
按网格的适应性分类
- 均匀网格(Uniform Mesh):网格单元大小一致,适用于简单几何问题。
- 自适应网格(Adaptive Mesh):网格密度根据计算需求动态调整,适用于精细模拟高梯度区域。
按网格的质量分类
- 高质量网格(High-Quality Mesh):网格单元形状规整,适用于高精度仿真。
- 低质量网格(Low-Quality Mesh):网格单元可能畸形,适用于快速仿真或低精度要求。
生成方法
chatgpt结果,先列上
网格生成算法 | 应用场景 | 特点 |
---|---|---|
Delaunay 三角剖分 | 适用于二维空间的不规则区域 | 优化三角形形状,避免长而细的单元,生成高质量网格。 |
Voronoi 图 | 点集划分,常与Delaunay三角剖分结合使用 | 将空间分割为Voronoi区域,用于定义网格单元。 |
前沿推进法(Advancing Front) | 生成不规则区域网格 | 从边界开始逐步生成单元,覆盖整个域。 |
八叉树/四叉树(Octree / Quadtree) | 大规模计算、自适应网格生成 | 递归划分空间,适应复杂几何形状和动态变化。 |
拉普拉斯平滑(Laplacian Smoothing) | 优化现有网格,改善网格质量 | 平滑节点位置,减少畸形单元,优化网格形状。 |
网格重构算法(Mesh Refinement) | 自适应网格、网格细化或粗化 | 动态调整网格精度,特别适用于自适应网格。 |
多边形剖分(Polygonal Mesh Generation) | 复杂几何形状的网格生成 | 生成多边形单元,适应更复杂的形状。 |
结构化网格生成(Structured Mesh Generation) | 规则几何区域(如矩形、正方形) | 生成规则网格单元,计算效率高,适用于简单几何问题。 |
自适应网格生成(Adaptive Mesh Refinement, AMR) | 需要精细模拟高梯度区域或重要区域 | 根据精度要求动态调整网格密度,适合复杂现象模拟。 |
混合网格生成(Hybrid Mesh Generation) | 同时处理规则和复杂区域的应用 | 结合结构化和非结构化网格的优点,适应多种几何形状。 |
六面体网格生成(Hexahedral Mesh Generation) | 规则三维几何区域(如矩形、立方体) | 生成六面体单元,适用于流体力学或结构分析中的高精度计算。 |
混合元素网格生成(Mixed-Element Mesh Generation) | 复杂几何或多物理场仿真 | 结合多种网格元素(四面体、六面体、棱柱等),适应复杂场景。 |
网格划分法(Grid Generation by Partitioning) | 将复杂几何域分割为多个规则子域 | 常用于流体动力学、热传导等领域,稳定且高效。 |
开源软件
gmsh
- https://gmsh.info/
- https://pypi.org/project/gmsh/
- https://github.com/pyvista/scikit-gmsh
注意: 采用GPL协议
tetgen
- https://wias-berlin.de/software/index.jsp?id=TetGen
- https://github.com/ufz/tetgen
- https://github.com/pyvista/tetgen
注意:采用 AGPL 协议!!
MeshFix
- https://github.com/MarcoAttene/MeshFix-V2.1
- https://github.com/pyvista/pymeshfix
注意:采用 GPL 协议
gmsh例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
可以用pyvista显示(可能不太对,太复杂了)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
参考
- https://en.wikipedia.org/wiki/Mesh_generation
- https://www.robertschneiders.de/meshgeneration/meshgeneration.html
- https://github.com/nschloe/meshio