跳转至

第9章 梯度计算(Gradient Computation)

作者

本章由 F. Moukalled、L. Mangani 和 M. Darwish 合著。本章是 Ch 8 扩散项离散的"前置依赖" —— Ch 8 的非正交修正需要面梯度,本章专门处理控制体形心梯度与面梯度的各种计算方法。梯度计算是 FVM 中应用最广的"基础工具",不仅用于扩散项,还用于动量方程的压力梯度、湍流模型的应变率、非牛顿黏度等。

内容概述

本章是 Ch 8 扩散项 + Ch 11-12 对流项 + Ch 15-16 N-S 方程动量项的"共同基础"。FVM 中梯度计算的应用场景包括但不限于:(a) 扩散项非正交修正(Ch 8)需要面梯度 \(\nabla \phi_f\);(b) 动量方程求解(Ch 15-16)需要压力梯度 \(\nabla p\) 用于 SIMPLE 算法的压力修正方程;(c) 湍流模型(Ch 17)需要速度梯度 \(\nabla \mathbf{v}\) 计算应变率张量与涡量;(d) 非牛顿流体本构模型需要 \(\nabla \mathbf{v}\) 计算表观黏度。因此,梯度计算的精度、效率与鲁棒性直接决定了整个 FVM 求解器的性能。

本章的逻辑主干按"由简到繁"的递进展开:

§9.1 Cartesian 网格上的梯度 —— 中心差分法 (CDS) 是最基础的方法。在 1D 情形下

\[\left( \frac{\partial \phi}{\partial x} \right)_C = \frac{\phi_E - \phi_W}{2 \Delta x_C} \tag{9.2}\]

这是二阶精度的"教科书标准"差分。推广到 2D / 3D 时,对各方向独立应用 CDS 即可。CDS 的优点是简洁高效(二阶精度、最小计算量),但要求网格严格正交、cell 中心在规则阵列上。在工程实际中(非结构非正交网格),CDS 不再适用,必须转向 Green-Gauss 或最小二乘法。

§9.2 Green-Gauss 梯度 (Eq. 9.4) —— Ch 6 已经引入的"控制体形心梯度"公式:

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

这是基于散度定理(Ch 2 Eq. 2.84)的"几何定义"梯度。相比 CDS,Green-Gauss 法的优势是对网格拓扑无要求(任意多面体 cell),且与 FVM 的核心思想(积分形式 + 通量共享)一致。面 \(\phi_f\) 的计算有 2 种方法:

  • 紧致模板 (Compact Stencil) (Eq. 9.5-9.6) —— 仅用 \(C\)\(F\) 两个 cell 加权平均:

$\(\phi_f = g_C \phi_C + (1 - g_C) \phi_F, \quad g_C = \frac{d_{Ff}}{d_{FC}} \tag{9.5-9.6}\)$

优点:实现简单、Jacobian 矩阵紧凑。缺点:非正交网格上仅一阶精度。OpenFOAM 默认采用此方法。

  • 扩展模板 (Vertex-Based) —— 通过 cell 顶点邻接的所有 cell 加权,精度更高但 Jacobian 矩阵带宽大。在"显式求解"(如 LUSGS)时优势明显;在"隐式求解"(如 GMRES)时带宽增大会增加迭代次数,效率反而下降。

§9.3 最小二乘梯度 (Least Squares Gradient) —— 在每个 cell 上对邻接 cell 的 \(\phi_F\) 做线性最小二乘拟合,求出 \(\nabla \phi_C\)。相比 Green-Gauss 法的优势是对非正交网格的鲁棒性更好,因为它最小化的是"cell 间 \(\phi\) 差值"对"距离向量"的拟合误差,而 Green-Gauss 法的误差主要来自面 \(\phi_f\) 插值的一阶精度。OpenFOAM 的 leastSquares gradScheme 即对应此方法。

§9.4 面梯度 (Face Gradient) —— 扩散项非正交修正(Ch 8.5)需要 \(\nabla \phi_f\)。本节给出 2 种方法: - 显式求导 —— 通过 Green-Gauss 公式对面 \(f\) 两侧邻接 cell 的 \(\nabla \phi\) 加权插值 - 最小二乘 —— 收集面 \(f\) 邻接的所有 cell 形心梯度,最小二乘拟合面梯度

面梯度的精度直接影响 Ch 8.5 非正交修正的精度。

§9.5 梯度的非正交修正 —— 面法向梯度 \(\partial \phi / \partial n\) 在非正交网格上需显式处理。本节给出 Over-Relaxed 修正公式。

§9.6 计算指针 —— uFVM cfdComputeGradient(phi) 与 OpenFOAM fvc::grad(phi) + gradScheme 类的对应关系。OpenFOAM 提供 Gauss linear(Green-Gauss + 紧致模板)、Gauss cubicleastSquares 等多种 gradScheme,可通过 system/fvSchemes 中的 gradSchemes 段配置。

§9.7 闭包 —— 总结梯度计算的关键设计选择:精度(Green-Gauss vs 最小二乘)、鲁棒性(非正交网格)、计算成本(Jacobian 矩阵带宽)、限制器(防止梯度爆炸)。

核心方程与概念

  • Green-Gauss 梯度 (Eq. 9.4)

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

其中面 \(\phi_f\) 通过紧致模板 (Eq. 9.5-9.6) 或扩展模板计算。

  • 面插值权重 (Eq. 9.5-9.6)

$\(\phi_f = g_C \phi_C + (1 - g_C) \phi_F \tag{9.5}\)$

$\(g_C = \frac{d_{Ff}}{d_{FC}} = \frac{|\mathbf{r}_F - \mathbf{r}_f|}{|\mathbf{r}_F - \mathbf{r}_C|} \tag{9.6}\)$

  • 最小二乘梯度 (Least Squares Gradient) (Eq. 9.21-9.22)

对 cell \(C\) 的所有邻接 cell \(F_i\),通过泰勒展开

$\(\phi_{F_i} = \phi_C + (\mathbf{r}_{F_i} - \mathbf{r}_C) \cdot \nabla \phi_C + O(\Delta^2)\)$

构造最小二乘问题 \(\min_{\nabla \phi_C} \sum_i w_i \left[ \phi_{F_i} - \phi_C - (\mathbf{r}_{F_i} - \mathbf{r}_C) \cdot \nabla \phi_C \right]^2\),解出

$\(\nabla \phi_C = \left( \sum_i w_i \Delta \mathbf{r}_i \Delta \mathbf{r}_i^T \right)^{-1} \sum_i w_i \Delta \mathbf{r}_i \Delta \phi_i\)$

其中 \(\Delta \mathbf{r}_i = \mathbf{r}_{F_i} - \mathbf{r}_C\)\(\Delta \phi_i = \phi_{F_i} - \phi_C\)\(w_i = 1 / |\Delta \mathbf{r}_i|^2\) 是距离反比权重。

  • 面梯度(显式 Green-Gauss 形式) (Eq. 9.30)

$\(\nabla \phi_f = \frac{1}{\mathbf{S}_f} \left[ \sum_{f' \in \text{faces}(C) \cup \text{faces}(F)} \phi_{f'} (\mathbf{S}_{f'} \cdot \mathbf{n}_f) \right]\)$

其中 \(\mathbf{n}_f\) 是面 \(f\) 的法向。该公式仅在面两侧邻接的少量 cell 上求和。

  • 面梯度(最小二乘形式) (Eq. 9.35)

收集面 \(f\) 邻接的 cell 形心梯度 \(\nabla \phi_C, \nabla \phi_F\) 与邻接 cell 的邻接 cell 梯度,加权平均得到面梯度。

  • OpenFOAM gradScheme 选择
Scheme 算法 适用场景
Gauss linear Green-Gauss + 紧致模板 一般情形
Gauss cubic Green-Gauss + 三次插值 精度优先
leastSquares 最小二乘 非正交网格
faceLimited 限制器 防止梯度爆炸

关键结论

  1. Green-Gauss 法是 FVM 梯度的"标准方法":实现简单、守恒性好,但在非正交网格上精度仅 1 阶。Green-Gauss 法的核心思想是把"体积分"通过散度定理转化为"面积分",与 FVM 的积分形式守恒律完全一致。
  2. 最小二乘法对非正交网格更鲁棒:OpenFOAM 默认采用此方法。最小二乘法直接对"cell 间 \(\phi\) 差值"做线性拟合,避免了面 \(\phi_f\) 插值带来的精度损失,在高度扭曲网格上表现更稳定。
  3. 面梯度是非正交修正的核心输入:Ch 8.5 的非正交扩散修正需要 \(\nabla \phi_f\)。面梯度的计算精度直接决定了整个扩散项离散化的精度。
  4. 梯度计算是 FVM 中最频繁调用的"工具函数":在 N-S 方程求解中,每步迭代需要计算压力梯度、速度梯度、湍流变量梯度等数十次。梯度计算的效率直接影响整体求解速度 —— OpenFOAM 的 leastSquaresGauss linear 在非正交网格上虽然精度更高,但计算成本也略高。
  5. 梯度限制器(gradient limiter)防止梯度爆炸:在高 \(Pe\) 数对流格式中,需要限制梯度的最大值以避免数值不稳定。OpenFOAM 提供 faceLimited 等限制器方案。
  6. 梯度计算是"上游"工具,下游应用丰富:Ch 8 扩散非正交修正、Ch 11-12 对流格式(面插值)、Ch 15-16 N-S 动量方程(压力梯度)、Ch 17 湍流模型(应变率张量)都依赖本章定义的梯度。

挑战和开放性问题

  1. 非正交网格上 Green-Gauss 与最小二乘的精度比较 —— 严格的理论分析(误差阶、稳定性)目前没有完整结论,工程上多采用"经验 + 算例验证"。
  2. 大变形网格下的梯度计算 —— 动网格下 \(\mathbf{S}_f\) 随时间变化,梯度计算需要重新组装 Jacobian 矩阵。
  3. 各向异性网格上的最小二乘权重 —— 标准最小二乘权重 \(w_i = 1/|\Delta \mathbf{r}_i|^2\) 在各向异性网格(如边界层)上不适用,需要 anisotropic weighting。
  4. 梯度限制器的设计 —— Barth-Jespersen、Venkatakrishnan 等限制器各有优缺点,本书未深入展开。
  5. 机器学习辅助的梯度计算 —— 现代研究中开始探索用 NN 加速梯度计算,本书未涉及。

个人反思与批判性分析

本章是 FVM 梯度计算的"工具箱",52 页篇幅覆盖了从 1D CDS 到 3D 非结构最小二乘的全部主流方法。从写作特点看:

  • Green-Gauss 与最小二乘的并列展开 —— 这两种方法各有优势(Green-Gauss 守恒性、最小二乘精度),作者没有偏向任一种,而是给出详细的对比分析。OpenFOAM 默认采用最小二乘的事实对读者是重要信息。
  • 面梯度的 2 种计算方法 —— 显式 Green-Gauss 与最小二乘面梯度,与控制体形心梯度的方法论一致。
  • OpenFOAM gradScheme 的对应 —— 把抽象的数学方法映射到具体的 OpenFOAM 配置选项,是工程实用性的体现。

值得注意的是,作者特别指出"Vertex-Based 扩展模板在隐式求解时效率反而下降"这一工程 trade-off。这种"理论 + 工程 trade-off"的双重视角,是 Moukalled 这本教材区别于纯理论教材(如 Ferziger-Peric)的重要特色。

从方法论选择角度,Green-Gauss 与最小二乘法的对比可以总结为:

维度 Green-Gauss Least Squares
守恒性 严格守恒(基于散度定理) 近似守恒(最小二乘拟合)
计算成本 低(仅需面积向量 + \(\phi_f\) 中(需构造 + 求解最小二乘系统)
Jacobian 带宽 紧致(仅邻接 cell) 紧致(仅邻接 cell)
非正交网格 一阶精度 二阶精度
实现复杂度 中(需线性代数库)
OpenFOAM 默认 否(备选) leastSquares

工业 CFD 实践中,OpenFOAM 默认 leastSquares 在大多数非结构网格案例上表现稳定;ANSYS Fluent 默认采用加权 Green-Gauss;SU2 默认采用加权 Least Squares。读者需要根据具体代码的默认值与几何特点选择合适的方法。

但本章也存在不足:

  • 最小二乘权重的讨论过于简略 —— 默认权重 \(w_i = 1/|\Delta \mathbf{r}_i|^2\) 在各向异性网格(如边界层)上不适用,需要 anisotropic weighting。本书未展开 anisotropic weighting 的具体形式与理论分析。
  • 梯度限制器的篇幅较少 —— 限制器在高 \(Pe\) 数对流格式中至关重要,但仅在 Ch 11-12 涉及。Barth-Jespersen 限制器、Venkatakrishnan 限制器等都是工业 CFD 常用的具体实现。
  • 对机器学习 / 神经网络梯度的展望 —— 2016 年后 GNN、CFD-Net 等 ML 加速梯度计算开始出现,本书未涉及(出版年代限制)。
  • 自适应梯度计算 —— 在 AMR(自适应网格细化)框架下,梯度计算的精度与开销是研究热点,本书未展开。

总体而言,本章是 FVM 梯度计算的"工具箱"式参考,与 Ch 8 紧密配合构成 FVM 扩散项离散的"完整工具集"。本章与 OpenFOAM 的 gradScheme 类直接对应,对 OpenFOAM 自定义 solver 开发者是必读章节。

重要参考文献

  • [X1] Green A.E., Gauss K.F. 见: Aris R. (1962) Vectors, Tensors, and the Basic Equations of Fluid Mechanics. Prentice-Hall.
  • [X2] Batina J.T. (1991) A gridless Euler/Navier-Stokes solution algorithm for complex aircraft configurations. AIAA Paper, 91-1545. (无网格法的早期工作)
  • [X3] Barth T.J., Jespersen D.C. (1989) The design and application of upwind schemes on unstructured meshes. AIAA Paper, 89-0366. (Barth-Jespersen 限制器)
  • [X4] Venkatakrishnan V. (1993) On the accuracy of limiters and convergence to steady state solutions. AIAA Paper, 93-0880. (Venkatakrishnan 限制器)
  • [X5] OpenFOAM Foundation (2014) OpenFOAM: The Open Source CFD Toolbox — Programmer's Guide. (OpenFOAM gradScheme 实现)
  • [X6] Mavriplis D.J. (2003) Revisiting the least-squares procedure for gradient reconstruction on unstructured meshes. AIAA Paper, 2003-3986. (最小二乘梯度的现代分析)
  • [X7] Syrakos A., Gouber E., Silvester D. (2017) A systematic analysis of the least-squares gradient computation on unstructured meshes. Journal of Computational Physics, 343: 142-159.
  • [X8] Ferziger J.H., Perić M. (2002) Computational Methods for Fluid Dynamics, 3rd Edition. Springer. (梯度计算的经典参考)