我们上篇文章143、Fluent中的松弛因子是什么?如何设置?介绍了松弛因子的作用,一些善于思考的同学会发现松弛因子的物理意义和时间步长很像,一个控制迭代的"步子大小",一个控制时间推进的"快慢",它们之间到底有什么关系?
今天我们就来详细说一说两者的区别和联系!!
1.时间步长的含义
在聊两者的关系之前,我们先搞清楚时间步长到底是什么。
1.1 时间步长的物理意义
时间步长(Time Step,记作Δt)是在瞬态计算中,我们把连续的时间离散化的间隔
举个例子:一个水滴落入水面,整个过程持续0.1秒:
如果Δt = 0.001s,我们会计算100个时间点
如果Δt = 0.0001s,我们会计算1000个时间点

时间步长越小,我们对物理过程的"采样"就越密集,理论上结果越精确,但计算量也越大。
1.2 时间步长的数学表达
在数值求解时,时间导数项会被离散化。以最简单的一阶Euler格式为例:
φⁿ:在时刻 tₙ 的变量值
φⁿ⁺¹:在时刻 tₙ₊₁ = tₙ + Δt 的变量值
Δt:时间步长
时间步长直接决定了"现在"和"下一刻"之间的关系。
时间步长的设置要满足库朗数条件:
CFLₘₐₓ:最大CFL数(显式格式通常≤1,隐式格式可以更大)
时间步长的详细设置方法可以参考文章:2、Fluent时间步长的估算与库朗数
2.松弛因子为什么和时间步长这么像?
从前面的分析我们已经发现,松弛因子起到的作用和时间步长很相似。不只是物理意义上,两者在数学形式上也很相似。
在稳态或迭代求解中,Fluent 常用的更新方式是:
其中:
ϕ∗:本次迭代算出来的“理想解”
α:松弛因子(0~1)
如果你眯着眼睛看这个公式,会发现一个熟悉的结构:
这和显式时间推进:
在形式上,几乎是同一个模板。为什么会这样呢?
时间步长 Δt:控制的是真实时间上的变化幅度松弛因子 α:控制的是数值迭代中允许前进的幅度
它们本质上都在控制“变化的节奏”。只不过:一个对物理负责;一个只对数值稳定负责
3.稳态计算中的松弛因子
在稳态计算中,没有真实的时间演化,松弛因子就完全扮演了"伪时间步长"的角色。
松弛因子相当于给本来“没有时间”的问题,人为引入了一个数值上的时间尺度,防止解在迭代过程中“跑偏”。在这个框架下,松弛因子就是伪时间步长的系数:
α大:每次迭代跨度大,收敛快但可能不稳定(就像大时间步长)
α小:每次迭代跨度小,稳定但收敛慢(就像小时间步长)
稳态迭代的收敛,相当于伪时间演化到了"无穷远",最终的稳态解与α无关。所以α只影响"到达稳态的路径和速度",不影响"稳态本身"
4.瞬态计算中的松弛因子
很多人会在这里产生困惑:既然我已经有时间步长了,那瞬态计算里为什么还会看到松弛因子?
实际上瞬态计算同时涉及"真实时间步长"和"松弛因子"。
瞬态计算本质上是双重循环,在外层循环,即时间维度上使用时间步长。而在内层循环上还是会有迭代的,这一层上就使用松弛因子
外循环:由时间步长Δt控制,推进物理时间
内循环:由松弛因子α控制,在每个时间步内求解非线性方程
5.一句话总结
时间步长决定“你在模拟什么时间尺度的物理过程”,松弛因子决定“你愿意给数值系统多大的试错空间”。
它们长得像,是因为数学形式相似;但两者不能混用,因为一个属于物理世界,一个属于数值世界。