跳转至

第8章 空间离散:扩散项(Spatial Discretization: The Diffusion Term)

作者

本章由 F. Moukalled、L. Mangani 和 M. Darwish 合著。本章是 Numerics 模块(Ch 8-14)的第一章,专门处理一般守恒方程 (Eq. 3.93) 中扩散项 \(\nabla \cdot (\Gamma \nabla \phi)\) 的 FVM 离散化。这是 FVM 三大核心离散化(扩散、对流、瞬态)中最简单的一类,但涉及正交 / 非正交、规则 / 非结构、各向同性 / 各向异性、边界条件处理等多个工程细节,是后续 Ch 9 梯度、Ch 11 对流、Ch 12 高分辨率格式的基础。

内容概述

本章是全书 89 页篇幅最长的章节之一,按"由简到繁"的顺序展开扩散项离散化的全部细节。

§8.1 二维矩形域上的扩散 —— 以均匀 Cartesian 网格上的 2D 扩散方程 \(\nabla \cdot (\Gamma \nabla \phi) = Q_\phi\) (Eq. 8.1) 为起点。控制体 \(C\) 离散为

\[\Gamma_e S_e \frac{\phi_E - \phi_C}{dx_e} + \Gamma_w S_w \frac{\phi_W - \phi_C}{dx_w} + \Gamma_n S_n \frac{\phi_N - \phi_C}{dy_n} + \Gamma_s S_s \frac{\phi_S - \phi_C}{dy_s} = Q_C V_C\]

每个面的扩散通量都分解为 3 部分:Flux_C(来自 owner)、Flux_F(来自 neighbour)、Flux_V(边界 / 非正交修正)。这种"3 部分分解"是 Ch 5 Eq. 5.43 的具体展开。

§8.2 离散化系数规则 —— 离散方程 \(a_C \phi_C + \sum_F a_F \phi_F = b_C\) 的系数必须满足的 4 大规则: 1. \(a_F \leq 0\)(保证对角占优) 2. \(a_C \geq 0\)(保证解的非负性) 3. \(b_C \geq 0\)(保证源项非负) 4. \(\sum_F a_F + b_C = a_C\)(守恒性)

这些规则是 Ch 5.4 节"4 大指导原则"在扩散项上的具体体现。

§8.3 边界条件处理 —— Dirichlet(fixedValue)、Neumann(fixedGradient)、mixed、symmetry 4 种边界条件在扩散项中的实现。每种边界条件对 \(a_C, a_F, b_C\) 的修改规则详细给出。

§8.4 非 Cartesian 正交网格 —— 从 Cartesian 推广到柱坐标、曲线正交坐标(curvilinear orthogonal)。扩散通量仍为 \(\Gamma \nabla \phi \cdot \mathbf{S}_f\),但 \(\nabla \phi\) 在曲线坐标下需用协变导数(covariant derivative)。

§8.5 非正交结构网格 —— 关键创新点。当距离向量 \(\mathbf{d}\) 与面法向 \(\mathbf{S}_f\) 不平行时,\(\mathbf{d} \cdot \mathbf{S}_f \neq d \cdot S_f\)。处理方法:非正交修正(Over-Relaxed 修正): - 第 1 步:仅用 \(\mathbf{d} \cdot \mathbf{S}_f\) 部分计算主扩散通量 - 第 2 步:计算面梯度 \(\nabla \phi_f\)(需先求 \(\phi_f\),再用 Green-Gauss 公式) - 第 3 步:用 \(\nabla \phi_f \cdot \mathbf{S}_f - (\mathbf{d} \cdot \mathbf{S}_f / d^2) (\phi_{NB} - \phi_C)\) 计算非正交修正项 - 第 4 步:把修正项加到 \(b_C\)(修正源项)而非 \(a_F\)(避免破坏有界性)

这是 OpenFOAM laplacianScheme 的核心实现逻辑。

§8.6 非结构非正交网格 —— 在非结构网格上,每个 cell 的邻接数不固定(4-7 个邻接),但 FVM 离散化形式完全一致。本节给出 uFVM 与 OpenFOAM 的具体实现。

§8.7 各向异性扩散 —— 当扩散系数 \(\boldsymbol{\Gamma}\) 是张量(不是标量)时(例如多孔介质流、化学反应流中的方向性扩散),FVM 离散化需要特殊处理。本节给出 anisotropic diffusion 的离散公式

\[\oint_{\partial V_C} \boldsymbol{\Gamma} \cdot \nabla \phi \, d\mathbf{S} = \sum_f (\boldsymbol{\Gamma} \nabla \phi)_f \cdot \mathbf{S}_f\]

在 OpenFOAM 中通过 fvOptions 或自定义 laplacianScheme 实现。

§8.8 Under-Relaxation —— 对于高非线性问题(如湍流、化学反应),扩散项的线性化需要 under-relaxation(亚松弛)以保证收敛。基本形式

\[\phi_C^{new} = \phi_C^{old} + \alpha (\phi_C^{computed} - \phi_C^{old}), \quad 0 < \alpha < 1\]

OpenFOAM 通过 relaxationFactors 配置亚松弛因子。

§8.9 计算指针 —— uFVM 与 OpenFOAM 的具体实现: - uFVM:cfdAssembleDiffusionTerm(phi, gamma, ...) 函数 - OpenFOAM:fvm::laplacian(gamma, phi) 算符 + laplacianScheme 类(linear / corrected / orthogonal)

§8.10 闭包 —— 总结扩散项 FVM 离散化的关键设计选择。

核心方程与概念

本章是 FVM 扩散项离散的"百科全书",按"基础 → 边界 → 非正交 → 各向异性"四层列举。

一、基础公式(§8.1)

  • 稳态扩散方程 (Eq. 8.1)

$\(\nabla \cdot (\Gamma \nabla \phi) = Q_\phi \tag{8.1}\)$

  • 控制体 \(C\) 上的离散形式 (Eq. 8.5)

$\(\sum_{f \in \text{faces}(C)} \Gamma_f (\nabla \phi)_f \cdot \mathbf{S}_f = Q_C V_C \tag{8.5}\)$

展开为 4 个面(E, W, N, S)的求和。

  • 面上的扩散通量分解 (Eq. 8.10)

$\(\text{Flux}_{T,e} = \text{Flux}_{C,e} \phi_C + \text{Flux}_{F,e} \phi_E + \text{Flux}_{V,e}\)$

其中 \(\text{Flux}_{C,e} = -\Gamma_e S_e / dx_e\)(对 \(C\) 的系数),\(\text{Flux}_{F,e} = +\Gamma_e S_e / dx_e\)(对 \(E\) 的系数),\(\text{Flux}_{V,e}\) 是非正交修正项。

二、系数规则(§8.2)

  • 线性化后形式 (Eq. 8.43)

$\(a_C \phi_C + \sum_F a_F \phi_F = b_C \tag{8.43}\)$

其中 - 中心系数 \(a_C = \sum_F \frac{\Gamma_f S_f}{d_{CF}} + \text{修正项}\) - 邻接系数 \(a_F = -\frac{\Gamma_f S_f}{d_{CF}}\) - 源项 \(b_C = \int Q \, dV + \text{边界贡献} + \text{非正交修正}\)

三、边界条件(§8.3)

  • Dirichlet(fixedValue) —— 在边界 \(b\)\(\phi_b\) 已知
  • \(a_C\) 增加 \(\Gamma_b S_b / d_{Cb}\)
  • \(a_F\) 不变
  • \(b_C\) 增加 \(\Gamma_b S_b / d_{Cb} \cdot \phi_b\)

  • Neumann(fixedGradient) —— 在边界 \(b\)\(\partial \phi / \partial n |_b\) 已知

  • \(a_C\) 不变
  • \(a_F\) 不变
  • \(b_C\) 增加 \(\Gamma_b S_b \cdot (\partial \phi / \partial n |_b)\)

  • mixed / Robin —— \(\alpha \phi_b + \beta \partial \phi / \partial n |_b = \gamma\)

  • 综合上述两种处理

  • symmetry —— 边界法向通量为零

  • \(\mathbf{S}_b\)\(\mathbf{n}_b\) 方向分量为零
  • 实际等价于 \(b_C\) 不变,\(a_C\) 中不包含该边界

四、非正交修正(§8.5)

  • 非正交度的几何因子 \(g_f\)

$\(g_f = \frac{\mathbf{d}_{CF} \cdot \mathbf{S}_f}{|\mathbf{d}_{CF}|^2} = \frac{\cos \theta_f}{d_{CF}}\)$

对正交网格 \(g_f = 1\);对非正交网格 \(g_f < 1\)

  • 完整扩散通量(含非正交修正) (Eq. 8.71)

$\(\text{Flux}_f = \Gamma_f \left( g_f (\phi_F - \phi_C) + \bar{\nabla} \phi_f \cdot \mathbf{S}_f - g_f (\phi_F - \phi_C) \right) = \Gamma_f g_f (\phi_F - \phi_C) + \Gamma_f \bar{\nabla} \phi_f \cdot \mathbf{S}_f (1 - g_f)\)$

其中 \(\bar{\nabla} \phi_f\) 是面梯度(需用 Ch 9 的 Green-Gauss 或最小二乘方法预先计算)。

  • Over-Relaxed 修正

$\(\text{Flux}_f = \Gamma_f g_f (\phi_F - \phi_C) + \Gamma_f (1 - g_f) \bar{\nabla} \phi_f \cdot \mathbf{S}_f\)$

第一项是主项(进入 \(a_C, a_F\)),第二项是非正交修正(进入 \(b_C\)),这种分解保证有界性。

五、各向异性扩散(§8.7)

  • 各向异性扩散系数张量 \(\boldsymbol{\Gamma}\)(2 阶对称张量)

$\(\nabla \cdot (\boldsymbol{\Gamma} \cdot \nabla \phi)\)$

  • 离散形式

$\(\sum_f (\boldsymbol{\Gamma} \nabla \phi)_f \cdot \mathbf{S}_f\)$

其中 \((\boldsymbol{\Gamma} \nabla \phi)_f\) 是面上的扩散通量向量(不是标量),需要通过插值得到。

六、Under-Relaxation(§8.8)

  • 基本形式

$\(\phi_C^{new} = \phi_C^{old} + \alpha (\phi_C^{computed} - \phi_C^{old})\)$

等价于修改线性系统

$\(\frac{a_C}{\alpha} \phi_C^{new} + \sum_F a_F \phi_F = b_C + \frac{1-\alpha}{\alpha} a_C \phi_C^{old}\)$

关键结论

  1. 扩散项的 FVM 离散化是"最简单但最严谨"的一类:相比对流项(涉及方向性)和瞬态项(涉及时间精度),扩散项只涉及几何与相邻 cell 值,公式简洁但工程细节繁多(正交 / 非正交、各向同性 / 各向异性、边界条件)。
  2. 非正交修正是 FVM 区别于 FDM 的关键:FDM 在非正交网格上实现复杂,FVM 通过 Over-Relaxed 修正将非正交效应分解为"主项 + 修正项",主项进入 \(a_C, a_F\) 保持有界性,修正项进入 \(b_C\) 保留非正交物理。
  3. 边界条件处理规则明确、确定性高:每种边界条件对 \(a_C, a_F, b_C\) 的修改规则是确定性的,这是 FVM 易于工程实现的关键。
  4. Under-Relaxation 是高非线性问题的"安全阀":湍流、化学反应等高非线性问题,必须配合 under-relaxation 才能稳定收敛。
  5. uFVM 与 OpenFOAM 的 fvm::laplacian(gamma, phi) 等价:两套代码的扩散项离散化实现完全一致,这是 Ch 7 "数据结构同构"的具体体现。

挑战和开放性问题

  1. 极端非正交网格的收敛困难 —— 当 \(\theta_f > 80°\) 时,Over-Relaxed 修正需要多次迭代才能收敛。是否存在更好的"非正交修正多步收敛"算法是研究热点。
  2. 各向异性扩散 + 非正交网格的组合 —— 工业上常见(如多孔介质流、晶体生长),但 FVM 实现复杂,需要专门的本构建模。
  3. 动网格下的扩散项离散化 —— 动网格(ALE 框架)下,\(\mathbf{S}_f\) 随时间变化,需要显式处理时间精度。Ch 13 时间离散章节会涉及一部分。
  4. 非局域扩散(分数阶扩散算子) —— 本书未涉及。分数阶 Laplacian \(\nabla^\alpha \phi\)\(0 < \alpha < 2\))在异常扩散、生物输运、湍流反常扩散等领域有重要应用。
  5. 非牛顿流体的黏度张量与扩散项耦合 —— 黏度 \(\mu\) 依赖 \(\nabla \mathbf{v}\)(如 Carreau 模型),导致扩散项"自非线性",需要特殊处理。
  6. 张量扩散的 OpenFOAM 实现 —— fvm::laplacian(gamma, phi)\(\gamma\) 可以是 volScalarField、volTensorField、surfaceScalarField。volTensorField 形式下需调用 laplacianScheme 的模板特化版本。

个人反思与批判性分析

本章是 FVM 扩散项的"百科全书",89 页篇幅覆盖了从 1D Cartesian 到 3D 非结构非正交各向异性的全部细节。从写作特点看:

  • "由简到繁"的递进结构 —— 1D Cartesian(§8.1)→ 2D Cartesian(§8.1)→ 非 Cartesian 正交(§8.4)→ 非正交结构(§8.5)→ 非结构(§8.6)→ 各向异性(§8.7)→ Under-Relaxation(§8.8)。这种递进是工业 FVM 实现的真实工程顺序,读者可以在每一步都看到"前一步如何扩展到下一步"。
  • 非正交修正(§8.5)是本章最关键的工程贡献 —— Over-Relaxed 修正是 FVM 在非正交网格上保持有界性的核心技术。OpenFOAM 的 corrected laplacianScheme 即对应这一思路。本节给出的"主项入 \(a_C, a_F\) + 修正项入 \(b_C\)"分解规则,是工业 FVM 实现的核心 trade-off。
  • "系数 4 大规则"是数值方法评价的统一标准 —— 守恒性、对角占优、解的非负性、守恒恒等式。这 4 个规则在 Ch 11-12 高分辨率格式的讨论中会被反复引用。

但本章也存在以下不足:

  • §8.5 非正交修正的"4 步迭代"过程描述不够清晰 —— 实际 OpenFOAM 中是"非正交修正迭代次数"参数(nNonOrthogonalCorrectors)控制,但本章未明确给出"为什么需要迭代"、"如何迭代"的数学解释。
  • §8.7 各向异性扩散的工程实例不够 —— 工业上各向异性扩散的典型场景(多孔介质、晶体生长、纤维增强复合材料)未给出具体算例。
  • uFVM 的实现细节略显简略 —— 与 Ch 7 一样,uFVM 的代码片段和函数签名没有完整展示,对自学者不够友好。
  • 缺乏对"非正交网格上最小二乘梯度法"的展开 —— Ch 9 会详细讨论梯度计算,但与本章的"非正交修正"是紧密耦合的(面梯度是非正交修正的核心输入)。这种"两章内容互相依赖"对自学读者构成挑战。

总体而言,本章是 FVM 扩散项离散的"权威教材式"参考章节,与 Versteeg-Malalasekera(偏入门)、Ferziger-Peric(偏理论)、OpenFOAM 官方文档(偏工程)形成三角对标。Moukalled 的优势在于"理论 + 工程 + 实现"三位一体的连贯叙述。

重要参考文献

  • [X1] Patankar S.V. (1980) Numerical Heat Transfer and Fluid Flow. Hemisphere. (FVM 与扩散项离散原始文献)
  • [X2] Rhie C.M., Chow W.L. (1983) Numerical study of the turbulent flow past an airfoil with trailing edge separation. AIAA Journal, 21(11): 1525-1532.
  • [X3] Ferziger J.H., Perić M. (2002) Computational Methods for Fluid Dynamics, 3rd Edition. Springer. (扩散项离散化的理论深入参考)
  • [X4] Versteeg H.K., Malalasekera W. (2007) An Introduction to Computational Fluid Dynamics: The Finite Volume Method, 2nd Edition. Pearson. (扩散项入门参考)
  • [X5] Mathur S.R., Murthy J.Y. (1997) A pressure-based method for unstructured meshes. Numerical Heat Transfer, Part B, 31(2): 195-215. (非结构网格上扩散项离散化)
  • [X6] OpenFOAM Foundation (2014) OpenFOAM: The Open Source CFD Toolbox — Programmer's Guide. (OpenFOAM laplacianScheme 实现)
  • [X7] Jasak H. (1996) Error Analysis and Estimation for the Finite Volume Method with Applications to Fluid Flows. PhD Thesis, Imperial College. (FVM 离散化误差与收敛性分析)
  • [X8] Weller H.G., Tabor G., Jasak H., Fureby C. (1998) A tensorial approach to computational continuum mechanics using object-oriented techniques. Computers in Physics, 12(6): 620-631.