突然想到这个问题,找了一下资料,发现John D Anderson的《计算流体力学基础与应用》中详细阐述了这个问题。书中指出:
在20世纪80年代之前,一般的流体力学和空气动力学教科书中都没有提到过这个问题,作者怀疑能否在这些书中找到关于守恒形式和非守恒形式对比的论述。方程放在那儿,但是并没有用特别的名词对它们加以区分。将控制方程分为守恒形式和非守恒形式,同时还关心对于给定的CFD问题,应该使用哪一种形式,这些都来源于现代CFD。
简单点儿说,控制方程的守恒和非守恒形式本质上是相同的,数学上也是等价的,描述的也是相同的物理过程,搞理论流体力学和搞数学推导的根本不会关心这个问题。真正关心这个问题的是CFD,因为实践证明守恒形式的方程在数值计算中比非守恒形式更方便、更稳定。
守恒形式的方程在CFD中体现出的优势主要有以下两点:
1. 守恒形式的控制方程为算法设计和编程计算提供了方便。
守恒形式的控制方程:
∂
ρ
∂
t
+
∇
⋅
(
ρ
V
)
=
0
(1.1)
\frac{\partial \rho}{\partial t} + \nabla \cdot (\rho \bm V)=0 \tag{1.1}
∂t∂ρ+∇⋅(ρV)=0(1.1)
∂
(
ρ
u
)
∂
t
+
∇
⋅
(
ρ
u
V
)
=
−
∂
p
∂
x
+
∂
τ
x
x
∂
x
+
∂
τ
y
x
∂
y
+
∂
τ
z
x
∂
z
+
ρ
f
x
(1.2a)
\frac{\partial \left ( \rho u \right )}{\partial t} + \nabla \cdot \left ( \rho u \bm V \right ) = - \frac{\partial p}{\partial x} + \frac{\partial \tau_{xx}}{\partial x} + \frac{\partial \tau_{yx}}{\partial y} + \frac{\partial \tau_{zx}}{\partial z} + \rho f_x \tag{1.2a}
∂t∂(ρu)+∇⋅(ρuV)=−∂x∂p+∂x∂τxx+∂y∂τyx+∂z∂τzx+ρfx(1.2a)
∂ ( ρ v ) ∂ t + ∇ ⋅ ( ρ v V ) = − ∂ p ∂ y + ∂ τ x y ∂ x + ∂ τ y y ∂ y + ∂ τ z y ∂ z + ρ f y (1.2b) \frac{\partial \left ( \rho v \right )}{\partial t} + \nabla \cdot \left ( \rho v \bm V \right ) = - \frac{\partial p}{\partial y} + \frac{\partial \tau_{xy}}{\partial x} + \frac{\partial \tau_{yy}}{\partial y} + \frac{\partial \tau_{zy}}{\partial z} + \rho f_y \tag{1.2b} ∂t∂(ρv)+∇⋅(ρvV)=−∂y∂p+∂x∂τxy+∂y∂τyy+∂z∂τzy+ρfy(1.2b)
∂
(
ρ
w
)
∂
t
+
∇
⋅
(
ρ
w
V
)
=
−
∂
p
∂
z
+
∂
τ
x
z
∂
x
+
∂
τ
y
z
∂
y
+
∂
τ
z
z
∂
z
+
ρ
f
z
(1.2c)
\frac{\partial \left ( \rho w \right )}{\partial t} + \nabla \cdot \left ( \rho w \bm V \right ) = - \frac{\partial p}{\partial z} + \frac{\partial \tau_{xz}}{\partial x} + \frac{\partial \tau_{yz}}{\partial y} + \frac{\partial \tau_{zz}}{\partial z} + \rho f_z \tag{1.2c}
∂t∂(ρw)+∇⋅(ρwV)=−∂z∂p+∂x∂τxz+∂y∂τyz+∂z∂τzz+ρfz(1.2c)
∂
∂
t
[
ρ
(
e
+
V
2
2
)
]
+
∇
⋅
[
ρ
(
e
+
V
2
2
)
]
=
ρ
q
+
∂
∂
x
(
k
∂
T
∂
x
)
+
∂
∂
y
(
k
∂
T
∂
y
)
+
∂
∂
z
(
k
∂
T
∂
z
)
−
∂
(
u
p
)
∂
x
−
∂
(
v
p
)
∂
y
−
∂
(
w
p
)
∂
z
+
∂
(
u
τ
x
x
)
∂
x
+
∂
(
u
τ
y
x
)
∂
y
+
∂
(
u
τ
z
x
)
∂
z
+
∂
(
u
τ
x
y
)
∂
x
+
∂
(
u
τ
y
y
)
∂
y
+
∂
(
u
τ
z
y
)
∂
z
+
∂
(
u
τ
x
z
)
∂
x
+
∂
(
u
τ
y
z
)
∂
y
+
∂
(
u
τ
z
z
)
∂
z
+
ρ
f
⋅
V
(1.3)
\begin{aligned} & \frac{\partial}{\partial t} \left [ \rho \left ( e + \frac{ V ^2}{2} \right ) \right ] + \nabla \cdot \left [ \rho \left ( e+ \frac{V^2}{2}\right ) \right ] \\ = & \rho q + \frac{\partial }{\partial x} \left( k \frac{\partial T}{\partial x}\right ) + \frac{\partial }{\partial y} \left( k \frac{\partial T}{\partial y}\right ) + \frac{\partial }{\partial z} \left( k \frac{\partial T}{\partial z}\right ) - \frac{\partial (u p)}{\partial x}- \frac{\partial (v p)}{\partial y}- \frac{\partial (w p)}{\partial z} + \\ &\frac{\partial (u \tau_{xx})}{\partial x} + \frac{\partial (u \tau_{yx})}{\partial y} + \frac{\partial (u \tau_{zx})}{\partial z} + \frac{\partial (u \tau_{xy})}{\partial x} + \frac{\partial (u \tau_{yy})}{\partial y} + \frac{\partial (u \tau_{zy})}{\partial z} + \\ &\frac{\partial (u \tau_{xz})}{\partial x} + \frac{\partial (u \tau_{yz})}{\partial y} + \frac{\partial (u \tau_{zz})}{\partial z} + \rho \bm f \cdot \bm V \tag{1.3} \end{aligned}
=∂t∂[ρ(e+2V2)]+∇⋅[ρ(e+2V2)]ρq+∂x∂(k∂x∂T)+∂y∂(k∂y∂T)+∂z∂(k∂z∂T)−∂x∂(up)−∂y∂(vp)−∂z∂(wp)+∂x∂(uτxx)+∂y∂(uτyx)+∂z∂(uτzx)+∂x∂(uτxy)+∂y∂(uτyy)+∂z∂(uτzy)+∂x∂(uτxz)+∂y∂(uτyz)+∂z∂(uτzz)+ρf⋅V(1.3)
守恒形式的控制方程可以用同一个通用方程来表达,这有助于计算程序的简化和程序结构的组织。从方程式
(
1.1
)
(1.1)
(1.1)~
(
1.3
)
(1.3)
(1.3)可见,等号左边第一项是时间偏导项,第二项是一个散度项。观察这些守恒形式的方程,我们注意到它们有相同的通用形式,即
∂
U
∂
t
+
∂
F
∂
x
+
∂
G
∂
y
+
∂
H
∂
z
=
J
(1.4)
\frac{\partial \bm U}{\partial t} + \frac{\partial \bm F}{\partial x} +\frac{\partial \bm G}{\partial y} +\frac{\partial \bm H}{\partial z} = \bm J \tag{1.4}
∂t∂U+∂x∂F+∂y∂G+∂z∂H=J(1.4)
如果将
U
、
F
、
G
、
H
\bm U 、\bm F 、\bm G、 \bm H
U、F、G、H和
J
\bm J
J看成列向量,方程
(
1.4
)
(1.4)
(1.4)就可以代表整个守恒形式的控制方程组,这些列向量为
U
=
{
ρ
ρ
u
ρ
v
ρ
w
ρ
(
e
+
V
2
2
)
}
(1.5)
\bm U = \left \{ \begin{matrix} \rho \\ \\ \rho u \\ \\ \rho v \\ \\ \rho w \\ \\ \rho \left( e + \frac{V^2}{2} \right) \end{matrix} \right \} \tag{1.5}
U=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧ρρuρvρwρ(e+2V2)⎭⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎫(1.5)
F
=
{
ρ
u
ρ
u
2
+
p
−
τ
x
x
ρ
v
u
−
τ
x
y
ρ
w
u
−
τ
x
z
ρ
(
e
+
V
2
2
)
u
+
p
u
−
k
∂
T
∂
x
−
u
τ
x
x
−
v
τ
x
y
−
w
τ
x
z
}
(1.6)
\bm F=\left \{ \begin{matrix} \rho u \\ \\ \rho u^2 + p - \tau_{xx} \\ \\ \rho v u - \tau_{xy} \\ \\ \rho w u - \tau_{xz} \\ \\ \rho \left( e + \frac{V^2}{2} \right) u + pu - k\frac{\partial T}{\partial x} -u\tau_{xx} - v\tau_{xy} -w\tau_{xz} \end{matrix} \right \} \tag{1.6}
F=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧ρuρu2+p−τxxρvu−τxyρwu−τxzρ(e+2V2)u+pu−k∂x∂T−uτxx−vτxy−wτxz⎭⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎫(1.6)
G
=
{
ρ
v
ρ
u
v
−
τ
y
x
ρ
v
2
+
p
−
τ
y
y
ρ
w
v
−
τ
y
z
ρ
(
e
+
V
2
2
)
v
+
p
v
−
k
∂
T
∂
y
−
u
τ
y
x
−
v
τ
y
y
−
w
τ
y
z
}
(1.7)
\bm G=\left \{ \begin{matrix} \rho v \\ \\ \rho uv - \tau_{yx} \\ \\ \rho v^2 + p - \tau_{yy} \\ \\ \rho wv - \tau_{yz} \\ \\ \rho \left( e + \frac{V^2}{2} \right) v + pv - k\frac{\partial T}{\partial y} -u\tau_{yx} - v\tau_{yy} -w\tau_{yz} \end{matrix} \right \} \tag{1.7}
G=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧ρvρuv−τyxρv2+p−τyyρwv−τyzρ(e+2V2)v+pv−k∂y∂T−uτyx−vτyy−wτyz⎭⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎫(1.7)
F
=
{
ρ
w
ρ
u
w
−
τ
z
x
ρ
v
u
−
τ
z
y
ρ
w
2
+
p
−
τ
z
z
ρ
(
e
+
V
2
2
)
w
+
p
w
−
k
∂
T
∂
z
−
u
τ
z
x
−
v
τ
z
y
−
w
τ
z
z
}
(1.8)
\bm F=\left \{ \begin{matrix} \rho w \\ \\ \rho uw - \tau_{zx} \\ \\ \rho vu - \tau_{zy} \\ \\ \rho w^2 +p - \tau_{zz} \\ \\ \rho \left( e + \frac{V^2}{2} \right) w + pw - k\frac{\partial T}{\partial z} -u\tau_{zx} - v\tau_{zy} -w\tau_{zz} \end{matrix} \right \} \tag{1.8}
F=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧ρwρuw−τzxρvu−τzyρw2+p−τzzρ(e+2V2)w+pw−k∂z∂T−uτzx−vτzy−wτzz⎭⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎫(1.8)
J
=
{
0
ρ
f
x
ρ
f
y
ρ
f
z
ρ
(
u
f
x
+
v
f
y
+
w
f
z
)
+
ρ
q
}
(1.9)
\bm J = \left \{ \begin{matrix} 0 \\ \\ \rho f_x \\ \\ \rho f_y \\ \\ \rho f_z \\ \\ \rho \left( uf_x + vf_y + wf_z \right) + \rho q \end{matrix} \right \} \tag{1.9}
J=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧0ρfxρfyρfzρ(ufx+vfy+wfz)+ρq⎭⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎫(1.9)
方程
(
1.4
)
(1.4)
(1.4)中的列向量
F
、
G
、
H
\bm F、 \bm G 、\bm H
F、G、H称为通量项(或通量向量),
J
\bm J
J代表源项,列向量
U
\bm U
U被称为解向量。方程
(
1.4
)
(1.4)
(1.4)实际上就是一个大的列向量方程,代表了整个控制方程。在实际计算过程中,程序求解的是
U
\bm U
U,有了
U
\bm U
U的结果就很容易由
U
\bm U
U计算出原始变量
ρ
、
u
、
v
、
w
\rho、 u、 v、 w
ρ、u、v、w和
e
e
e,公式如下
ρ
=
ρ
u
=
ρ
u
ρ
v
=
ρ
v
ρ
w
=
ρ
w
ρ
e
=
ρ
(
e
+
V
2
2
)
ρ
−
u
2
+
v
2
+
w
2
2
(1.10)
\begin{aligned} \rho &= \rho \\ \\ u &= \frac{\rho u }{\rho} \\ \\ v &= \frac{\rho v }{\rho} \\ \\ w &= \frac{\rho w }{\rho} \\ \\ e &= \frac{\rho \left( e + \frac{V^2}{2}\right )}{\rho} - \frac{u^2+v^2+w^2}{2} \end{aligned} \tag{1.10}
ρuvwe=ρ=ρρu=ρρv=ρρw=ρρ(e+2V2)−2u2+v2+w2(1.10)
2. 在CFD中,对于某些特定算法,一种形式的方程可能成功,而另一种形式的方程就有很大的问题。
例如在激波计算中,对于激波捕捉法,经验表明应该使用守恒形式的控制方程。使用守恒形式,计算出的流场通常是光滑的、稳定的;如果在激波捕捉法中使用非守恒形式,流场的计算结果通常会在激波的上下游表现出不能令人满意的空间振荡,激波还可能出现在错误的位置上,甚至计算也会变得不稳定。相反,对于激波装配法,使用守恒形式和非守恒形式,一般都能得到令人满意的结果。
该部分详细论证请查阅Anderson的书中第
2.10
2.10
2.10节内容。