Riemann 问题:CFD 的心脏#
有限体积法 (Finite Volume Method) 里,界面上的**数值通量 (numerical flux)**怎么算,直接卡住精度和稳定性。钥匙是 Riemann 问题:左右各一个常数,中间一道间断。
把压力比滑条从 1 附近推到 1000:1,左右两道波会从稀疏波换成激波。
中间的接触间断不会因为压力比变大就消失。左右两道波同时变成激波,只发生在星号压力 p∗ 比两侧压力都高的时候。
什么是 Riemann 问题?#
Riemann 问题是一个初值问题,其初始条件由一个不连续面两侧的两个不同常数状态组成:
U(x,0)={ULURif x<0if x>0
对于一维 Euler 方程,该问题的解析解由三个波 (wave) 组成:
- 左行波 (稀疏波 rarefaction 或 冲击波 shock)
- 接触不连续 (contact discontinuity)
- 右行波 (稀疏波 rarefaction 或 冲击波 shock)
Godunov 的思想 (1959)#
Godunov 的核心见解简单而强大:
“
为了获得网格边界处的通量,可以将相邻两个网格的平均值作为左右状态,然后求解 Riemann 问题。
有限体积法的更新公式:
Uin+1=Uin−ΔxΔt(F^i+1/2−F^i−1/2)
这里的 F^i+1/2 正是根据 Riemann 问题的解确定的数值通量。
Exact Riemann Solver (精确解法)#
精确 Riemann 求解器使用 Newton-Raphson 迭代法求解中间区域 (star region) 的压力 p∗。根据波的类型(冲击波/稀疏波)应用 Rankine-Hugoniot 关系式或等熵关系式。
冲击波 (Shock wave) 关系式 (p∗>pK, K=L 或 R):
fK(p∗)=(p∗−pK)[p∗+BKAK]1/2
其中 AK=(γ+1)ρK2,BK=γ+1γ−1pK。
稀疏波 (Rarefaction wave) 关系式 (p∗≤pK):
fK(p∗)=γ−12cK[(pKp∗)2γγ−1−1]
p∗ 满足以下条件:
fL(p∗)+fR(p∗)+(uR−uL)=0
分叉只看 p∗ 和 pK 谁大。p∗ 高于 pK,这一侧就是激波。fK 等于压差乘上 [AK/(p∗+BK)]1/2。AK=2/((γ+1)ρK),密度越大,同样的压力跳跃改动的速度越小。BK=(γ−1)pK/(γ+1) 把分母撑得比 p∗ 稍大一点。p∗ 不高于 pK,这一侧就是稀疏波。前面的系数 2cK/(γ−1) 随声速变大,也在 γ 靠近 1 时变大。压力比的指数是 (γ−1)/(2γ)。γ 下降,指数也下降,压力比对 fK 就不那么敏感。
两个 f 再加上 uR−uL 必须等于 0。uR 小于 uL 时,流体往中间挤。fL+fR 为正,p∗ 被推到两侧压力之上。那时左右两道波都是激波。滑条尽头的 1000:1 就是这个极端。低压一侧的 pK 低于星号压力,那边的 fK 留在激波支上。高压一侧仍可能是稀疏波,看压力比。两侧同时成为激波,得靠朝接触面合拢的速度差足够大。把一个格子原样当成激波管来算,写在 Godunov 在一格里解的激波管 里。
Approximate Riemann Solver (近似解法):为什么需要它?#
由于精确求解器需要迭代计算,因此成本昂贵。在实际的 CFD 代码中,大多使用近似 Riemann 求解器 (approximate Riemann solver)。
Roe Solver (1981)#
Roe 将非线性 Riemann 问题线性化 (linearization),转化为关于矩阵 A^ 的线性 Riemann 问题:
F^i+1/2=21(FL+FR)−21k=1∑3∣λ^k∣α^kr^k
使用 Roe 平均 (Roe average) 构建 A^:
u^=ρL+ρRρLuL+ρRuR,H^=ρL+ρRρLHL+ρRHR
优点:能精确捕捉接触不连续。缺点:可能违反熵条件(需要熵修正 entropy fix)。
HLLC Solver (Toro, 1994)#
HLLC 是对 HLL 求解器的改进,它恢复了接触不连续 (Contact)。它估计三个波速 (wave speed) SL, S∗ 和 SR:
F^i+1/2=⎩⎨⎧FLFL∗FR∗FRif SL>0if SL≤0<S∗if S∗≤0≤SRif SR<0
中间区域通量:
FK∗=FK+SK(UK∗−UK)
HLLC 实现简单且鲁棒,因此在压缩性多相流代码中应用最为广泛。
AUSM+ (Liou, 1996)#
AUSM 系列将通量分为对流项 (convective) 和压力项 (pressure):
F^i+1/2=m˙1/2Ψ1/2+p^1/2D
其中 m˙1/2 是网格边界质量流量,Ψ 是对流物理量。该格式在低马赫数流动中也很稳定,便于扩展为全速格式 (all-speed scheme)。
扩展到多相流
在多相流中,由于界面两侧的状态方程 (EOS) 不同,需要将 Riemann 求解器泛化为多材料 (multi-material) 版本。
代表性方法:
- Ghost Fluid Method:在界面附近构建另一侧流体的虚网格 (ghost cell),并在每相中独立求解单材料 Riemann 问题。
- HLLC for multi-material:在中间区域分别应用两侧的 EOS 来确定 p∗ 和 u∗。
下一篇再对比界面捕捉技术 (VOF, Level Set, Diffuse Interface)。
多相里把对流和压力彻底拆开,接在 Baer–Nunziato 通量的 TV 分离 后面。