残差 — CAE术语解说
残差的理论基础
残差表示什么
在CAE的解说中经常出现"残差"这个词,但具体来说它是什么"剩余"的意思呢?
好问题。我用最简单的例子来解释。考虑热传导的定常问题,支配方程为
那么,残差很大意味着计算结果严重偏离物理规律吗?
正是这样。例如在强制对流的CFD分析中,如果动量方程的残差停留在10^0(=1)的量级,说明纳维-斯托克斯方程几乎未被满足。对于不可压缩流,连续方程(质量守恒)的残差应该缩小到流入质量流量的0.1%以下,比如1e-4 kg/s左右,这是一个常见的收敛目标。
从数学角度讲,能否让残差完全等于零?
不能。主要有两个原因。首先,计算机的精度有限(双精度约15位),必然产生舍入误差。其次,对非线性问题使用迭代解法需要无限次迭代。在实务中,当残差充分小,且关注的物理量(如阻力、最大应力)的变化变得微小(例如0.1%以内)时,就判断为"收敛了"。
残差的数值计算方法
求解器如何减小残差
软件内部具体执行什么样的计算来减小残差呢?
很好的问题,抓住了本质。以隐式有限元求解器为例,支配方程被离散化为
在CFD中看"残差曲线"时,为什么各个方程(X速度、Y速度、连续等)的残差大小差异这么大?
这与每个方程的物理量级和求解器内的"缩放"有关。例如在Ansys Fluent中,默认显示"缩放残差",即将残差除以该方程的代表性流量或力进行无量纲化,以便进行比较。即使进行了这样的处理,差异仍然存在是因为有些方程比其他方程更难求解。特别是压力-速度耦合的关键——连续方程(质量守恒)的残差必须比其他运动量方程少1-2个数量级才能使流场收敛。这往往成为收敛的"瓶颈"。
迭代计算中有时会看到残差先下降后又上升的"振荡"。这是什么原因造成的?
这是不稳定性的信号。主要原因有三个。第一,物理上本身不稳定的现象(如卡门涡或燃烧不稳定)被强行用定常求解器求解。第二,非线性性太强,求解器的松弛系数过大。第三,网格质量差,离散化误差较大。遇到振荡时,通常的做法是将欠松弛系数从默认的0.7降低到0.3或更小进行试算。
残差的实务应用
收敛判定的实际应用
在实务中,残差下降到什么程度才能放心采用计算结果?
没有绝对的阈值,但有经验规则。对于结构分析(线性静力),求解器的相对残差范数在1e-6以下就足够了。而CFD的情况更复杂。Ansys Fluent手册建议"缩放残差:连续方程1e-3,其他1e-6"作为一个参考,但这仅仅是参考。最重要的是监视关注的物理量(如翼型的阻力系数Cd),确认它在200-300次迭代以上不再变化。不能只看残差而下结论。
据说细化网格有时反而使残差难以下降。为什么?
这是敏锐的观察。原因之一是,离散化误差减小时,数值扩散(人工粘性)也随之减小。特别是在CFD中,粗网格时的数值扩散"平复"了流动变动,而细网格时物理不稳定性就直接表现出来,使残差振荡难以收敛。另外,网格数增加会恶化条件数,迭代求解器的收敛性下降。这时需要使用多重网格法等高级求解算法。
执行分析前,有没有检查表来预测收敛的可能性?
有的。我给学生的最低限度的检查清单是这样的:
残差的软件比较
不同软件的残差处理方式
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),求解器认为"不用再更新了",但物理上还未达到定常。遇到这种情况必须切换到非定常求解。例如,卡门涡这样的周期现象用定常求解器求解就会陷入这种困境。必须检查监视点的物理量随时间(或迭代)的历史曲线,确认没有周期性或随机振荡,这是获得可靠结果的铁则。
相关主题
更详细
错误