高阶有限差分法求解可压缩流体的典型步骤

北京理工大学 | 李明健

有限差分法(Finite difference method,FDM)是计算流体力学中常用的数值方法,下面介绍其求解可压缩流体问题的典型过程(感谢我的学生于荣岳对本文公式整理做出的贡献)。

考虑无粘、可压缩的理想流体,给出以下欧拉方程:

(1)Ut+Fx+Gy+Hz=0

其中:

(2)U=[ρρuρvρwE],F=[ρuρu2+pρuvρuwu(E+p)],G=[ρvρuvρv2+pρvwv(E+p)],H=[ρwρwuρwvρw2+pw(E+p)]

其中 ρ 是密度,u, v,  w 分别为流体在 x, y, z 方向的速度,p 为压力,E 为单位质量的总能量,写为内能和动能之和:

(3)E=ρe+12ρ(u2+v2+w2)

以上方程需要状态方程进行封闭,对于气、水混合介质,可采用以下状态方程:

(4)p=(γ1)ρeγB

其中 B=0γ=1.4 时,退化为理想气体状态方程,γ=7.5B=3.309×108 Pa 时退化为水的 Tait 状态方程。

流体声速满足以下形式:

(5)c=γ(p+B)/ρ

现在,我们需要构造有限差分格式,对式(1)进行求解。首先对其进行空间离散,得到 j 节点上的半离散格式如下:

(6)Ujt+Fj+12Fj12Δx+Gj+12Gj12Δy+Hj+12Hj12Δz=0

采用通量分裂方法,进一步得到以下形式:

(7)Ujt+(F^j+12++F^j+12)(F^j12++F^j12)Δx+(G^j+12++G^j+12)(G^j12++G^j12)Δy+(h^j+12++H^j+12)(H^j12++H^j12)Δz=0

其中,F^+F^ 是对通量 F 分裂得到的正、负通量,其他同理。

Lax-Friedrichs 通量分裂算法在界面处添加人工粘性项,从而抑制高频振荡,提高稳定性。以 x 方向为例,通量 F 分裂为:

(8)F^+=(F+λmaxU)/2F^=(FλmaxU)/2

其中 λmaxF/U 的最大特征值,通过:

(9)λmax=max(|u|,|uc|,|u+c|)

得到局部最大特征值,y, z 方向同理,采用 vw 求解最大特征值,并对通量 G, H 进行分裂。

为抑制高分辨率下激波和接触间断引起的非物理振荡,采用 5 阶 WENO(Weighted Essentially Non-Oscillatory)格式对通量进行重构。以式(7)中 x 方向通量为例,正通量 F^j+12+ 的重构需要用到 j2j1jj+1j+2 五个模板点的值:

(10)F^j+12+=k=02ωk+qk+(Fj2+,Fj1+,Fj+,Fj+1+,Fj+2+)

而负通量 F^j+12 的重构则需要用到 j1jj+1j+2j+3 五个模板点的值:

(11)F^j+12=k=02ωkqk(Fj1,Fj,Fj+1,Fj+2,Fj+3)

正负通量加和则得到式(6)中的 Fj+12 作为总通量。同理,得到所有通量后,即得到式(6)完整的半离散格式。式(10)和(11)中的权系数具体取值参考舒其望的论文。

三维问题有 5 个独立变量,均可由守恒变量 U 表示。同时 F, G, H 也可由 U 表示,因此可将半离散的方程(7)简写为:

(12)Ujt=L(U)

其中,L 为空间离散算子。

采用三阶 Runge-Kutta 法对时间进行离散,即可得到全离散格式:

(13)Uj(1)=Ujn+ΔtL(Un)Uj(2)=34Ujn+14Uj(1)+14ΔtL(U(1))Uj(3)=13Ujn+23Uj(2)+23ΔtL(U(2))

每个时间步分为三个子步,每个子步内的求解流程如下:

  1. 更新声速,式(5):根据 ρ, p 得到声速 c

  2. 更新能量,式(4):根据 ρ, p 得到内能 e;式(3):根据 ρ, p, u, v, w, e 得到总能量 E

  3. 更新守恒变量和通量,式(2):根据 ρ, p, u, v, w, E 得到守恒变量 U 和通量 F, G, H

  4. 通量分裂,式(9):根据 u, v, w, c 得到特征值 λmax;式(8):根据 λmax, U, F, G, H 得到 F^+,F^,G^+,G^,H^+,H^

  5. WENO重构,式(10)(11)(7)(12):根据 F^+,F^,G^+,G^,H^+,H^ 得到 L

  6. 时间推进:式(13):根据 U, L 得到更新的 U

  7. 返回原始变量:式(2)(3)(4):根据 U 更新 ρ, u, v, w, e, E, p

重复以上步骤,即可完成求解。