跳转至

第6章 有限体积网格(The Finite Volume Mesh)

作者

本章由 F. Moukalled、L. Mangani 和 M. Darwish 合著。本章是 Ch 4 "几何离散"步骤的详细展开 —— 给出有限体积网格的拓扑(vertex / face / cell 三层结构 + owner / neighbour 关系)与几何(形心、面积向量、体积)两套完整规范。Ch 7 将基于本章定义的网格规范,展开 uFVM 与 OpenFOAM 的实现细节。

内容概述

本章是全书篇幅较大的"工程细节章"之一,给出有限体积网格的全部拓扑与几何规范。读者在本章将学到:从结构网格到非结构网格的统一表达、面法向约定、几何量的计算、单元/面的局部坐标系、网格质量度量等。

§6.1 域离散 —— 介绍结构 / 块结构 / 非结构 / Chimera 4 大类网格的分类依据。OpenFOAM 默认使用非结构网格(unstructured grid),但支持 conforming / non-conforming 多块网格。本书 FVM 主要在非结构网格语境下展开。

§6.2 有限体积网格规范 —— 通过"计算控制体 \(C\)\(\phi\) 的梯度"这一简单问题,演示 FVM 网格需要的全部信息。式 (6.4):

\[\nabla \phi_C = \frac{1}{V_C} \sum_{f \in \text{faces}(C)} \phi_f \mathbf{S}_f\]

这一公式表明:要计算 \(\nabla \phi_C\),需要知道 \(V_C\)(控制体体积)、\(\mathbf{S}_f\)(面的面积向量)、\(\phi_f\)(面上的 \(\phi\) 值)。\(\phi_f\) 需要通过插值(§6.2 给出体积加权 \(g_F = V_C / (V_C + V_F)\)\(g_C = V_F / (V_C + V_F)\))由邻接控制体的 \(\phi_C, \phi_F\) 得到。Example 1 演示了 2D 三角形 / 四边形混合网格上的梯度计算。

§6.3 结构网格 —— 在结构网格中,邻接关系由索引 \((i, j, k)\) 隐式确定,无需存储。优点:内存少、cache 利用率高、易向量化。缺点:复杂几何灵活性差。

§6.4 块结构网格 —— 整个域分为多个结构块,每块内部用结构网格,块与块之间用插值连接。OpenFOAM 不直接支持 block structured 网格,但支持 multi-domain(多个求解器相互耦合)。

§6.5 非结构网格 —— 通过"显式拓扑表 + 几何量编号"存储邻接关系。OpenFOAM 默认。优点:几何灵活性高。缺点:内存开销大、cache 命中率低。

§6.6 网格单元的形状 —— 二维:三角形、四边形、多边形;三维:四面体、六面体、五面体(prism / pyramid)、多面体。不同形状的 cell 在 FVM 中处理方式相同(都是"形心 + 面法向 + 体积"三件套),但质量度量(skewness、aspect ratio、non-orthogonality)不同。

§6.7 面法向约定 —— 内部面:法向由 owner 指向 neighbour;边界面:法向指向域外。这是 FVM 通量 \(F_f = \mathbf{F}_f \cdot \mathbf{S}_f\) 的符号约定的根源。

§6.8 几何量的计算 —— 控制体形心 \(\mathbf{x}_C\)、面积向量 \(\mathbf{S}_f = \mathbf{n}_f \cdot S_f\)、控制体体积 \(V_C\)、距离向量 \(\mathbf{d} = \mathbf{x}_{NB} - \mathbf{x}_C\)、几何因子 \(g_f\)(距离向量与面法向的点积 / 距离模长的比例)等。

§6.9 网格质量度量 —— skewness(歪斜度)、aspect ratio(纵横比)、non-orthogonality(非正交度)、smoothness(光滑度)等。FVM 离散化对网格质量的容忍度高于 FEM(因为不涉及形函数插值),但严重扭曲的网格仍会降低精度。

§6.10 网格生成的工具链 —— ICEM CFD、Gmsh、Ansys Meshing、Pointwise、blockMesh(OpenFOAM 内置)、snappyHexMesh(OpenFOAM 内置)等。

§6.11 闭包 —— 本章的网格定义是 Ch 7 uFVM / OpenFOAM 实现的基础。

核心方程与概念

本章是 FVM 网格规范的"百科全书",核心公式按"几何 → 插值 → 质量"三层列举。

一、几何量定义(§6.8)

  • 控制体形心 (Eq. 6.4 推导)

$\(\mathbf{x}_C = \frac{1}{V_C} \int_{V_C} \mathbf{x} \, dV\)$

多边形 / 多面体的形心可通过顶点坐标加权求和得到。

  • 面面积向量

$\(\mathbf{S}_f = \mathbf{n}_f S_f = \oint_f \mathbf{n} \, dS\)$

对平面 face(多边形),\(\mathbf{S}_f = \mathbf{n}_f \cdot |\text{face}| = \mathbf{n}_f \cdot A_f\);对曲面 face,需要数值积分(中点法则 / Gauss 积分)。

  • 控制体体积

$\(V_C = \int_{V_C} dV\)$

  • 距离向量(连接 \(C\)\(NB\) 形心)

$\(\mathbf{d} = \mathbf{x}_{NB} - \mathbf{x}_C\)$

模长 \(d = |\mathbf{d}|\)

  • 几何因子 \(g_f\)(用于 CDS 等格式)

$\(g_f = \frac{\mathbf{d} \cdot \mathbf{S}_f}{d^2}\)$

对正交网格 \(g_f = 1\);对非正交网格 \(g_f \in (0, 1]\)

  • CN 向量(owner 形心到面形心)

$\(\mathbf{CN} = \mathbf{x}_f - \mathbf{x}_C\)$

  • T 向量(owner 形心到 neighbour 形心)

$\(\mathbf{T} = \mathbf{x}_{NB} - \mathbf{x}_C\)$

二、面插值(§6.2)

  • 体积加权插值 (Eq. 6.5-6.6)

$\(\phi_f = g_F \phi_F + g_C \phi_C, \quad g_F = \frac{V_C}{V_C + V_F}, \quad g_C = \frac{V_F}{V_C + V_F} \tag{6.5-6.6}\)$

这是一阶精度,适用于"无方向性"或"无对流"的情形(如纯扩散)。对有对流情形,需用对流方向感知的插值(UDS、CDS、QUICK 等,Ch 11-12 详述)。

  • 梯度计算 (Green-Gauss) (Eq. 6.4)

$\(\nabla \phi_C = \frac{1}{V_C} \sum_{f \in \text{faces}(C)} \phi_f \mathbf{S}_f \tag{6.4}\)$

这是 FVM 网格上计算"任意标量场梯度"的最常用方法。Ch 9 会详细展开。

三、网格质量度量(§6.9)

  • 非正交度 (non-orthogonality) \(\theta_f\) = \(\mathbf{d}\)\(\mathbf{S}_f\) 的夹角

$\(\cos \theta_f = \frac{\mathbf{d} \cdot \mathbf{S}_f}{|\mathbf{d}| |\mathbf{S}_f|}\)$

对正交网格 \(\theta_f = 0\)\(\cos \theta_f = 1\)。当 \(\theta_f > 70°\) 时,CDS 误差显著,需做非正交修正(Ch 8 详述)。

  • skewness (歪斜度)

$\(\text{skew} = 1 - \frac{\text{actual face angle}}{90°}\)$

对结构网格 \(\text{skew} = 0\);对高度扭曲网格 \(\text{skew}\) 接近 1。

  • aspect ratio (纵横比)

$\(\text{AR} = \frac{L_{\max}}{L_{\min}}\)$

在边界层附近,常采用 \(\text{AR} > 100\) 的细长网格以捕捉大梯度。

  • smoothness (光滑度) —— 相邻 cell 体积变化率

$\(\text{smoothness} = \frac{|V_{i+1} - V_i|}{V_{i+1} + V_i}\)$

关键结论

  1. FVM 网格的"运行时刻" = 内部面 + 边界面的拓扑与几何:每个内部面 \(f\) 存储 owner / neighbour 两个 cell 索引 + 面积向量 \(\mathbf{S}_f\) + 距离向量 \(\mathbf{d}\);每个边界面 \(f\) 存储 owner + patch 名 + 面积向量。
  2. 面法向约定决定了 FVM 通量的符号:内部面法向由 owner 指向 neighbour,边界面法向指向域外。这一约定使 FVM 通量 \(F_f = \mathbf{F}_f \cdot \mathbf{S}_f\) 在 owner 与 neighbour 两侧大小相等、符号相反,从而保证全局守恒。
  3. 几何因子 \(g_f\) 决定了扩散格式的精度与稳定性:对正交网格 \(g_f = 1\)(CDS 二阶精度),对非正交网格 \(g_f < 1\)(需 Over-Relaxed 修正)。
  4. 网格质量对 FVM 数值精度的影响小于 FEM:因为 FVM 不涉及形函数插值,仅依赖几何量 \(V_C, \mathbf{S}_f, \mathbf{d}\) 的精度。但严重扭曲(skew > 0.9、\(\theta_f > 80°\))的网格仍会导致非正交修正失败、收敛困难。
  5. OpenFOAM 默认非结构网格:存储 pointsfacesownerneighbourboundary 5 个文件,结构与本书定义完全一致。Ch 7 给出 uFVM 与 OpenFOAM 的具体数据结构。

挑战和开放性问题

  1. 网格质量度量与数值精度的定量关系 —— 本章给出 4 个常用度量指标,但未给出"多大的 skewness / aspect ratio 会导致多大的数值误差"的定量关系。工业实践通常依靠经验法则("skewness < 0.85"),缺乏严格的数学保证。
  2. 非正交网格的极限处理 —— 当 \(\theta_f > 80°\) 时,Over-Relaxed 修正(Ch 8)的多步迭代("非正交修正迭代")可能需要 3-5 步才能收敛。是否存在更好的数学方法处理"极端非正交"网格是研究热点。
  3. 多面体 / 多边形 cell 的 FVM 实现 —— 工业 CFD 中多面体 / 多边形 cell 越来越流行(OpenFOAM 支持),但其"面法向唯一性"(凸多面体 OK、非凸多面体需要分割)问题需要特殊处理。
  4. 网格自适应 (AMR / h-refinement / r-refinement) —— 本章未深入展开。自适应网格细化是处理多尺度流场(湍流、激波、燃烧)的关键工具,OpenFOAM 通过 dynamicRefineFvMesh 类支持。
  5. 网格生成工具与 FVM 求解器的接口 —— 不同网格生成工具(ICEM、Gmsh、Ansys Meshing、Pointwise、blockMesh、snappyHexMesh)输出的网格格式不同,需要统一的转换接口(CGNS、VTK、OpenFOAM native 等)。工业实践中网格转换常常丢失信息(patch 名、cell 区域等),需要手动修复。

个人反思与批判性分析

本章是全书"工程细节"密度最高的一章,5 万字的篇幅几乎全是拓扑 + 几何 + 质量度量的细节,对初学者而言可能"细节过多、抓不住主线"。但对工程实践者(特别是要做 OpenFOAM 自定义 solver 开发的工程师),本章是不可替代的参考。

从写作特点看:

  • "以梯度计算为引子"的设计 —— 作者没有一上来就罗列拓扑结构,而是通过"如何在结构网格 vs 非结构网格上计算 \(\nabla \phi\)"这一问题,把"为什么需要 \(\mathbf{S}_f\)\(\mathbf{d}\)\(V_C\)"讲透。这种"问题驱动"的写法比"定义驱动"更易理解。
  • 几何量的统一公式 —— 控制体形心、面积向量、体积、距离向量、几何因子 —— 这 5 个量在 Ch 5-14 任何数值方法中都会反复出现。本章把它们集中定义,为后续章节的"几何量调用"建立基础。
  • 网格质量度量 —— 给出了 4 个常用度量指标(非正交度、skewness、aspect ratio、smoothness)的定义与几何解释,对工程实践有直接指导意义。

但本章也存在不足:

  • 结构网格 vs 非结构网格的对比不够深入 —— 仅给出"结构网格隐式拓扑、非结构网格显式拓扑"的对比,未给出"两种网格在同一算例上的性能差异"的量化数据(如 cache 命中率、SIMD 利用率、并行扩展性等)。
  • 多面体 cell 的几何量计算 —— 对 2D 多边形 + 3D 多面体 cell,本章未给出形心、面积、体积的具体计算公式。读者需要参考几何学的标准公式(多边形面积 = Shoelace、多面体体积 = Divergence 定理分解为四面体求和)。
  • 网格生成工具链部分过于简略 —— 仅列出工具名(ICEM、Gmsh、Ansys Meshing、Pointwise、blockMesh、snappyHexMesh),未给出任何工具的具体使用流程或对比。Ch 7 会专门讲 OpenFOAM 的 blockMeshsnappyHexMesh
  • 对 cellZone / faceZone / pointZone 的处理 —— 工业 CFD 中常用 cellZone 区分"流体域 vs 固体域"、faceZone 区分"内部交界面"(rotor-stator interface),本书未展开。

总体而言,本章是 FVM 网格规范的"百科全书"式参考章节,与 Versteeg-Malalasekera、Ferziger-Peric 相比,本章对 OpenFOAM 数据结构(Ch 7)的预告更具工程实用价值。

重要参考文献

  • [X1] Thompson J.F., Soni B.K., Weatherill N.P. (1999) Handbook of Grid Generation. CRC Press. (网格生成与质量度量经典参考)
  • [X2] Frey P.J., George P.L. (2000) Mesh Generation: Application to Finite Elements. Hermes Science. (非结构网格生成的经典教材)
  • [X3] Shewchuk J.R. (1996) Triangle: Engineering a 2D Quality Mesh Generator and Delaunay Triangulator. (Delaunay 三角剖分算法)
  • [X4] Geuzaine C., Remacle J.F. (2009) Gmsh: a three-dimensional finite element mesh generator with built-in pre- and post-processing facilities. International Journal for Numerical Methods in Engineering, 79(11): 1309-1331.
  • [X5] OpenFOAM Foundation (2014) OpenFOAM: The Open Source CFD Toolbox — User Guide. (blockMesh、snappyHexMesh 参考)
  • [X6] Jasak H. (1996) Error Analysis and Estimation for the Finite Volume Method with Applications to Fluid Flows. PhD Thesis, Imperial College. (OpenFOAM mesh 数据结构早期设计文档)
  • [X7] Ferziger J.H., Perić M. (2002) Computational Methods for Fluid Dynamics, 3rd Edition. Springer. (网格质量与数值精度的定量关系)
  • [X8] Baker T.J. (1989) Mesh generation: Art or science? Progress in Aerospace Sciences, 25(1): 3-23. (网格生成的艺术与科学)
  • [X9] Weatherill N.P. (1992) The integrity of computational meshes. Mathematics of Computation, 58(197): 317-330.