OpenFOAM网格生成

分类:开源CAE | 2026-10-02 改写
CAE visualization for openfoam mesh theory - technical simulation diagram
OpenFOAM网格生成

理论:网格工具与壁面处理

概述

🙋

OpenFOAM没有图形界面的网格工具,网格怎么生成?

🎓

通过文本设置文件来生成。基础工具是blockMesh:在system/blockMeshDict中写出顶点坐标、块(六面体)的分割数和网格增长率(grading),就能得到结构网格。复杂形状先用blockMesh生成箱形背景网格,再把STL表面形状交给snappyHexMesh,分三步完成:(1) 在表面和指定区域细分网格(castellatedMesh),(2) 把网格节点移到表面上(snap),(3) 从壁面挤出薄网格层(addLayers)。也可以转换外部网格工具生成的网格。无论哪种方法,最后都用checkMesh检查网格畸变(非正交性、偏斜度)和负体积。

网格比、第一层网格与y+

$$ g = r^{1/(N-1)},\qquad \Delta y_1 = h\,\frac{g-1}{g^N - 1},\qquad u_\tau = U\sqrt{C_f/2},\quad C_f = 0.073\,Re^{-1/4},\qquad y^+ = \frac{(\Delta y_1/2)\,u_\tau}{\nu} $$

r为blockMesh的simpleGrading中最后一个与第一个网格的尺寸比,N为网格数,h为壁面到中心的长度,Δy₁为第一层网格厚度,u_τ为摩擦速度,C_f为流道摩擦系数(Dean公式),ν为运动黏度。y+取第一层网格中心处的值。

Coffee Break 随笔闲谈

对六面体的执着

正如snappyHexMesh这个名字所示,OpenFOAM的网格生成以六面体为中心。OpenFOAM的有限体积法可以处理任意多面体网格,但六面体在同样精度下所需网格更少,与流动方向对齐时数值扩散也更小。snappyHexMesh用“切削六面体背景网格以贴合形状”的方法,即使形状复杂,大部分网格仍保持六面体。只有贴合表面的部分变成多面体,而它们的质量往往决定整个网格的质量。

算例

空气ν = 1.5×10⁻⁵ m²/s;Dean式Re按50 mm全通道高度定义,此处不是水力直径。r = 1时Δy₁ = h/N。y+适用范围取决于壁面处理,不能把所有全y+壁函数都判为不适用。后处理命令也随版本不同。

例1:高50 mm流道,空气10 m/s(半高40个网格)

雷诺数33,333,摩擦系数0.0054,摩擦速度0.52 m/s,黏性长度ν/u_τ约29 µm。

网格比r第一层网格y+中心网格判断
1625 µm10.80.62 mm缓冲层:两者都不适合
10158 µm2.71.58 mm稍粗
4058 µm1.02.3 mm适合壁面解析
20016 µm0.283.19 mm壁面过细、中心过粗

使用壁函数时以y+ ≈ 30为参考,第一层网格约1.7 mm,半高均分约14个网格。

🙋

40个均分网格看起来很细、很稳妥。为什么说“两者都不适合”?

🎓

因为y+ ≈ 11处于缓冲层,介于壁面附近黏性主导的层(y+ < 5)与对数律成立的层(y+ > 30)之间。壁函数以第一层网格位于对数律层为前提确定壁面剪应力,放在缓冲层会算错摩擦和传热。而解析到壁面的低雷诺数模型需要第一层网格在y+ ≈ 1以下、用几个网格解析黏性层,y+ ≈ 11又太粗。OpenFOAM的kOmegaSST可以与nutUSpaldingWallFunction这类适用于全y+范围的壁面处理配合使用,但缓冲层的误差仍然最大。计算后一定要用yPlus工具(postProcess -func yPlus)输出壁面y+分布,确认是否在目标范围内。

例2:snappyHexMesh加密级别与边界层(背景网格8 mm)

级别01234
网格尺寸8 mm4 mm2 mm1 mm0.5 mm

在级别3(1 mm)的壁面上以5层、expansionRatio 1.2、finalLayerThickness 0.5(相对值)添加边界层,从外到内依次为0.50、0.42、0.35、0.29、0.24 mm,总厚1.79 mm,第一层0.24 mm(例1的流动中y+ ≈ 4)。要达到y+ ≈ 1,需要增加层数或提高壁面加密级别。

实务流程

  1. 根据流动条件估算摩擦速度,按所用壁面处理确定第一层网格厚度。
  2. 用blockMesh生成背景网格(或整体网格),按计算值设置网格比。
  3. 用snappyHexMesh加密表面和重要区域,确定边界层层数和厚度。
  4. 用checkMesh检查非正交性、偏斜度和负体积,修正问题部位。
  5. 求解后确认y+分布,并改变两级网格确认结果不变。
Coffee Break 随笔闲谈

“一个70度非正交的网格”

checkMesh的输出中常常只有几个网格的最大非正交性超过70度。几个而已容易被忽视,但压力方程的收敛会被这些少数网格拖累,往往成为发散的起点。可以增加fvSolution中的nNonOrthogonalCorrectors来修正,但根本办法是修好这些网格。用checkMesh -allGeometry -allTopology把问题网格输出为集合(cellSet),在ParaView中查看位置,就能很快知道是哪个形状或哪个设置造成的。

常见错误

错误与对策

错误后果对策
第一层网格在缓冲层摩擦和传热误差使y+≈1或≥30
不检查y+壁面处理与网格不匹配用yPlus输出分布
边界层局部缺失局部y+偏大调整层设置和质量约束
放任非正交网格压力不收敛用cellSet定位并修正
STL有孔洞或重叠内外混淆用surfaceCheck检查
🙋

我想了解相关内容。

常见问题

OpenFOAM的网格怎么生成?

简单形状用blockMesh拼接六面体块生成;复杂形状先用blockMesh生成背景网格,再用snappyHexMesh按STL形状切削、加密并在壁面添加边界层。也可以用gmshToFoam或fluentMeshToFoam转换Gmsh、ANSYS Meshing等外部工具生成的网格。最后用checkMesh检查质量。

壁面第一层网格的尺寸怎么确定?

根据所用湍流模型的壁面处理方式确定y+(壁面距离除以黏性长度)。解析到壁面时y+≈1,使用壁函数时y+约30〜300。高50 mm流道、空气10 m/s的例子中黏性长度约29 µm,y+≈1需要第一层网格约58 µm(网格中心约29 µm)。

snappyHexMesh的边界层加不好。

沿几何体挤出的空间不够时,边界层会在局部被省略。检查layers设置(层数、expansionRatio、finalLayerThickness)和质量约束(meshQualityControls),先减少层数看能否覆盖所有表面。最终各面加了几层,用日志或checkMesh的输出确认。

参考资料与检验范围

所列数值是基于文中假设的教学参考计算。资料用于理论和设置参考,不证明已在各软件中复现这些数值。工程决策须按实际条件验证。

关联模拟器

在本领域的交互式模拟器中体验理论

模拟器列表

相关分析领域

结构分析流体分析(CFD)热分析
本文评价
感谢您的反馈!
有帮助
更详细
报错
有帮助
0
更详细
0
报错
0