人工压缩性方法(ACM),主要用于求解不可压缩定常流问题。

人工压缩性方程

考虑无量纲化的二维不可压缩方程组

\[ \begin{aligned} \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u}\cdot \nabla) \mathbf{u} &= -\nabla p + \frac{1}{Re} \nabla^2 \mathbf{u}\\ \nabla \cdot \mathbf{u} &= 0\\ \end{aligned} \]

由于缺少\(\frac{\partial p}{\partial t}\),难以计算压强,因此引入人工压缩性因子\(\beta >0\),使得连续性方程替换为人工压缩性方程:

\[ \frac{\partial p}{\partial t} + \beta \nabla \cdot \mathbf{u} = 0 \]

这里的人工压缩性因子\(\beta\) 相当于声速的平方\(c^2\),也可以从物理的角度进行理解,在\(\beta >0\)时:

  • 当流动在一点处压缩时,\(\nabla \cdot \mathbf{u} < 0\),该点的压力会升高,\(\frac{\partial p}{\partial t} >0\)
  • 当流动在一点处膨胀时,\(\nabla \cdot \mathbf{u} > 0\),该点的压力会降低,\(\frac{\partial p}{\partial t} < 0\)

从而得到方程组

\[ \begin{aligned} \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u}\cdot \nabla) \mathbf{u} &= -\nabla p + \frac{1}{Re} \nabla^2 \mathbf{u}\\ \frac{\partial p}{\partial t} + \beta \nabla \cdot \mathbf{u} &= 0 \end{aligned} \]

这个方程组只有在达到定常态的时候,才满足\(\nabla \cdot \mathbf{u}=0\),因此适合求解定常流问题。增大\(\beta\)可以使得压力的收敛更快,但是会增加方程的刚性,降低时间步长。

计算流程

定常问题

对于定常问题,我们不关心中间过程的计算精度,只需要迭代(时间推进)到满足收敛的判断条件,例如取定足够小的 \(\epsilon >0\),要求

\[ \max(\Vert \mathbf{u}^{n+1}-\mathbf{u}^n \Vert,\Vert p^{n+1}-p^n\Vert) \le \epsilon \]

最终达到稳态,同时满足了不可压缩条件 \(\nabla \cdot \mathbf{u}=0\)

非定常问题

对于非定常问题,在时间推进之间,需要加入内迭代,计算效率较低,通常不建议使用 ACM 计算非定常问题。

例如对方程组使用如下显式格式进行离散:

\[ \begin{aligned} \frac{\mathbf{u}^{n+1}-\mathbf{u}^n}{\Delta t} + (\mathbf{u}^n\cdot \nabla) \mathbf{u}^n &= -\nabla p ^n+ \frac{1}{Re} \nabla^2 \mathbf{u}^n\\ \frac{p^{n+1}-p^n}{\Delta t} + \beta \nabla \cdot \mathbf{u}^n &= 0 \end{aligned} \]

则完整的求解需要使用如下步骤:

  • \(t^n\)时刻的第 n 步\(\mathbf{u}^n\)出发,
  • 进入内迭代:
    • \(\mathbf{u}^{n+1,0}=\mathbf{u}^n\),记\(p^{n+1,0}=p^n\),(或者压强以一个猜测值开始迭代,应该也可以)
    • 计算\(\mathbf{u}^{n+1,k},\cdots\),以及\(p^{n+1,k},\cdots\)满足下式 \[ \begin{aligned} \frac{\mathbf{u}^{n+1,k+1}-\mathbf{u}^{n+1,k}}{\Delta t} + (\mathbf{u}^n\cdot \nabla) \mathbf{u}^n &= -\nabla p^{n+1,k}+ \frac{1}{Re} \nabla^2 \mathbf{u}^n\\ \frac{p^{n+1,k+1}-p^{n+1,k}}{\Delta t} + \beta \nabla \cdot \mathbf{u}^{n+1,k} &= 0 \end{aligned} \]
    • 不断迭代,直到满足类似定常流的收敛判断条件,记作\(\mathbf{u}^{n+1,k_n},p^{n+1,k_n}\)
  • 将内收敛得到的速度和压强作为\(t^{n+1}\)时刻的速度和压强,\(\mathbf{u}^{n+1}=\mathbf{u}^{n+1,k_n}\)\(p^{n+1}=p^{n+1,k_n}\)

注:以上内迭代的公式来自李新亮的计算流体力学 PPT,但是似乎应该像下面这样更合理?

\[ \begin{aligned} \frac{\mathbf{u}^{n+1,k+1}-\mathbf{u}^{n}}{\Delta t} + (\mathbf{u}^n\cdot \nabla) \mathbf{u}^n &= -\nabla p^{n+1,k}+ \frac{1}{Re} \nabla^2 \mathbf{u}^n\\ \frac{p^{n+1,k+1}-p^{n+1,k}}{\Delta t} + \beta \nabla \cdot \mathbf{u}^{n+1,k} &= 0 \end{aligned} \]