收敛判定 — CAE用语解说
收敛判定
老师,CFD的OpenFOAM运行时每个时间步都显示「残差(residual)」,那就是收敛判定吗?
是的。残差是「当前解满足支配方程的程度」的指标,当它降低到设定的阈值(tolerance)以下时,就判定为「已收敛」并停止计算。在OpenFOAM中,通过fvSolution的solvers块中的设置如 p: tolerance 1e-6 来配置。压力残差降到1e-6以下时停止迭代,这就是意思。但这只是「局部收敛的指标」,并不能保证整体解的质量——「残差低≠解正确」这是个陷阱。
定义
「残差低也不代表解是对的」是什么意思?
我来介绍两个典型陷阱。①过度松弛(Over-relaxation)导致振荡,残差无法下降的解——松弛系数太大时残差会在1e-3附近一直震荡。②全局收敛和局部收敛的不一致——入口到出口的积分量(总热流量或总升力系数)已经稳定,但局部涡结构仍在变化。在实际应用中,①不能只看残差日志,②还要加上目标量(阻力系数、最大温度等)的监测,等这些也稳定了才认为收敛,这是标准的双重检查方法。
FEM分析的收敛判定
非线性FEM分析的收敛判定和CFD一样吗?
概念相同,但指标略有不同。非线性FEM的Newton-Raphson法需要同时检查「力的残差(力的不平衡)」和「位移增量(位移的更新量)」。Abaqus默认设置是节点力的残差Rmax < 0.005 * F_max(荷载的0.5%以下)且位移增量cmax < 0.01 * u_max(位移的1%以下)时判定为收敛。有接触或材料非线性时收敛会变慢,会出现「DIVERGENCE」提示——此时标准处理是减小time increment(荷载增量)后重新尝试。
收敛判定设置太严格会怎样?
计算时间会无谓地增加,或者根本收敛不了。比如在OpenFOAM中设tolerance为1e-10,会碰到数值误差(舍入误差)的墙,残差无法再降低——计算就会永远进行下去。在实际应用中应根据问题的目标精度来设置:设计筛选阶段1e-3就足够了,最终精密评估才用1e-5~1e-6这样的设置。「每次都用最高精度」往往只是浪费时间。
关联用语
不能只看残差日志,还要加监测目标量的监测,等稳定了才认为收敛,这样的双重检查方法我理解了!
准确理解CAE用语是团队内部交流的基础。— Project NovaSolver同时也着眼于实务人员的学习支援。
请告诉我们您在收敛判定实务中遇到的课题
Project NovaSolver旨在解决CAE工程师日常面临的课题——设置的繁琐性、计算成本、结果的解释——的解决。您的实务经验将成为开发更好工具的原动力。
联系我们(准备中)相关专题
价值
详细
错误