残差 — CAE术语解说

分类:术语表 | 2026-01-15

残差的理论基础

残差表示什么

🧑‍🎓

在CAE的解说中经常出现"残差"这个词,但具体来说它是什么"剩余"的意思呢?

🎓

好问题。我用最简单的例子来解释。考虑热传导的定常问题,支配方程为

$$ \nabla \cdot (k \nabla T) + Q = 0 $$
。当我们离散化并数值求解时,代入近似解
$$ \hat{T} $$
,这个等式并不能完全成立。"不成立"的部分,即方程左边剩下的值就是残差R。用式子表示为
$$ R = \nabla \cdot (k \nabla \hat{T}) + Q $$
。从物理角度讲,R越接近零,计算出的温度场就越满足热平衡。

🧑‍🎓

那么,残差很大意味着计算结果严重偏离物理规律吗?

🎓

正是这样。例如在强制对流的CFD分析中,如果动量方程的残差停留在10^0(=1)的量级,说明纳维-斯托克斯方程几乎未被满足。对于不可压缩流,连续方程(质量守恒)的残差应该缩小到流入质量流量的0.1%以下,比如1e-4 kg/s左右,这是一个常见的收敛目标。

🧑‍🎓

从数学角度讲,能否让残差完全等于零?

🎓

不能。主要有两个原因。首先,计算机的精度有限(双精度约15位),必然产生舍入误差。其次,对非线性问题使用迭代解法需要无限次迭代。在实务中,当残差充分小,且关注的物理量(如阻力、最大应力)的变化变得微小(例如0.1%以内)时,就判断为"收敛了"。

残差的数值计算方法

求解器如何减小残差

🧑‍🎓

软件内部具体执行什么样的计算来减小残差呢?

🎓

很好的问题,抓住了本质。以隐式有限元求解器为例,支配方程被离散化为

$$ [K]\{u\} = \{F\} $$
这样的线性系统。残差向量定义为
$$ \{R\} = \{F\} - [K]\{u\} $$
。求解器(直接法使用MUMPS或PARDISO,迭代法使用CG法或GMRES)通过最小化
$$ \{R\} $$
的范数来更新解
$$ \{u\} $$
。对于非线性问题,则使用牛顿-拉夫逊法等迭代,每一步都使线性化方程的残差接近于零。

🧑‍🎓

在CFD中看"残差曲线"时,为什么各个方程(X速度、Y速度、连续等)的残差大小差异这么大?

🎓

这与每个方程的物理量级和求解器内的"缩放"有关。例如在Ansys Fluent中,默认显示"缩放残差",即将残差除以该方程的代表性流量或力进行无量纲化,以便进行比较。即使进行了这样的处理,差异仍然存在是因为有些方程比其他方程更难求解。特别是压力-速度耦合的关键——连续方程(质量守恒)的残差必须比其他运动量方程少1-2个数量级才能使流场收敛。这往往成为收敛的"瓶颈"。

🧑‍🎓

迭代计算中有时会看到残差先下降后又上升的"振荡"。这是什么原因造成的?

🎓

这是不稳定性的信号。主要原因有三个。第一,物理上本身不稳定的现象(如卡门涡或燃烧不稳定)被强行用定常求解器求解。第二,非线性性太强,求解器的松弛系数过大。第三,网格质量差,离散化误差较大。遇到振荡时,通常的做法是将欠松弛系数从默认的0.7降低到0.3或更小进行试算。

残差的实务应用

收敛判定的实际应用

🧑‍🎓

在实务中,残差下降到什么程度才能放心采用计算结果?

🎓

没有绝对的阈值,但有经验规则。对于结构分析(线性静力),求解器的相对残差范数在1e-6以下就足够了。而CFD的情况更复杂。Ansys Fluent手册建议"缩放残差:连续方程1e-3,其他1e-6"作为一个参考,但这仅仅是参考。最重要的是监视关注的物理量(如翼型的阻力系数Cd),确认它在200-300次迭代以上不再变化。不能只看残差而下结论。

🧑‍🎓

据说细化网格有时反而使残差难以下降。为什么?

🎓

这是敏锐的观察。原因之一是,离散化误差减小时,数值扩散(人工粘性)也随之减小。特别是在CFD中,粗网格时的数值扩散"平复"了流动变动,而细网格时物理不稳定性就直接表现出来,使残差振荡难以收敛。另外,网格数增加会恶化条件数,迭代求解器的收敛性下降。这时需要使用多重网格法等高级求解算法。

🧑‍🎓

执行分析前,有没有检查表来预测收敛的可能性?

🎓

有的。我给学生的最低限度的检查清单是这样的:

1. **物理模型选择**:湍流模型选择RANS就够吗?如果要捕捉过渡和分离,应选SST k-ω。 2. **初始条件**:非线性问题完全用零初值是危险的。如果可能,应给定简易计算结果或期望值。 3. **求解器设置**:定常/非定常的选择正确吗?非定常的话时间步长(CFL数)合适吗? 4. **松弛系数**:从默认值开始,但发散时要准备将其降低到0.2。 5. **监视点设置**:除了残差,还要同时在至少3个点(入口、代表点、出口)监视压力和速度。 遵守这些要点可以大幅减少无用的计算时间。

残差的软件比较

不同软件的残差处理方式

🧑‍🎓

Ansys、Abaqus、COMSOL等软件对残差的显示方式和收敛基准设置有差异吗?

🎓

差异很大。首先**Ansys Mechanical**(结构)在求解器输出中显示"力残差"或"收敛范数",默认收敛基准以相对值设定,如力和力矩残差在0.5%以下。**Abaqus/Standard**将"残差"定义为接触条件未满足的力,用于平衡迭代的收敛判定。

🧑‍🎓

CFD软件呢?OpenFOAM这样的开源软件怎么处理?

🎓

**Ansys Fluent**和**STAR-CCM+**的特点是用彩色曲线实时显示缩放残差,对用户来说非常直观易读。而**OpenFOAM**默认显示各迭代步的"初始残差",这是输入到各方程线性求解器的残差大小,与最终收敛状态不同。OpenFOAM需要通过设定`solutionNorm`等函数对象来监视真正的残差范数。这一点对初学者来说门槛较高。

🧑‍🎓

COMSOL以"多物理耦合"著称,残差的处理有特殊之处吗?

🎓

确实有特点。**COMSOL Multiphysics**通常采用"完全耦合"方法,将多个物理场完全耦合后求解。这种情况下,处理的是包含所有物理场变量的单一大残差向量。收敛曲线显示的是这个全体残差的范数。要细致地看各物理的残差,需要切换到"分离求解"模式。在多物理问题中,某个物理场的残差可能会拖累其他物理场的收敛,产生"收敛互相掣肘"现象,因此对这个全体残差的监视就显得特别重要。

残差的故障排查

残差不下降或发散时

🧑‍🎓

运行分析后残差完全不下降,保持横平。首先应该怀疑什么?

🎓

首先要怀疑**边界条件矛盾**。例如,在闭合流路中同时指定流入速度和流出压力,导致质量守恒无法成立。其次检查**网格质量**,特别是斜度角大于70度的坏单元,或宽高比超过1000的极端细长单元。在Abaqus中可以执行VERIFICATION CHECK来检测这些问题。

🧑‍🎓

残差最初下降,但突然跳升,之后出现"NaN"(非数)错误停止。这是什么典型症状?

🎓

这是**数值发散**的经典模式。特别在CFD中,当密度或压力在局部达到物理上不可能的值(如负密度)时发生。原因可能是强压力梯度或冲击波被粗网格不当捕捉,或松弛系数过大。对策是首先用更保守的初始条件和较小的松弛系数(0.2以下)重新计算。如果还是不行,采用"逐步改进求解格式"的策略:先用一阶迎风差分等稳定的离散格式计算,待解稳定后再改用更高精度的格式。

🧑‍🎓

"残差已收敛,但物理量仍在振荡"是什么状况?这算收敛吗?

🎓

不算。这种状态称为**伪收敛**,是最危险的情形之一。原因是收敛基准设得太宽松(如1e-3),求解器认为"不用再更新了",但物理上还未达到定常。遇到这种情况必须切换到非定常求解。例如,卡门涡这样的周期现象用定常求解器求解就会陷入这种困境。必须检查监视点的物理量随时间(或迭代)的历史曲线,确认没有周期性或随机振荡,这是获得可靠结果的铁则。

本文的评价
感谢您的反馈!
有帮助
想要
更详细
报告
错误
有帮助
0
想要更详细
0
报告错误
0
Written by NovaSolver Contributors
匿名工程师和AI — 网站地图
查看个人资料