很多同学初次接触Fluent瞬态计算,肯定知道库朗数的概念,而且一定听过”瞬态计算要把库朗数控制在1以下,否则结果就不准,甚至会发散“的说法,这种说法 正确吗?
实际上这种说法是很不准确的,库朗数的数值和时间格式有关,而且大部分我们常用的时间格式下,库朗数都不需要小于1。今天我们好好说清楚这个问题!!
1.时间积分格式的由来
在文章148、Fluent 中为什么时间是"积分"而不是"离散"??中,我们详细介绍了时间积分的由来,这里简单说明。通用的时间演化表达式可以写为
其中函数F包含了所有的空间离散项。从t时刻到 t+Δt时刻,ϕ的真实变化应该是:
其中的ϕ(n+1)是下一个时间步的变量,也是我们想要求解的。这是一个精确的积分表达式。
由于F(ϕ)是ϕ的函数,而ϕ和时间有关,因此F(ϕ)也随时间变化。但问题是我们不知道 F(ϕ) 在时间区间内的具体变化,所以需要对积分进行近似。
如何近似呢??我们假设一种最简单的方式。假设 F(ϕ)保持为当前时刻的值 F(ϕn),那就是说在Δt时间内,F(ϕ)是不变的,一直是F(ϕn),那等式的右边就可以直接积分了:
将右边的Δt移动到等式左边,方程就变为了
此时ϕ(n+1)可以直接计算出来,这就是Fluent理论手册上,时间积分的一阶显式格式。
2.几种时间积分格式及特点
根据F(ϕ)的不同假设,可以将时间积分格式分为几种
2.1 一阶隐式
一阶隐式格式是 Fluent 瞬态计算中最常用的格式之一,也是默认选项。
其基本思想是:在计算ϕ(n+1)时,方程右端的空间项全部采用n+1时刻的值来计算。数学上可以表示为:
这里 F(ϕ)代表空间离散后的算子(包含对流、扩散和源项)。
特点:
无条件稳定:无论时间步长取多大,计算结果都不会因时间步长过大而发散(当然,精度会下降)。
这意味着,这种格式对库朗数没有要求
一阶时间精度:时间离散的误差与Δt 成正比,即O(Δt)。
计算效率高:每个时间步内需要求解一个代数方程组,但由于是隐式,允许取较大的时间步长。
适用场景:绝大多数工程瞬态问题,尤其是对时间精度要求不高的定常问题向瞬态过渡的计算。
2.2 二阶隐式
为了提高时间精度,Fluent 提供了二阶隐式格式。其离散形式为:
注意右端空间项仍然采用n+1时刻的值。
特点:
无条件稳定:与一阶隐式相同。
二阶时间精度:时间离散的误差与(Δt)²成正比,精度更高。
可能引入数值振荡:在流场变化剧烈或初始条件不连续的情况下,二阶格式可能产生非物理的振荡。
适用场景:对时间精度要求较高的瞬态问题,如涡旋脱落、声学分析等。使用时建议配合较小的初始时间步长。
2.3有界二阶隐式
这是 Fluent 中一个非常实用的改进格式,可以理解为“带限制器的二阶隐式格式”。
它的核心思想是:在二阶隐式格式的基础上,引入一个限制器。当检测到某个物理量可能出现非物理振荡时,限制器会自动将格式降阶为一阶隐式,从而保证解的有界性。
特点:
不适用于基于密度的求解器,仅适用于基于压力的求解器。
仅适用于多相的隐式体积分数离散化方案,而不适用于显式体积分数方案
不支持 Singhal 空化模型。
2.4 显式时间积分
显式格式与隐式格式的思路正好相反。在计算ϕ(n+1)时,方程右端的空间项采用n时刻的值:
这样一来,ϕ(n+1)可以直接由ϕ(n)显式计算得到,无需求解代数方程组。
特点:
它主要用于捕捉移动波的瞬态行为,例如激波,在这些情况下,它比隐式时间步进方法更准确且成本更低。
只有在显式密度基才可用,对于压力基或者隐式的密度基不可用
时间步长必须小于某个临界值,否则计算会发散。这个临界值通常由库朗数来表征。
3. 不同时间格式的库朗数
库朗数,通常写作CFL,是衡量时间步长与网格尺度匹配程度的一个无量纲数。它的物理意义可以理解为:在一个时间步长内,流体信息穿过网格单元的数量。
对于一维情况,库朗数的定义为:
其中,u 是当地流速,Δt是时间步长,Δx是网格尺度。在三维流动中,库朗数通常取各个方向的最大值。
3.1 显式格式与库朗数
对于显式时间积分格式,稳定性要求决定了库朗数必须小于某个临界值。对于大多数对流占优的问题,这个临界值通常是 1(采用一阶迎风空间格式时)。
也就是说,如果采用显式格式,我们需要确保 CFL≤1。否则,数值误差会迅速放大,导致计算发散。
这就带来了一个现实问题:如果网格非常细(Δx 很小),或者流速很快(u 很大),那么为了保证库朗数不大于 1,时间步长 Δt 就必须取得非常小。对于复杂三维问题,这往往意味着巨大的计算量。
这就是我们常听到的说法:瞬态计算,库朗数必须小于1;实际上只有显式时间积分格式,才需要满足这个要求。
而显式时间积分格式,只有在显式密度基才可用。对于压力基或者隐式的密度基,我们是用不到显示时间积分的,更不需要CFL≤1
3.2 隐式格式与库朗数
对于隐式格式,由于算法上是无条件稳定的,理论上库朗数可以取任意大的值。这也是隐式格式在工程应用中如此普及的核心原因。
但这里有一个重要的概念需要澄清:稳定并不等于精确。
当库朗数很大时(例如CFL>10 甚至 CFL>100),虽然计算不会发散,但时间离散误差会显著增大。尤其对于一阶隐式格式,过大库朗数会导致“数值黏性”人为增加,抹平流场中的瞬态细节。
所以,隐式格式中库朗数的取值,更多是一个精度与效率的权衡问题,而非稳定性问题。
3.3 实际工程中如何取值?
根据我个人的经验,给出一些参考数值:
从上面的内容可以看出库朗数小于1只是一种特殊的条件,而且还是不常用的情况。大部分情况下,库朗数可以大于1甚至远大于1,但需要考虑计算精度问题,对库朗数还是需要限制