【笔记】MesoFD - 基于平衡态的有限差分LBM

最近看到了 Shi et al. [1] 的新文章很有意思: MesoFD 格式 —— 从平衡态就能去构建各种偏微分方程的有限差分LBM格式 (并包括其对应的源项和平衡态).

我这里主要是把自己感兴趣的 “Navier-Stokes 方程的构造” 部分内容摘录了出来, 并做分享 (没想到用Taylor展开来分析真的不难啊).

至于文章里的稳定性分析、DnQb构造等等, 还请各位阅读施保昌老师的原文.

[1] Shi B, Du R, Chai Z. Equilibrium-distribution-function-based mesoscopic finite-difference methods for partial differential equations: modeling and analysis. Physical Review E, 2026, 113(4):045305. DOI:10.1103/61zg-dmhh. [Also available at arXiv:2505.17057]
[2] Xinmeng Chen, Zhenhua Chai, Jinlong Shang, Baochang Shi. Multiple-relaxation-time finite-difference lattice Boltzmann model for the nonlinear convection-diffusion equation. Physical Review E, 2021, 104:035308. DOI:10.1103/physreve.104.035308

基本构型

Shi et al. [1] 提出了一个 MesoFD 格式, 核心在于将 cj\boldsymbol{c}_j 方向的离散分布函数 fjf_j 直接表示为邻近时空点处平衡分布函数 fjeqf_j^{eq} 的线性组合 (j=0,1,…b−1j=0,1, \dots b-1, 共b个离散速度矢量).

fj(x,t)=∑q∑k(akqfjeq(x+kcjδt,t+qδt)+bkqδtFj(x+kcjδt,t+qδt))(1)f_j (\boldsymbol{x},t)=\sum_{q} \sum_{k} \left( a_{kq} f_j^{eq}(\boldsymbol{x}+k\boldsymbol{c}_j \delta_t, t+q\delta_t) + b_{kq} \delta_t F_j (\boldsymbol{x}+k\boldsymbol{c}_j \delta_t, t+q\delta_t) \right) \tag{1}

其中 akq,bkqa_{kq}, b_{kq} 均为参数, FjF_j 为该方向的源项. −mq≤k≤mq-m_q \le k \le m_q 以及 −n≤q≤0-n \le q \le 0 均为整数. nn 和 mqm_q 均不小于1, 表明这一组合至少使用单层空间数据和 t−δtt-\delta_t 的时间数据.

为便于书写, Shi et al. 用了下面的简记符号

fjeq(x+kcjδt,t+qδt)=fjeq,[k,q],Fj(x+kcjδt,t+qδt)=Fj[k,q]f_j^{eq}(\boldsymbol{x}+k\boldsymbol{c}_j \delta_t, t+q\delta_t) = f_j^{eq,[k,q]} ,\quad F_j (\boldsymbol{x}+k\boldsymbol{c}_j \delta_t, t+q\delta_t) = F_j^{[k,q]}

所以式(1)写为: fj(x,t)=∑k,q[akqfjeq,[k,q]+bkqδtFj[k,q]]f_j (\boldsymbol{x},t)=\sum_{k,q} [ a_{kq} f_j^{eq,[k,q]} + b_{kq} \delta_t F_j^{[k,q]}] . 对于经典的Navier-Stokes Equations (NSEs), 依旧有:

ρ(x,t)=∑j∑k,q[akqfjeq,[k,q]+bkqδtFj[k,q]](2a)\rho(\boldsymbol{x},t) = \sum_{j} \sum_{k,q} \left[ a_{kq} f_j^{eq,[k,q]} + b_{kq} \delta_t F_j^{[k,q]} \right] \tag{2a}

以及

(ρu)(x,t)=∑j∑k,qcj[aˉkqfjeq,[k,q]+bˉkqδtFj[k,q]](2b)(\rho\boldsymbol{u})(\boldsymbol{x},t) = \sum_{j}\sum_{k,q} \boldsymbol{c}_j \left[ \bar{a}_{kq} f_j^{eq,[k,q]} + \bar{b}_{kq} \delta_t F_j^{[k,q]} \right] \tag{2b}

需要强调, 计算动量 ρu\rho\boldsymbol{u} 所用的系数 {aˉkq,bˉkq}\{\bar{a}_{kq}, \bar{b}_{kq}\} 和式(1)里所用的那套不一样.

式(1)和中心差分方法的联系

若对一个空间内的函数 g(x)g(\boldsymbol{x}) 沿着 cj\boldsymbol{c}_j 方向做差分 (记 cjˉ=−cj\boldsymbol{c}_{\bar{j}} = - \boldsymbol{c}_j), 则记:

  • 一阶空间中心差分算符: Δj,k(1)g(x)=g(x+kcjδt)−g(x−kcjδt)\Delta_{j,k}^{(1)} g(\boldsymbol{x}) = g(\boldsymbol{x} + k \boldsymbol{c}_j \delta_t) - g(\boldsymbol{x} - k \boldsymbol{c}_j \delta_t); 且 Δj(1)g(x)=Δj,1(1)g(x)\Delta_{j}^{(1)} g(\boldsymbol{x}) = \Delta_{j,1}^{(1)} g(\boldsymbol{x}).
  • 二阶空间中心差分算符: Δj,k(2)g(x)=g(x+kcjδt)−g(x)+g(x−kcjδt)\Delta_{j,k}^{(2)} g(\boldsymbol{x}) = g(\boldsymbol{x} + k \boldsymbol{c}_j \delta_t) - g(\boldsymbol{x}) + g(\boldsymbol{x} - k \boldsymbol{c}_j \delta_t); 且 Δj(2)g(x)=Δj,1(2)g(x)\Delta_{j}^{(2)} g(\boldsymbol{x}) = \Delta_{j,1}^{(2)} g(\boldsymbol{x}).

我们便可发现: g(x±kcjδt)=(Δj,k(2)±Δj,k(1)+g(x))/2g(\boldsymbol{x} \pm k \boldsymbol{c}_j \delta_t) = (\Delta_{j,k}^{(2)} \pm \Delta_{j,k}^{(1)} + g(\boldsymbol{x})) / 2

那么式(1)要进一步改写为:

fj(x,t)=∑k,qakq[1+(Δj,k(2)+Δj,k(1))/2]fjeq(x,t+qδt)+δt∑k,qbkq[1+(Δj,k(2)+Δj,k(1))/2]Fj(x,t+qδt)\begin{aligned} f_j (\boldsymbol{x}, t) =& \sum_{k,q} a_{kq} [1 + (\Delta_{j,k}^{(2)} + \Delta_{j,k}^{(1)})/2] f_j^{eq}(\boldsymbol{x}, t+q\delta_t) + \\& \delta_t \sum_{k,q} b_{kq} [1 + (\Delta_{j,k}^{(2)} + \Delta_{j,k}^{(1)})/2] F_j (\boldsymbol{x}, t+q\delta_t) \end{aligned}

算法框架

这个算法其实也比较容易. 假定已有 tt 时刻的数据, 需要前推到 t+δtt+\delta_t 时刻. 下面也就只简单介绍这个单步过程.

(1) 对网格点 x\boldsymbol{x}, 通过它的宏观物理量去计算平衡态 fjeq(x,t)f_j^{eq}(\boldsymbol{x}, t) 和 外力项 Fj(x,t)F_j(\boldsymbol{x}, t). [具体公式详见原文的第III.C节, 这里不做介绍]

(2) 用式(1)计算所有点的 fjf_j.

(3) 用式(2)更新宏观物理量.

(4) 施加边界条件.

MesoFD 的直接 Taylor 展开

单个分量的分析

下面讨论对式(1)直接 Taylor 展开的分析, 并最高展开至 N≥1N \geq 1 阶后做截断.

记 Taylor 展开算子

Dk,q=q∂t+k∇⋅cjD_{k,q} = q \partial_{t} + k \nabla \cdot \boldsymbol{c}_{j}

那么 fjeq,[k,q]f_j^{eq,[k,q]} 和 Fj[k,q]F_j^{[k,q]} 分别展开成

fjeq(x+kcjδt,t+qδt)=∑l=0N(δt)ll!Dk,qlfjeq(x,t)+O((δt)N+1)f_j^{eq}(\boldsymbol{x}+k\boldsymbol{c}_j \delta_t, t+q\delta_t) = \sum_{l=0}^{N} \frac{(\delta_{t})^l}{l!} D_{k,q}^l f_j^{eq}(\boldsymbol{x}, t) + O((\delta_{t})^{N+1})

和

Fj(x+kcjδt,t+qδt)=∑l=0N(δt)ll!Dk,qlFj(x,t)+O((δt)N+1)F_j(\boldsymbol{x}+k\boldsymbol{c}_j \delta_t, t+q\delta_t) = \sum_{l=0}^{N} \frac{(\delta_{t})^l}{l!} D_{k,q}^l F_j(\boldsymbol{x}, t) + O((\delta_{t})^{N+1})

考虑到算子 Dk,qD_{k,q} 高阶导表示为

Dk,ql=(q∂t+k∇⋅cj)l=∑m=0lClm (q∂t)l−m (k∇⋅cj)m,Clm=l!/(m!(l−m)!)\begin{aligned} D_{k,q}^{l} &= (q \partial_{t} + k \nabla \cdot \boldsymbol{c}_{j})^l = \sum_{m=0}^{l} C_l^m \, (q \partial_{t})^{l-m} \, (k\nabla \cdot \boldsymbol{c}_j)^m ,\\ C_l^m &= l! / (m! (l-m)!) \end{aligned}

那么, 我们把和空间、时间有关的系数部分提取出来

Alm=Clml!∑k,qakqql−mkm,Blm=Clml!∑k,qbkqql−mkmA_{lm} = \frac{C_l^m}{l!} \sum_{k,q} a_{kq} q^{l-m} k^{m} ,\quad B_{lm} = \frac{C_l^m}{l!} \sum_{k,q} b_{kq} q^{l-m} k^{m}

则式(1)的展开要写作:

fj(x,t)=∑l=0N(δt)l∑m=0l[Alm∂tl−m(∇⋅cj)mfjeq+δtBlm∂tl−m(∇⋅cj)mFj]+O((δt)N+1)(3)f_j (\boldsymbol{x},t) = \sum_{l=0}^{N} (\delta_t)^l \sum_{m=0}^{l} \left[ A_{lm} \partial_{t}^{l-m} (\nabla \cdot \boldsymbol{c}_j)^m f_j^{eq} + \delta_t B_{lm} \partial_{t}^{l-m} (\nabla \cdot \boldsymbol{c}_j)^m F_j \right] + O((\delta_{t})^{N+1}) \tag{3}

其中 fjeq=fjeq(x,t)f_j^{eq} = f_j^{eq}(\boldsymbol{x},t), Fj=Fj(x,t)F_j = F_j(\boldsymbol{x},t).

取 N=2N=2 , 由于 FjF_j 部分在 l=2l=2 时直接到了 O(δt3)O(\delta_t^3) 量级, 我们得到

fj(x,t)=A00fjeq+δtB00Fj⏟l=0+δt(A10∂t+A11∇⋅cj)fjeq+δt2(B10∂t+B11∇⋅cj)Fj⏟l=1+δt2[A20∂t2+A21∂t (∇⋅cj)+A22(∇⋅cj)2]fjeq⏟l=2 (feq part)+O(δt3)\begin{aligned} f_j (\boldsymbol{x},t) =& \underbrace{A_{00} f_j^{eq} + \delta_t B_{00} F_j}_{l=0} \\& + \underbrace{\delta_t (A_{10} \partial_t + A_{11} \nabla \cdot \boldsymbol{c}_j) f_j^{eq} + \delta_t^2 (B_{10} \partial_t + B_{11} \nabla \cdot \boldsymbol{c}_j) F_j}_{l=1} \\& +\underbrace{\delta_t^2 [A_{20} \partial_t^2 + A_{21} \partial_t \, (\nabla \cdot \boldsymbol{c}_j) + A_{22} (\nabla \cdot \boldsymbol{c}_j)^2] f_j^{eq} }_{l=2 \,(f^{eq} \text{ part})} \\& + O(\delta_t^3) \end{aligned}

分布函数的速度矩

这里我们写列出 k 阶速度矩的表达式:

M0=∑jfjeq=∑jfj,M0F=∑jFj,M1=∑jcjfjeq,M1F=∑jcjFj,Mk=∑jcj…cj⏟kfjeq,MkF=∑jcj…cj⏟kFj,(k>1)\begin{aligned} M_0 &= \sum_j f_j^{eq} = \sum_j f_j ,& M_{0F} &= \sum_j F_j, \\ M_1 &= \sum_j \boldsymbol{c}_j f_j^{eq},& M_{1F} &= \sum_j \boldsymbol{c}_j F_j, \\ M_k &= \sum_j \underbrace{\boldsymbol{c}_j \dots \boldsymbol{c}_j}_{k} f_j^{eq},& M_{kF} &= \sum_j \underbrace{\boldsymbol{c}_j \dots \boldsymbol{c}_j}_{k} F_j, (k>1)\\ \end{aligned}

按理来说, 只要把这些速度矩也匹配上就能去还原宏观方程.

毕竟我们知道, 对于常用的正方形+对称 DnQb 模型, 如果是还原Navier-Stokes方程, 就有:

  • M0=ρM_0 = \rho.
  • M1=ρuM_1 = \rho \boldsymbol{u}.
  • M2=ρuu+pIM_2 = \rho \boldsymbol{u} \boldsymbol{u} + p \boldsymbol{I}.

不过, 先别急.

让我们注意一下式(3)中的 (∇⋅cj)mfjeq(\nabla \cdot \boldsymbol{c}_j)^m f_j^{eq} 部分 (暂不考虑前面的时间偏导), 如果我们对这部分对所有 jj 进行求和 (零阶速度矩), 就会发现

∑j(∇⋅cj)mfjeq=(∇…∇)⊗∑j(cj…cj⏟kfjeq)=∇m⊗Mm\begin{aligned} \sum_{j} (\nabla \cdot \boldsymbol{c}_j)^m f_j^{eq} &= (\nabla \dots \nabla) \otimes \sum_{j} (\underbrace{\boldsymbol{c}_j \dots \boldsymbol{c}_j}_{k} f_j^{eq}) \\ &= \nabla^{m} \otimes M_{m} \end{aligned}

也就是说, M0M_0 的内部就自然包含了更高的 m 阶矩 MmM_{m} (m=[0,1,..,l]m=[0,1,..,l], l=[0,1,...N]l=[0,1,...N], 且 N≥1N \geq 1). 这个情况对 MkM_k 以及源项部分的矩也是一样的.

将式(3)代入 M0M_0, 可得

M0=A00M0+∑l=1Nδtl∑m=0l[Alm ∂tl−m ∇m⊗Mm]+∑l=0N−1δtl+1∑m=0l[Blm ∂tl−m ∇m⊗MmF]+O(δtl+1)\begin{aligned} M_0 =& A_{00} M_0 + \sum_{l=1}^{N} \delta_{t}^l \sum_{m=0}^{l} [A_{lm} \, \partial_{t}^{l-m} \, \nabla^{m} \otimes M_{m}] \\ & + \sum_{l=0}^{N-1} \delta_{t}^{l+1} \sum_{m=0}^{l} [B_{lm} \, \partial_{t}^{l-m} \, \nabla^{m} \otimes M_{mF}] + O(\delta_{t}^{l+1}) \end{aligned}

令 A00=1A_{00}=1 以消去左右两侧的 M0M_0, 整理得到

∑l=1Nδtl−1∑m=0l[Alm ∂tl−m ∇m⊗Mm]+∑l=0N−1δtl∑m=0l[Blm ∂tl−m ∇m⊗MmF]=O(δtl)(4)\sum_{l=1}^{N} \delta_{t}^{l-1} \sum_{m=0}^{l} [A_{lm} \, \partial_{t}^{l-m} \, \nabla^{m} \otimes M_{m}] + \sum_{l=0}^{N-1} \delta_{t}^l \sum_{m=0}^{l} [B_{lm} \, \partial_{t}^{l-m} \, \nabla^{m} \otimes M_{mF}] = O(\delta_{t}^l) \tag{4}

同理, 将式(3)代入 M1M_1, 可得

M1=Aˉ00M1+∑l=1Nδtl∑m=0l[Aˉlm ∂tl−m ∇m⊗Mm]+∑l=0N−1δtl+1∑m=0l[Bˉlm ∂tl−m ∇m⊗MmF]+O(δtl+1)\begin{aligned} M_1 =& \bar{A}_{00} M_1 + \sum_{l=1}^{N} \delta_{t}^l \sum_{m=0}^{l} [\bar{A}_{lm} \, \partial_{t}^{l-m} \, \nabla^{m} \otimes M_{m}] \\ & + \sum_{l=0}^{N-1} \delta_{t}^{l+1} \sum_{m=0}^{l} [\bar{B}_{lm} \, \partial_{t}^{l-m} \, \nabla^{m} \otimes M_{mF}] + O(\delta_{t}^{l+1}) \end{aligned}

其中 Aˉlm,Bˉlm\bar{A}_{lm}, \bar{B}_{lm} 的定义仿照之前的写法:

Aˉlm=Clml!∑k,qaˉkqql−mkm,Bˉlm=Clml!∑k,qbˉkqql−mkm\bar{A}_{lm} = \frac{C_l^m}{l!} \sum_{k,q} \bar{a}_{kq} q^{l-m} k^{m} ,\quad \bar{B}_{lm} = \frac{C_l^m}{l!} \sum_{k,q} \bar{b}_{kq} q^{l-m} k^{m}

令 Aˉ00=1\bar{A}_{00}=1 以消去左右两侧的 M1M_1, 整理得到

∑l=1Nδtl−1∑m=0l[Aˉlm ∂tl−m ∇m⊗Mm+1]+∑l=0N−1δtl∑m=0l[Bˉlm ∂tl−m ∇m⊗M(m+1)F]=O(δtl)(5)\sum_{l=1}^{N} \delta_{t}^{l-1} \sum_{m=0}^{l} [\bar{A}_{lm} \, \partial_{t}^{l-m} \, \nabla^{m} \otimes M_{m+1}] + \sum_{l=0}^{N-1} \delta_{t}^l \sum_{m=0}^{l} [\bar{B}_{lm} \, \partial_{t}^{l-m} \, \nabla^{m} \otimes M_{(m+1)F}] = O(\delta_{t}^l) \tag{5}

【1】对于式(4), 当 N=1N=1 时, 则:

A10∂tM0+A11∇⋅M1=−B00M0F+O(δt)(6a)A_{10} \partial_{t} M_0 + A_{11} \nabla \cdot M_1 = - B_{00} M_{0F} + O(\delta_t) \tag{6a}

当 N=2N=2 时, 则:

(A10∂tM0+A11∇⋅M1)+δt[A20∂t2M0+A21∂t∇⋅M1+A22∇∇:M2]=−B00M0F−δt(B10∂tM0F+B11∇⋅M1F)+O(δt2)(6b)\begin{aligned} ( A_{10} \partial_{t} M_0 + A_{11} \nabla \cdot M_1 ) &+ \delta_t [ A_{20} \partial_{t}^2 M_0 + A_{21} \partial_{t} \nabla \cdot M_1 + A_{22} \nabla\nabla : M_2 ] \\ & = -B_{00} M_{0F} - \delta_t (B_{10} \partial_{t} M_{0F} + B_{11} \nabla \cdot M_{1F}) + O(\delta_t^2) \end{aligned} \tag{6b}

【2】对于式(5), 当 N=1N=1 时, 则:

Aˉ10∂tM1+Aˉ11∇⋅M2=−Bˉ00M1F+O(δt)(7a)\bar{A}_{10} \partial_{t} M_1 + \bar{A}_{11} \nabla \cdot M_2 = -\bar{B}_{00} M_{1F} + O(\delta_t) \tag{7a}

当 N=2N=2 时, 则:

(Aˉ10∂tM1+Aˉ11∇⋅M2)+δt[Aˉ20∂t2M1+Aˉ21∂t∇⋅M2+Aˉ22∇∇:M3]=−Bˉ00M1F−δt(Bˉ10∂tM1F+Bˉ11∇⋅M2F)+O(δt2)(7b)\begin{aligned} ( \bar{A}_{10} \partial_{t} M_1 + \bar{A}_{11} \nabla \cdot M_2 ) &+ \delta_t [ \bar{A}_{20} \partial_{t}^2 M_1 + \bar{A}_{21} \partial_{t} \nabla \cdot M_2 + \bar{A}_{22} \nabla\nabla : M_3 ] \\ & = -\bar{B}_{00} M_{1F} - \delta_t (\bar{B}_{10} \partial_{t} M_{1F} + \bar{B}_{11} \nabla \cdot M_{2F}) + O(\delta_t^2) \end{aligned} \tag{7b}

Shi et al. 做出下面代换来简化式(6-7), 这些代换在下文会用到:

  • A10=A11=−B00A_{10} = A_{11} = - B_{00},
  • Aˉ10=Aˉ11=−Bˉ00\bar{A}_{10} = \bar{A}_{11} = - \bar{B}_{00},
  • S=−B00A10M0F=M0F\displaystyle S = -\frac{B_{00}}{A_{10}} M_{0F} = M_{0F},
  • F=−Bˉ00Aˉ10M1F=M1F\displaystyle \boldsymbol{F} = -\frac{\bar{B}_{00}}{\bar{A}_{10}} M_{1F} = M_{1F}.

与非线性对流扩散方程的匹配 (式(6))

这里我们先把非线性对流扩散方程写出来, 作为参照:

∂tϕ+∇⋅B=S+α∇∇:D+O(δt2)=S+∇⋅[α∇⋅D]+O(δt2)(8)\begin{aligned} \partial_{t} \phi + \nabla \cdot \bold{B} &= \boldsymbol{S} + \alpha \nabla\nabla:\bold{D} + O(\delta_t^2)\\ &= \boldsymbol{S} + \nabla \cdot [\alpha \nabla \cdot \bold{D}] + O(\delta_t^2) \end{aligned} \tag{8}

若我们只考虑 “各向同性”+“不可压缩流” 来降低心智负担, 则

  • ϕ\phi 为输运的守恒量;
  • u\boldsymbol{u} 为 ϕ\phi 的输运速度;
  • α\alpha 为扩散系数 (常数);
  • B=ϕ u\bold{B}=\phi \, \boldsymbol{u} (这里对不可压缩流有 ∇⋅u=0\nabla\cdot\boldsymbol{u}=0 , 所以 ∇⋅B=u⋅∇ϕ\nabla\cdot\bold{B}=\boldsymbol{u}\cdot\nabla\phi);
  • D=ϕ [I]\bold{D}=\phi \, [\bold{I}].
  • S\boldsymbol{S} 为源项向量.

式(6)可化简为

∂tM0+∇⋅M1=S+O(δt)(9a)\partial_{t} M_0 + \nabla \cdot M_1 = S + O(\delta_t) \tag{9a}

(∂tM0+∇⋅M1)+δtA10[A20∂t2M0+A21∂t∇⋅M1+A22∇∇:M2]=S−δtA10(B10∂tM0F+B11∇⋅M1F)+O(δt2)(9b)\begin{aligned} ( \partial_{t} M_0 + \nabla \cdot M_1 ) &+ \frac{\delta_t}{A_{10}} [ A_{20} \partial_{t}^2 M_0 + A_{21} \partial_{t} \nabla \cdot M_1 + A_{22} \nabla\nabla : M_2 ] \\ & = S - \frac{\delta_t}{A_{10}} (B_{10} \partial_{t} M_{0F} + B_{11} \nabla \cdot M_{1F}) + O(\delta_t^2) \end{aligned} \tag{9b}

而 ∂t2M0\partial_{t}^2 M_0 可以由式(9a)的时间偏导表示, 这就和 Chapman-Enskog 展开那套东西比较相似: 高阶矩的计算需要借用低阶矩的方程来化简.

∂t2M0=−∂t∇⋅M1+∂tS+O(δt)\partial_{t}^2 M_0 = - \partial_{t} \nabla \cdot M_1 + \partial_{t} S + O(\delta_t)

则式(9b)可以进一步化简为

(∂tM0+∇⋅M1)+δtA10(B10+A20)∂tS=S−δtA10[(A21−A20)∂t∇⋅M1+B11∇⋅M1F+A22∇∇:M2]+O(δt2)(9c)\begin{aligned} ( \partial_{t} M_0 + \nabla \cdot M_1 ) &+ \frac{\delta_t}{A_{10}} (B_{10} + A_{20}) \partial_{t}S \\ & = S - \frac{\delta_t}{A_{10}} [(A_{21} - A_{20}) \partial_{t} \nabla \cdot M_1 \\ &\quad + B_{11} \nabla \cdot M_{1F} + A_{22} \nabla\nabla : M_2] \\ &\quad + O(\delta_t^2) \end{aligned} \tag{9c}

令 (B10+A20)∂tS=0(B_{10} + A_{20}) \partial_{t}S = 0 , 对比式(9c)和非线性对流扩散方程(式(8)), 我们现在就可以开始做参数匹配了:

M0=ϕ, M1=B, M2=βcs2D+C, α=−A22A10δtβcs2,M1F=−[(A21−A20)∂tB+A22∇⋅C]\begin{aligned} M_0 = \phi, \, M_1 &= \bold{B}, \, M_2 = \beta c_s^2 \bold{D} + \bold{C}, \, \alpha = -\frac{A_{22}}{A_{10}} \delta_t \beta c_s^2 ,\\ M_{1F} &= -[(A_{21} - A_{20}) \partial_{t}\bold{B} + A_{22} \nabla\cdot\bold{C}] \end{aligned}

这里和 C\bold{C} 有关的部分用于消除式(8c)中的 A22∇∇:M2A_{22} \nabla\nabla : M_2 项.

与Navier-Stokes方程的匹配 (式(6) + 式(7))

首先, 式(6)的二阶结果即为式(9c). 这里只需要结合式(7)的二阶结果, 再和Navier-Stokes方程组进行参数匹配即可. 所以下面主要讨论式(7).

式(7)可化简为

∂tM1+∇⋅M2=F+O(δt)(10a)\partial_{t} M_1 +\nabla \cdot M_2 = \boldsymbol{F} + O(\delta_t) \tag{10a}

(∂tM1+∇⋅M2)+δtAˉ10[Aˉ20∂t2M1+Aˉ21∂t∇⋅M2+Aˉ22∇∇:M3]=F−δtAˉ10(Bˉ10∂tF+Bˉ11∇⋅M2F)+O(δt2)(10b)\begin{aligned} ( \partial_{t} M_1 + \nabla \cdot M_2 ) &+ \frac{\delta_t}{\bar{A}_{10}} [ \bar{A}_{20} \partial_{t}^2 M_1 + \bar{A}_{21} \partial_{t} \nabla \cdot M_2 + \bar{A}_{22} \nabla\nabla : M_3 ] \\ & = \boldsymbol{F} - \frac{\delta_t}{\bar{A}_{10}} (\bar{B}_{10} \partial_{t} \boldsymbol{F} + \bar{B}_{11} \nabla \cdot M_{2F}) + O(\delta_t^2) \end{aligned} \tag{10b}

同理, 用式(10a)表示 ∂t2M1\partial_{t}^2 M_1, 即:

∂t2M1=−∂t∇⋅M2+∂tF+O(δt)\partial_{t}^2 M_1 = -\partial_{t} \nabla \cdot M_2 + \partial_{t}\boldsymbol{F} + O(\delta_t)

再次代入式(10b)进行化简, 得到:

(∂tM1+∇⋅M2)+δtAˉ10(Bˉ10∂tF+Aˉ20∂tF)=F−δtAˉ10[(Aˉ21−Aˉ20)∂t∇⋅M2+Bˉ11∇⋅M2F+Aˉ22∇∇:M3]+O(δt2)(10c)\begin{aligned} ( \partial_{t} M_1 + \nabla \cdot M_2 ) &+ \frac{\delta_t}{\bar{A}_{10}} (\bar{B}_{10} \partial_{t}\boldsymbol{F} + \bar{A}_{20} \partial_{t}\boldsymbol{F}) \\ & = \boldsymbol{F} - \frac{\delta_t}{\bar{A}_{10}} [(\bar{A}_{21} - \bar{A}_{20}) \partial_{t} \nabla \cdot M_2 \\ &\quad + \bar{B}_{11} \nabla \cdot M_{2F} + \bar{A}_{22} \nabla\nabla : M_3] \\ &\quad + O(\delta_t^2) \end{aligned} \tag{10c}

【1】对于式(6)的二阶结果(即式(9c)), 再次利用式(10a), 可得

∂t∇⋅M1=−∇∇:M2+∇⋅F+O(δt)\partial_{t} \nabla \cdot M_1 = -\nabla \nabla : M_2 + \nabla \cdot \boldsymbol{F} + O(\delta_t)

再令 −B11F=(A21−A20)F-B_{11} \boldsymbol{F} = (A_{21} - A_{20}) \boldsymbol{F} 和 (B10+A20)∂tS=0(B_{10} + A_{20}) \partial_{t}S = 0, 全部代入到式(9c)中, 得到

∂tM0+∇⋅M1=S−δtA10[(A22−(A21−A20))∇∇:M2]+O(δt2)(11a)\partial_{t} M_0 + \nabla\cdot M_1 = S - \frac{\delta_t}{A_{10}} [(A_{22} - (A_{21} - A_{20}))\nabla \nabla : M_2] + O(\delta_t^2) \tag{11a}

式(11a)将用于匹配连续性方程.

【2】对于式(7)的二阶结果(即式(10c))

令 (Bˉ10∂tF+Aˉ20∂tF)=0(\bar{B}_{10} \partial_{t}\boldsymbol{F} + \bar{A}_{20} \partial_{t}\boldsymbol{F}) = 0, 得到

(∂tM1+∇⋅M2)=F−δtAˉ10[(Aˉ21−Aˉ20)∂t∇⋅M2+Bˉ11∇⋅M2F+Aˉ22∇∇:M3]+O(δt2)(11b)\begin{aligned} ( \partial_{t} M_1 + \nabla \cdot M_2 ) & = \boldsymbol{F} - \frac{\delta_t}{\bar{A}_{10}} [(\bar{A}_{21} - \bar{A}_{20}) \partial_{t} \nabla \cdot M_2 \\ &\quad + \bar{B}_{11} \nabla \cdot M_{2F} + \bar{A}_{22} \nabla\nabla : M_3] \\ &\quad + O(\delta_t^2) \end{aligned} \tag{11b}

式(11a)将用于匹配Navier-Stokes方程.

【3】 针对式(11a)和式(11b), 我们需要给出如下参数匹配

M0=ρ,M1=ρu,M2=ρuu+pI,M3=cs2ρuI+M30,M2F=−1Bˉ11[(Aˉ21−Aˉ20)∂tM2+Aˉ22(∇⋅M30+(∇⋅ρuI+u∇ρ+(u∇ρ)T)cs2 )]\begin{aligned} M_0 &= \rho , \\ M_1 &= \rho \bold{u} , \\ M_2 &= \rho \bold{u} \bold{u} + p \bold{I} , \\ M_3 &= c_s^2 \rho \bold{u} \bold{I} + M_{30} , \\ M_{2F} &= \frac{-1}{\bar{B}_{11}} [(\bar{A}_{21} - \bar{A}_{20}) \partial_{t} M_2 + \bar{A}_{22} ( \nabla \cdot M_{30} + \\&\quad (\nabla \cdot \rho \bold{u} \bold{I} + \bold{u} \nabla\rho + (\bold{u} \nabla\rho)^{T}) c_s^2 \, )] \\ \end{aligned}

且运动粘度 ν=Aˉ22Aˉ10δtcs2\nu = \frac{\bar{A}_{22}}{\bar{A}_{10}} \delta_t c_s^2. 则式(11a)和式(11b)被转化为Navier-Stokes方程组

∂tρ+∇⋅(ρu)=S−δtA10[(A22−(A21−A20))∇∇:M2]+O(δt2)∂t(ρu)+∇⋅(ρuu+pI)=F+ν∇⋅ρ[∇u+(∇u)T]+O(δt2)\begin{aligned} \partial_t \rho + \nabla \cdot (\rho \boldsymbol{u}) &= S - \frac{\delta_t}{A_{10}} [(A_{22} - (A_{21} - A_{20}))\nabla \nabla : M_2] + O(\delta_t^2) \\ \partial_t (\rho \boldsymbol{u}) + \nabla \cdot (\rho \boldsymbol{u}\boldsymbol{u} + p \bold{I}) &= \boldsymbol{F} + \nu \nabla \cdot \rho [\nabla\boldsymbol{u} + (\nabla\boldsymbol{u})^T] + O(\delta_t^2) \\ \end{aligned}

注:

  1. Shi et al. 原文式(61a)写的 M3=cs2Δ⋅ρu+M30M_3 = c_s^2 \Delta \cdot \rho \bold{u} + M_{30} 表达式有误 —— 拉普拉斯算子 Δ\Delta 没法点乘在一个矢量 ρu\rho \boldsymbol{u} 上.
  2. 这里的 uI\bold{u} \bold{I} 展开后应该是 uαδβγ+uβδαγ+uγδαβu_{\alpha} \delta_{\beta\gamma} + u_{\beta} \delta_{\alpha\gamma} + u_{\gamma} \delta_{\alpha\beta}.
  3. p=cs2ρp = c_s^2 \rho.