非结构化网格
非结构化网格的理论基础
概述
老师,非结构化网格有什么这么方便的地方吗?
非结构化网格(unstructured mesh)是将单元之间的连接关系明确地保持为表格形式的网格。四面体(tet)、六面体(hex)、三角柱(prism/wedge)、金字塔等不同单元形状可以自由混合。最大的优点是可以自动为复杂的三维形状生成网格。
把CAD模型放进去就能自动生成网格吗?
几乎是这样。Fluent Meshing、STAR-CCM+、snappyHexMesh等现代CFD网格生成器只需要输入STL表面就能自动生成体积网格。这是非结构化网格在工业界广泛普及的原因。
Delaunay三角形分割
自动网格生成算法是怎样工作的?
最基本的是Delaunay三角分割。对于给定的点群,使得每个三角形的外接圆内不包含其他点来构成三角形。
Delaunay条件用数学形式表示为,三角形$T$的外接圆$C(T)$满足:
满足这个条件时,三角形中最小角被最大化。换句话说,可以得到尽可能"接近等边三角形"的网格。
在三维中情况如何?
在三维中是Delaunay四面体分割。外接圆被替换为外接球。但是在三维中品质保证不如二维有效,容易产生扁平四面体(sliver tetrahedra)。除去扁平四面体是三维自动网格生成的重要课题。
Advancing Front法
另一个主要算法是Advancing Front法。从边界表面向内部"推挤"单元。
1. 将边界面的表面网格初始化为"前线"
2. 从前线上选择一个面,生成新点并创建单元
3. 更新前线(删除旧面,添加新面)
4. 重复直到前线消失
与Delaunay法的区别是什么?
Advancing Front法的边界适应性更高,边界附近的网格质量更好。而Delaunay法的鲁棒性更高,实现更容易。实际工具中经常使用结合两者的混合算法。
有限体积法与的关系
在非结构化网格上如何离散Navier-Stokes方程?
使用有限体积法(FVM)。对每个单元应用积分形式的守恒律。
计算通过单元面的通量$\mathbf{F} \cdot d\mathbf{S}$。与结构化网格不同,由于网格不规则,需要使用Gauss-Green法或最小二乘法来重构单元中心间的梯度。
精度方面怎样?
非结构化网格上的有限体积法基本上是二阶精度。这是因为从单元中心的值和梯度对面处的值进行线性插值。当网格的非正交性较大时,需要非正交校正项,这会影响收敛性和精度。
非结构化网格CFD的历史——1987年Jameson-Baker论文开创的时代
非结构化网格(Unstructured Mesh)在CFD中的实用化因Antony Jameson及其合作研究人员在1987年发表的"Euler方程非结构三角形网格有限体积法"而加速。在此之前,航空CFD主要使用结构化网格(Structured Mesh),专家需要数月时间才能为复杂形状生成网格。Jameson等人的方法使网格生成不依赖于形状的复杂性,是CFD"民主化"的技术转折点。1990年代计算机计算速度的提高结合非结构化网格的发展,非结构化网格CFD迅速普及,当今主要CFD求解器(Fluent、OpenFOAM、SU2等)都采用非结构化网格作为基本架构。
非结构化网格的数值计算方法
单元形状的比较
四面体、六面体、棱柱…有很多种类,它们各有什么区别?
让我们比较CFD中使用的主要单元形状。
| 单元形状 | 面数 | 相邻单元数 | 精度 | 自动生成容易度 |
|---|---|---|---|---|
| 四面体(Tet) | 4 | 4 | 低~中(数值耗散大) | 非常容易 |
| 六面体(Hex) | 6 | 6 | 高(数值耗散小) | 困难(需结构化网格) |
| 三角柱(Prism) | 5 | 5 | 中~高 | 可在边界层自动生成 |
| 金字塔(Pyramid) | 5 | 5 | 中 | 用于hex/tet接连 |
| 多面体 | 多个 | 多个 | 中~高 | 从tet转换 |
四面体的数值耗散较大是什么意思?
四面体面数少,从单元中心指向各面的方向向量多样性低。这导致梯度近似精度下降,斜向通量计算时数值耗散增大。在相同单元数的情况下,六面体通常比四面体精度高2~3倍。
梯度重构方法
非结构化网格中梯度计算有什么特别的地方吗?
有的。有三种主要方法。
Green-Gauss法
从单元面处的值$\phi_f$计算梯度。根据面值的评估方法分为cell-based法和node-based法。
最小二乘法(Least-Squares)
从相邻单元的差分,在最小二乘意义下求最优梯度。对于扭曲网格也很稳健。
在Fluent中应该用哪个?
对于Fluent Meshing生成的网格,推荐使用Green-Gauss Node-Based或Least-Squares。对于四面体网格,Least-Squares通常更稳定。
非正交校正
非正交性如何影响CFD?
在有限体积法中计算扩散项通量时,如果单元中心间的向量$\mathbf{d}$与面法向向量$\mathbf{S}$平行(正交网格)则很简单,但非正交时需要校正项。
第二项是非正交校正项。显式处理会导致收敛性变差,当网格非正交度超过70度时,发散风险增加。OpenFOAM用nonOrthogonalCorrectors参数来设置这种校正的迭代次数。
70度是标准吗?
是的。一般指导原则是非正交度应控制在70度以下,理想是40度以下。特别是OpenFOAM这样的分离型求解器对非正交性很敏感。
Delaunay三角分割——非结构化网格生成的数学基础和质量控制
非结构化三角形和四面体网格自动生成的基础是"Delaunay三角分割",它满足"外接圆内不包含其他点"的最优性条件。这个性质使得生成的三角形的最小角最大化,CFD中有问题的细长单元(高倾斜度)自动被抑制。1934年Boris Delaunay提出的这个数学概念,50年后在计算机时代被重新发现为网格生成算法,成为现代网格生成软件的核心。结合边界上单元大小控制的"受约束Delaunay法"和改善网格质量的Point Insertion,这种方法构成了TetGen、netgen、TetMeshGC等现代基础算法。
非结构化网格的实际应用
实践工作流程
用非结构化网格进行CFD的步骤是什么?
一般工作流程如下。
1. 生成表面网格:CAD导出STL/STEP → 表面重新网格化
2. 设置尺寸函数:定义壁面第一层厚度、最大单元尺寸、增长率
3. 插入边界层网格:在墙面添加棱柱层(inflation layer)
4. 生成体积网格:用tet/hex-dominant/poly填充
5. 质量检查和修改:检查倾斜度、非正交性等
表面网格的重要性
表面网格常被相对忽视,但是……
其实表面网格的质量决定了整个体积网格的质量。从CAD直接获得的STL中三角形的宽高比往往很差,还可能有间隙或重复面。
表面质量的目标为:
- 倾斜度:0.8以下(0.95以上致命)
- 最小角度:15度以上
- 面积比(相邻三角形):5:1以下
Fluent Meshing
Fluent Meshing的使用要点是?
Fluent Meshing中工作流程是自动化的。要掌握的要点。
- Import Geometry:经过SpaceClaim/DM更稳定
- Add Local Sizing:在关注区域使用Body of Influence(BOI)
- Generate Surface Mesh:通过Min Size/Max Size/Growth Rate控制
- Add Boundary Layers:First Height + Growth Rate + Number of Layers
- Generate Volume Mesh:Poly-Hexcore是目前最佳实践
snappyHexMesh(OpenFOAM)
snappyHexMesh的配置技巧是什么?
snappyHexMesh从STL表面自动生成hex-dominant网格。重要参数列举如下。
| 参数 | 推荐值 | 说明 |
|---|---|---|
| castellatedMeshControls.maxLocalCells | 1000000 | 本地最大单元数 |
| castellatedMeshControls.resolveFeatureAngle | 30 | 特征边检测角度 |
| snapControls.nSmoothPatch | 3 | 卡入时平滑迭代数 |
| addLayersControls.nSurfaceLayers | 5-20 | 边界层层数 |
| addLayersControls.expansionRatio | 1.2 | 边界层增长比 |
| addLayersControls.firstLayerThickness | 从y+计算 | 第一层相对/绝对厚度 |
snappyHexMesh经常在什么地方失败?
边界层插入(addLayers)最容易失败。在凹角部和边附近棱柱层可能会自交。需要通过调整featureAngle、nRelaxIter、minMedialAxisAngle进行反复试验。
复杂水路CFD网格生成——污水处理厂流路非结构化网格化和质量管理
污水处理厂的沉淀池、消毒槽等是混有复杂曲面和构筑物的水处理设施。通过CFD进行流速分布、停留时间分布(RTD: Residence Time Distribution)分析对处理效率改善很重要,非结构四面体+棱柱层混合网格是标准方法。实务上的课题是"水中挡板(Baffle)薄壁体的网格化"——薄厚度为数厘米的薄板两侧都生成棱柱层时,薄板部分单元干涉"Pinch Point"问题频发。对策是将薄板作为"零厚度壁面(面单元)"处理,或者重新设计网格使薄板宽度至少有4个单元。日本环保部的水处理CFD指南中明确规定了网格质量检查流程(倾斜度<0.85),是设计人员的必读内容。
非结构化网格的软件比较
非结构化网格生成工具的比较
能生成非结构化网格的工具有什么区别?
让我们比较主要工具。
| 工具 | 主要单元类型 | 边界层 | 自动化程度 | 特点 |
|---|---|---|---|---|
| Fluent Meshing | Poly-Hexcore | Prism | 非常高 | 与Fluent无缝集成 |
| STAR-CCM+ | Polyhedral/Trimmer | Prism | 非常高 | CAD导入~解析一体化 |
| snappyHexMesh | Hex-dominant | Prism | 高(CLI) | 免费,最适合脚本自动化 |
| cfMesh | Hex-dominant | Prism | 高(CLI) | OpenFOAM用,snappy的替代 |
| Pointwise | Tet/Hex/Prism | T-Rex | 中(GUI) | 重视高质量 |
| ANSA(BETA CAE) | 任意 | 任意 | 高 | 汽车行业广泛使用 |
Fluent Meshing
Fluent Meshing的"Poly-Hexcore"有什么优点?
Poly-Hexcore是内部用直交六面体(octree hex)填充,壁面附近用多面体单元连接的方法。既可以获得六面体的精度和效率,又可以兼顾多面体的灵活性。Ansys从2020年左右开始强力推进,与纯tet相比,单元数减少一半以上,精度相当或更好。
STAR-CCM+
STAR-CCM+有什么优势?
STAR-CCM+由CD-adapco开发,2016年被Siemens收购。最大的特点是多面体网格的先驱。从CAD导入到解析、后处理完全集成的工作流程,特别在汽车和航空航天领域实力强。Trimmer(基于直交格子)网格也很受欢迎。
snappyHexMesh对比cfMesh
对于OpenFOAM用户,snappyHexMesh和cfMesh有什么区别?
snappyHexMesh是OpenFOAM标准,信息丰富,但边界层插入有时不稳定。cfMesh由Creative Fields公司开发,是替代工具,边界层生成更稳健。不过cfMesh对OpenFOAM版本的追踪略显滞后。
选择指南
最后该选哪个呢?
非结构化网格生成工具深入对比——Gmsh对比TetGen对比ANSYS Meshing
按功能比较非结构化网格生成工具:Gmsh(开源)通过Python/API实现完全自动化,适合脚本化工作流,通过Geo/Meshing选项可细致控制质量指标,在学术界广泛使用。TetGen(柏氏算法)以约束Delaunay四面体化的最高质量著称,与有限元分析(FEA)联动优秀。ANSYS Meshing的强项是从复杂CAD导入到自动网格生成的一贯工作流,Fault耐性(自动修复形状间隙和孔洞)优秀。在工业现场,普遍采用"ANSYS Meshing快速生成→质量检查→问题部位用Gmsh手动补完"的现实方案。
非结构化网格的先进研究
先进话题
非结构化网格领域最近的关注技术是什么?
有几个重要动向。
Octree基础网格的崛起
近年来,octree(八分树)基础的网格生成快速普及。snappyHexMesh、Fluent Meshing的Poly-Hexcore、STAR-CCM+的Trimmer都是基于octree。
octree的优势是:
- 背景网格生成速度为$O(n \log n)$
- 自然获得等向单元,数值耗散小
- 并行分布式计算容易
octree有弱点吗?
相邻单元间大小比会跳跃到2:1(hanging node),这会成为问题。如何处理这个问题是各工具的区别。通过多面体化平滑过渡的方法成为主流。
机器学习网格生成
AI能进行网格生成吗?
目前研究主要集中在两个方向。
1. 尺寸函数的自动最优化:从以往解析结果学习,自动判断哪些地方需要细化
2. 从CAD形状推断网格参数:用ML模型从形状特征推荐网格设置
还不是"AI进行网格切割"阶段,但"AI提出网格设置建议"已逐步实用化。Ansys Discovery Live和Simcenter HEEDS等在探索这个方向。
无网格方法的进展
不用网格的方法将来会成为主流吗?
SPH(光滑粒子流体动力学)和LBM(格子Boltzmann方法)等,不需要传统网格概念的方法在进步。特别是LBM,ProLB和PowerFLOW等商业软件也在推进。
不过对于需要精密解析壁面边界层的问题(翼型气动、热交换器等),基于网格的FVM在精度和效率上仍占优势。无网格方法应被看作在自由表面流和大变形问题中的补充角色。
非结构化网格的故障排除
故障排除
非结构化网格常见问题有哪些?
总结常见问题。
1. 倾斜度过高
症状:网格质量报告显示倾斜度> 0.95的单元存在。Fluent出现"Negative cell volume"或发散。
对策:
- 先改进表面网格质量(多数情况根本原因在此)
- CAD微小特征(细长面、短边)进行去特征化处理
- 局部尺寸设置在问题区域减小单元尺寸
- 对于tet网格使用improve函数进行平滑化
2. 边界层网格插入失败
棱柱层经常插不进去,很困扰。
常见原因和对策:
| 原因 | 对策 |
|---|---|
| 锐角转角处棱柱相互碰撞 | 角部表面尺寸调小 |
| 间隙太窄棱柱放不进 | 减少层数或减薄第一层 |
| 表面网格质量不良 | 重新网格化改善三角形质量 |
| 接触面处理不足 | 改为Non-conformal interface |
Fluent Meshing中Last Ratio选项可控制棱柱层放不进部分的处理。STAR-CCM+中Stop Distance设置棱柱生长的截断。
3. 网格生成内存不足失败
症状:网格生成过程中内存不足(Out of Memory)异常终止。
对策:
- 检查表面网格大小。是否产生了大量不必要的微小单元
- 确认最大单元尺寸和最小单元尺寸比不过大(实用上限约100:1)
- 利用并行网格生成(Fluent Meshing、snappyHexMesh支持并行)
- 在64bit环境中确保足够内存(1亿单元目标约16-32GB)
4. 求解器发散
网格生成成功但求解器发散。
网格质量引起的发散诊断步骤如下。
1. 确认最坏单元:Fluent用Report Quality,OpenFOAM用checkMesh把握最坏值
2. 定位问题单元:发散开始的位置与最坏单元位置对照
3. 若倾斜度 > 0.9:该处可能是发散原因
4. 若非正交度 > 70度:OpenFOAM中增加nonOrthogonalCorrectors至2~3
5. 若体积变化率急剧:调整smoothing/refinement
被说"网格不好",但具体该怎么改常常不明白……
首先得好好读checkMesh(OpenFOAM)或Mesh Quality Report(Fluent)的输出。找出最坏质量单元在哪里,局部改进其附近的表面网格或尺寸设置。全体重新网格是最后手段。
非结构化网格壁面近处陡梯度解震荡——第一棱柱层质量不良
非结构化网格壁面近处"局部速度、温度不自然震荡(Oscillation)"时,常因棱柱层(Prismatic Layer)质量不良。典型问题:①棱柱层伸缩率(Growth Ratio)过大(>1.5)导致层间单元尺寸急变,数值耗散增加。②棱柱层到体积四面体过渡部分单元方向急变(高倾斜度),局部数值稳定性恶化。③棱柱层厚度超过凸面曲率半径的10%,外侧层比内侧大,棱柱"膨胀"与相邻单元干涉。解析前检查壁面附近棱柱层质量(非正交性<60°、倾斜度<0.7)是诊断第一步。
相关话题
更多
错误