残差曲线解读:结果诊断与可信度验证

讲清 OpenFOAM 残差的归一化来源,用每个数量级所需迭代数与全局连续性误差两条独立证据判断收敛,并给出停滞、锯齿、假收敛三类曲线的定位路径。

OpenFOAM结果诊断与可信度验证残差曲线解读residualControl专题

残差曲线解读:结果诊断与可信度验证

残差曲线的形状比它的绝对值更有诊断价值。OpenFOAM 打印的 initial residual 是归一化后的相对残差,各方程的归一化因子量级不同,把 p 的 10−310^{-3} 和 U 的 10−510^{-5} 直接比大小没有意义。本文给出归一化因子的来源、把残差与全局守恒对照的判定方法,以及残差停滞、周期性锯齿、假收敛三类曲线各自的定位路径。

归一化因子决定了残差的量纲基准

求解器每个外层迭代打印的残差来自 solverPerformance,定义为当前线性系统残差与该方程归一化因子之比:

rϕ(k)=∥b−Ax(k)∥normFactorϕr_\phi^{(k)} = \frac{\|\mathbf{b} - A\mathbf{x}^{(k)}\|}{\mathrm{normFactor}_\phi}

归一化因子由对角系数与源项的量级构成,量纲是 [ϕ]⋅[aP][\phi]\cdot[a_P] 而不是 [ϕ][\phi]。这正是残差无量纲、可跨网格规模比较的原因,也是它不能直接当作物理误差的原因。

在 fvSolution 中收敛判据分两层:线性求解器的 tolerance/relTol 管内迭代,residualControl 管外层迭代何时退出。

solvers
{
    p
    {
        solver    GAMG;
        tolerance 1e-7;
        relTol    0.01;
    }
    U
    {
        solver    smoothSolver;
        smoother  symGaussSeidel;
        tolerance 1e-8;
        relTol    0.1;
    }
}

SIMPLE
{
    nNonOrthogonalCorrectors 1;
    residualControl
    {
        p     1e-4;
        U     1e-5;
        k     1e-5;
        omega 1e-5;
    }
}

relTol 0.1 表示内迭代只要把残差降到上一外迭代的 10% 就停,因此日志里的 final residual 常是 initial residual 的十分之一左右,这不是停滞。

用下降速率判断残差是否健康

比绝对值更可靠的指标是每个数量级所需的迭代数。某二维翼型算例中 U 的 initial residual 从第 50 步的 2.0×10−22.0\times10^{-2} 降到第 450 步的 2.0×10−52.0\times10^{-5}:

Ndec=Nlog⁡10(r0/rN)=4003≈133N_{dec} = \frac{N}{\log_{10}(r_0/r_N)} = \frac{400}{3} \approx 133

即约 133 次迭代下降一个数量级。同一算例把 nNonOrthogonalCorrectors 从 0 提到 2 后降到每 60 次一个数量级,说明原来的非正交修正不足。这个量把"下降快慢"变成了可比较的数,也便于在两次网格或格式改动之间做对照。

把残差与全局守恒放在一起看

残差小不等于解正确,必须同时读日志中的连续性误差行:

time step continuity errors : sum local = 4.7e-09, global = -2.1e-10, cumulative = -8.4e-08

global 是全域通量不平衡的瞬时值,cumulative 是从 t=0t=0 起的累积值。以入口质量流率 m˙=ρUA=1.2×10×0.01=0.12 kg/s\dot m = \rho U A = 1.2 \times 10 \times 0.01 = 0.12\ \mathrm{kg/s} 为基准,累积值 −8.4×10−8-8.4\times10^{-8} 对应的相对不平衡为

ϵm=∣−8.4×10−8∣0.12≈7.0×10−7\epsilon_m = \frac{|-8.4\times10^{-8}|}{0.12} \approx 7.0\times10^{-7}

低于 10−510^{-5},与残差 10−510^{-5} 自洽。若残差已到 10−510^{-5} 而 ϵm\epsilon_m 仍在 10−210^{-2} 量级,问题几乎一定出在压力—速度耦合或边界通量上,而不是线性求解器。

三类异常曲线对应不同的根因

  • 平台停滞:残差降到某值后水平不动,且 cumulative 连续性误差不降。常见于压力全域无参考(p 边界全为 fixedValue)。
  • 周期性锯齿:残差随外层迭代周期起伏,周期与某个松弛因子或 nOuterCorrectors 相关,多见于 PIMPLE 中 nOuterCorrectors 1 却被当作瞬态求解。
  • 假收敛:残差达标但目标量(升力、压降)仍在漂移。此时应延长迭代并把目标量写进监控,而不是降低 residualControl 阈值。

失败模式

现象 根因 判定试验
p 残差停在 10−210^{-2} 不再下降 全域压力无参考、p 边界全为 fixedValue 把一个出口改为 fixedFluxPressure 重跑 50 步
U 残差每 3~5 步锯齿一次 nOuterCorrectors 1 配 PIMPLE、松弛因子过大 把 nOuterCorrectors 提到 2、U 松弛降到 0.7 对比曲线
残差 10−610^{-6} 但压降振荡 5% 目标量未收敛,残差判据过松 关掉 residualControl 多跑 500 步,看压降是否平移
首步残差就 10−1210^{-12} 场初值与边界自洽、方程无驱动 检查 0/ 目录初值是否已等于边界值
连续性误差随步数线性累积 某出口通量符号或 phi 边界错误 用 surfaceFieldValue 对进出口分别积 phi 求和

参考文献

  1. OpenFOAM Foundation, OpenFOAM User Guide, §4.5 Solution and algorithm control.
  2. S. V. Patankar, Numerical Heat Transfer and Fluid Flow, Hemisphere Publishing, 1980.
  3. R. Peyret, T. D. Taylor, Computational Methods for Fluid Flow, Springer-Verlag, 1983.
  4. D. A. Anderson, J. C. Tannehill, R. H. Pletcher, Computational Fluid Mechanics and Heat Transfer, Hemisphere Publishing, 1984.
  5. H. Jasak, Error Analysis and Estimation for the Finite Volume Method with Applications to Fluid Flows, PhD thesis, Imperial College London, 1996.