2025–2026 学年第二学期
北京理工大学 空天科学与技术学院
任杰
真正理解 CFD 的最好方式,是自己实现数值算法并运行计算 - John D. Anderson
流体从 储气室 流入喷管:
喷管结构:

关键假设:


准一维定常流动中,质量流量保持不变:
\[ \dot{m}=\rho V A=\mathrm{const} \]
因此有:
\[ A=\frac{\dot{m}}{\rho V} \]
将速度写成马赫数形式:
\[ V=Ma \]
其中声速为:
\[ a=\sqrt{\gamma RT} \]
由
\[ V=Ma,\qquad a=\sqrt{\gamma RT} \]
可得:
\[ V=M\sqrt{\gamma RT} \]
代入质量守恒关系:
\[ A=\frac{\dot{m}}{\rho M\sqrt{\gamma RT}} \]
利用状态方程:
\[ p=\rho RT \Rightarrow \rho=\frac{p}{RT} \]
由
\[ A=\frac{\dot{m}}{\rho M\sqrt{\gamma RT}} \]
代入
\[ \rho=\frac{p}{RT} \]
得到:
\[ A=\frac{\dot{m}\sqrt{RT}}{pM\sqrt{\gamma}}=\frac{\dot{m}}{M\sqrt{\gamma}}\frac{\sqrt{RT}}{p} \]
对于等熵流动,有:
\[ \frac{T}{T_0} =\left(1+\frac{\gamma-1}{2}M^2\right)^{-1} \]
\[ \frac{p}{p_0} =\left(1+\frac{\gamma-1}{2}M^2\right)^{-\gamma/(\gamma-1)} \]
即:
\[ T=T_0 \left(1+\frac{\gamma-1}{2}M^2\right)^{-1} \]
\[ p=p_0 \left(1+\frac{\gamma-1}{2}M^2\right)^{-\gamma/(\gamma-1)} \]
将等熵关系代入
\[ A=\frac{\dot{m}}{M\sqrt{\gamma}}\frac{\sqrt{RT}}{p}\Rightarrow A= \frac{\dot{m}}{p_0} \sqrt{\frac{RT_0}{\gamma}} \frac{1}{M} \left(1+\frac{\gamma-1}{2}M^2\right)^{\frac{\gamma+1}{2(\gamma-1)}} \]
也即:
\[ A=C\frac{1}{M} \left(1+\frac{\gamma-1}{2}M^2\right)^{\frac{\gamma+1}{2(\gamma-1)}} \]
其中:
\[ C=\frac{\dot{m}}{p_0}\sqrt{\frac{RT_0}{\gamma}} \]
在喉部达到声速时:
\[ M=1 \]
对应面积记为:
\[ A=A^* \]
由
\[ A=C \frac{1}{M} \left(1+\frac{\gamma-1}{2}M^2\right)^{\frac{\gamma+1}{2(\gamma-1)}} \]
令 \(\color{black}{M=1}\),得到:
\[ A^*=C \left(1+\frac{\gamma-1}{2}\right)^{\frac{\gamma+1}{2(\gamma-1)}}\Rightarrow A^*=C\left(\frac{\gamma+1}{2}\right)^{\frac{\gamma+1}{2(\gamma-1)}} \]
由
\[ A=C \frac{1}{M} \left(1+\frac{\gamma-1}{2}M^2\right)^{\frac{\gamma+1}{2(\gamma-1)}} \]
和
\[ A^*=C \left(\frac{\gamma+1}{2}\right)^{\frac{\gamma+1}{2(\gamma-1)}} \]
取比值。
取比值可得:
\[ \frac{A}{A^*}=\frac{1}{M} \left[ \frac{ 1+\frac{\gamma-1}{2}M^2 }{ \frac{\gamma+1}{2} } \right]^{\frac{\gamma+1}{2(\gamma-1)}} \]
整理为:
\[ \frac{A}{A^*}= \frac{1}{M} \left[ \frac{2}{\gamma+1} \left( 1+\frac{\gamma-1}{2}M^2 \right) \right]^{\frac{\gamma+1}{2(\gamma-1)}} \]
两边平方,即得:
\[ \left(\frac{A}{A^*}\right)^2= \frac{1}{M^2} \left[ \frac{2}{\gamma+1} \left( 1+\frac{\gamma-1}{2}M^2 \right) \right]^{\frac{\gamma+1}{\gamma-1}} \]
\[ \left(\frac{A}{A^*}\right)^2= \frac{1}{M^2} \left[ \frac{2}{\gamma+1} \left( 1+\frac{\gamma-1}{2}M^2 \right) \right]^{\frac{\gamma+1}{\gamma-1}} \]
其中:
这个压强比本质上是施加在流动上的一个 边界条件; 在实验中,它通常由入口处的高压气源和/或出口处的抽真空装置提供。
等熵关系:压力比
\[ \frac{p}{p_0} =\left(1+\frac{\gamma-1}{2}M^2\right)^{-\gamma/(\gamma-1)} \]
等熵关系:密度比
\[ \frac{\rho}{\rho_0} =\left(1+\frac{\gamma-1}{2}M^2\right)^{-1/(\gamma-1)} \]
等熵关系:温度比
\[ \frac{T}{T_0} =\left(1+\frac{\gamma-1}{2}M^2\right)^{-1} \]

这些关系表明,随着流速增加:
一维等熵流动面积–速度关系: \[ \frac{dA}{A}=(M^2-1)\frac{dV}{V} \] 超声速区面积增大并不“减速”,因为此时膨胀导致的密度下降更强,为满足 \(\rho V A=\mathrm{const}\),速度 \(V\) 必须继续增大。

本节中,我们将使用 MacCormack 显式方法 对 准一维喷管流 进行数值求解。
需要强调:
👉 该问题本身存在 解析解 (见上面的分析)
👉 这里进行数值求解的目的:
连续方程积分形式:
\[ \frac{\partial}{\partial t}\iiint \rho\,dV+\iint \rho \mathbf{V}\cdot d\mathbf{S}=0 \]
建立控制体,取喷管微元:
体积:
\[ dV=A\,dx \]

\[ \frac{\partial}{\partial t}\iiint \rho\,dV+\iint \rho \mathbf{V}\cdot d\mathbf{S}=0 \]
体积分项为:
\[ \frac{\partial}{\partial t}\iiint \rho\,dV \]
对准一维喷管微元,有:
\[ dV=A\,dx \]
因此:
\[ \frac{\partial}{\partial t}\iiint \rho\,dV = \frac{\partial(\rho A)}{\partial t}dx \]
\[ \frac{\partial}{\partial t}\iiint \rho\,dV+\iint \rho \mathbf{V}\cdot d\mathbf{S}=0 \]
表面积分项(入口):\(-\rho V A\)
表面积分项(出口):\((\rho+d\rho)(V+dV)(A+dA)\)
忽略高阶小量后,出口项展开为:
\[ \rho V A+\rho V\,dA+\rho A\,dV+A V\,d\rho \]
因此表面积分项为:
\[ \iint \rho \mathbf{V}\cdot d\mathbf{S}= \frac{\partial(\rho V A)}{\partial x}dx \]
将体积分项和表面积分项代入:
\[ \frac{\partial}{\partial t}\iiint \rho\,dV+\iint \rho \mathbf{V}\cdot d\mathbf{S}=0 \]
得到:
\[ \frac{\partial(\rho A)}{\partial t}dx + \frac{\partial(\rho V A)}{\partial x}dx =0 \]
两边除以 \(dx\),得到准一维连续方程的守恒形式:
\[ \frac{\partial(\rho A)}{\partial t} +\frac{\partial(\rho V A)}{\partial x}=0 \]
由守恒形式:
\[ \frac{\partial(\rho A)}{\partial t} +\frac{\partial(\rho V A)}{\partial x}=0 \]
由于:
\[ A=A(x),\qquad \frac{\partial A}{\partial t}=0\Rightarrow\frac{\partial(\rho A)}{\partial t} =A\frac{\partial\rho}{\partial t} \]
同时:
\[ \frac{\partial(\rho V A)}{\partial x} =A\frac{\partial(\rho V)}{\partial x} +\rho V\frac{dA}{dx} \]
代入连续方程:
\[ A\frac{\partial\rho}{\partial t} +A\frac{\partial(\rho V)}{\partial x} +\rho V\frac{dA}{dx}=0\Rightarrow \frac{\partial\rho}{\partial t} +\frac{\partial(\rho V)}{\partial x} +\rho V\frac{1}{A}\frac{dA}{dx}=0 \]
利用:
\[ \frac{\partial(\rho V)}{\partial x} =V\frac{\partial\rho}{\partial x} +\rho\frac{\partial V}{\partial x},\qquad \frac{1}{A}\frac{dA}{dx} =\frac{\partial(\ln A)}{\partial x} \]
得到:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ \frac{\partial \rho}{\partial t} +V\frac{\partial \rho}{\partial x} +\rho\frac{\partial V}{\partial x} +\rho V\frac{\partial(\ln A)}{\partial x}=0 } $} \]
动量方程积分形式:
\[ \frac{\partial}{\partial t}\iiint(\rho u)\,dV +\iint(\rho u\mathbf{V})\cdot d\mathbf{S}= -\iint p\,dS_x \]
对于准一维喷管流,轴向速度记为:
\[ u=V \]
类似连续方程的处理,可得:
\[ \frac{\partial(\rho V A)}{\partial t} +\frac{\partial(\rho V^2A)}{\partial x}= -\frac{\partial(pA)}{\partial x} +p\frac{\partial A}{\partial x} \]
由:
\[ \frac{\partial(\rho V A)}{\partial t} +\frac{\partial(\rho V^2A)}{\partial x}= -\frac{\partial(pA)}{\partial x} +p\frac{\partial A}{\partial x} \]
展开并结合连续方程得到:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ \frac{\partial V}{\partial t} +V\frac{\partial V}{\partial x}= -\frac{1}{\gamma} \left( \frac{\partial T}{\partial x} +\frac{T}{\rho}\frac{\partial\rho}{\partial x} \right) } $} \]
能量方程积分形式:
\[ \frac{\partial}{\partial t} \iiint \rho\left(e+\frac{V^2}{2}\right)dV +\iint \rho\left(e+\frac{V^2}{2}\right)\mathbf{V}\cdot dS= -\iint p\mathbf{V}\cdot dS \]
最终得到:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ \frac{\partial T}{\partial t} +V\frac{\partial T}{\partial x}= -(\gamma-1)T \left[ \frac{\partial V}{\partial x} +V\frac{\partial(\ln A)}{\partial x} \right] } $} \]
连续方程:
\[ \frac{\partial \rho}{\partial t} +V\frac{\partial \rho}{\partial x} +\rho\frac{\partial V}{\partial x} +\rho V\frac{\partial(\ln A)}{\partial x}=0 \]
动量方程:
\[ \frac{\partial V}{\partial t} +V\frac{\partial V}{\partial x}= -\frac{1}{\gamma} \left( \frac{\partial T}{\partial x} +\frac{T}{\rho}\frac{\partial \rho}{\partial x} \right) \]
能量方程:
\[ \frac{\partial T}{\partial t} +V\frac{\partial T}{\partial x}= -(\gamma-1)T \left[ \frac{\partial V}{\partial x} +V\frac{\partial(\ln A)}{\partial x} \right] \]
最终得到以\(\rho\)、\(V\)、\(T\)为基本变量的非守恒形式

\[ \frac{\partial \rho}{\partial t} +V\frac{\partial \rho}{\partial x} +\rho\frac{\partial V}{\partial x} +\rho V\frac{\partial(\ln A)}{\partial x}=0 \]
预测步采用 前向差分 计算当前时刻的时间导数。
密度方程:
\[ \left(\frac{\partial \rho}{\partial t}\right)_i^{t}= -V_i^{t}\frac{\rho_{i+1}^{t}-\rho_i^{t}}{\Delta x} -\rho_i^{t}\frac{V_{i+1}^{t}-V_i^{t}}{\Delta x} -\rho_i^{t}V_i^{t}\frac{\ln A_{i+1}-\ln A_i}{\Delta x} \]
\[ \frac{\partial V}{\partial t} +V\frac{\partial V}{\partial x}= -\frac{1}{\gamma} \left( \frac{\partial T}{\partial x} +\frac{T}{\rho}\frac{\partial \rho}{\partial x} \right) \]
速度方程:
\[ \left(\frac{\partial V}{\partial t}\right)_i^{t}= -V_i^{t}\frac{V_{i+1}^{t}-V_i^{t}}{\Delta x} -\frac{1}{\gamma} \left[ \frac{T_{i+1}^{t}-T_i^{t}}{\Delta x} +\frac{T_i^{t}}{\rho_i^{t}} \frac{\rho_{i+1}^{t}-\rho_i^{t}}{\Delta x} \right] \]
\[ \frac{\partial T}{\partial t} +V\frac{\partial T}{\partial x}= -(\gamma-1)T \left[ \frac{\partial V}{\partial x} +V\frac{\partial(\ln A)}{\partial x} \right] \]
温度方程:
\[ \left(\frac{\partial T}{\partial t}\right)_i^{t}= -V_i^{t}\frac{T_{i+1}^{t}-T_i^{t}}{\Delta x} -(\gamma-1)T_i^{t} \left[ \frac{V_{i+1}^{t}-V_i^{t}}{\Delta x} +V_i^{t}\frac{\ln A_{i+1}-\ln A_i}{\Delta x} \right] \]
利用预测步得到的时间导数,更新预测值:
\[ \overline{\rho}_i^{t+\Delta t}= \rho_i^t + \left(\frac{\partial \rho}{\partial t}\right)_i^t\Delta t \]
\[ \overline{V}_i^{t+\Delta t}= V_i^t + \left(\frac{\partial V}{\partial t}\right)_i^t\Delta t \]
\[ \overline{T}_i^{t+\Delta t}= T_i^t + \left(\frac{\partial T}{\partial t}\right)_i^t\Delta t \]
\[ \frac{\partial \rho}{\partial t} +V\frac{\partial \rho}{\partial x} +\rho\frac{\partial V}{\partial x} +\rho V\frac{\partial(\ln A)}{\partial x}=0 \]
校正步采用 预测值 和 后向差分 重新计算时间导数。
\[ \left(\frac{\partial \overline{\rho}}{\partial t}\right)_i^{t+\Delta t}= -\overline{\rho}_i^{t+\Delta t} \frac{\overline{V}_i^{t+\Delta t}-\overline{V}_{i-1}^{t+\Delta t}}{\Delta x} -\overline{\rho}_i^{t+\Delta t}\overline{V}_i^{t+\Delta t} \frac{\ln A_i-\ln A_{i-1}}{\Delta x} -\overline{V}_i^{t+\Delta t} \frac{\overline{\rho}_i^{t+\Delta t}-\overline{\rho}_{i-1}^{t+\Delta t}}{\Delta x} \]
\[ \frac{\partial V}{\partial t} +V\frac{\partial V}{\partial x}= -\frac{1}{\gamma} \left( \frac{\partial T}{\partial x} +\frac{T}{\rho}\frac{\partial \rho}{\partial x} \right) \]
\[ \left(\frac{\partial \overline{V}}{\partial t}\right)_i^{t+\Delta t}= -\overline{V}_i^{t+\Delta t} \frac{\overline{V}_i^{t+\Delta t}-\overline{V}_{i-1}^{t+\Delta t}}{\Delta x} -\frac{1}{\gamma} \left[ \frac{\overline{T}_i^{t+\Delta t}-\overline{T}_{i-1}^{t+\Delta t}}{\Delta x} + \frac{\overline{T}_i^{t+\Delta t}}{\overline{\rho}_i^{t+\Delta t}} \frac{\overline{\rho}_i^{t+\Delta t}-\overline{\rho}_{i-1}^{t+\Delta t}}{\Delta x} \right] \]
\[ \frac{\partial T}{\partial t} +V\frac{\partial T}{\partial x}= -(\gamma-1)T \left[ \frac{\partial V}{\partial x} +V\frac{\partial(\ln A)}{\partial x} \right] \]
\[ \left(\frac{\partial \overline{T}}{\partial t}\right)_i^{t+\Delta t}= -\overline{V}_i^{t+\Delta t} \frac{\overline{T}_i^{t+\Delta t}-\overline{T}_{i-1}^{t+\Delta t}}{\Delta x} -(\gamma-1)\overline{T}_i^{t+\Delta t} \left[ \frac{\overline{V}_i^{t+\Delta t}-\overline{V}_{i-1}^{t+\Delta t}}{\Delta x} +\overline{V}_i^{t+\Delta t} \frac{\ln A_i-\ln A_{i-1}}{\Delta x} \right] \]
预测步和校正步得到两个时间导数,对它们取平均:
\[ \left(\frac{\partial \rho}{\partial t}\right)_{\mathrm{av}}= \frac{1}{2} \left[ \left(\frac{\partial \rho}{\partial t}\right)_i^{t} + \left(\frac{\partial \overline{\rho}}{\partial t}\right)_i^{t+\Delta t} \right] \]
\[ \left(\frac{\partial V}{\partial t}\right)_{\mathrm{av}}= \frac{1}{2} \left[ \left(\frac{\partial V}{\partial t}\right)_i^{t} + \left(\frac{\partial \overline{V}}{\partial t}\right)_i^{t+\Delta t} \right] \]
\[ \left(\frac{\partial T}{\partial t}\right)_{\mathrm{av}}= \frac{1}{2} \left[ \left(\frac{\partial T}{\partial t}\right)_i^{t} + \left(\frac{\partial \overline{T}}{\partial t}\right)_i^{t+\Delta t} \right] \]
用平均时间导数完成最终更新:
\[ \rho_i^{t+\Delta t}= \rho_i^t + \left(\frac{\partial \rho}{\partial t}\right)_{\mathrm{av}}\Delta t \]
\[ V_i^{t+\Delta t}= V_i^t + \left(\frac{\partial V}{\partial t}\right)_{\mathrm{av}}\Delta t \]
\[ T_i^{t+\Delta t}= T_i^t + \left(\frac{\partial T}{\partial t}\right)_{\mathrm{av}}\Delta t \]
控制方程组在时间上是 双曲型 的,因此显式格式存在稳定性约束。
对准一维可压缩流,扰动信息的传播速度包括:
\[ V-a,\qquad V,\qquad V+a \]
其中:
因此,控制时间步长的不是单纯的 \(\color{black}{V}\), 而是最快的信息传播速度 \(\color{black}{V+a}\)。
显式格式中,一个时间步内,数值信息主要在相邻网格点之间传递。
因此,数值格式能够分辨的信息传播速度量级为:
\[ \frac{\Delta x}{\Delta t} \]
物理中最快的信息传播速度为:\(V+a\)
为了使物理信息不跨过数值格式能够分辨的范围,需要满足:
\[ V+a\leq\frac{\Delta x}{\Delta t} \]
整理得到:
\[ \Delta t\leq\frac{\Delta x}{a+V} \]
定义:
\[ C=\frac{(a+V)\Delta t}{\Delta x} \]
于是时间步长可写为:
\[ \Delta t= C\frac{\Delta x}{a+V} \]
其中: \(C\) 为 CFL 数
对显式格式,要求:
\[ C\leq 1 \]
一个时间步内,最快的物理信息传播距离不能超过一个网格。
也即:
\[ (a+V)\Delta t\leq \Delta x \]
本问题由非线性偏微分方程控制,因此:
显式格式要求 \(\color{black}{\Delta t}\) 足够小,使得声波和流动输运共同造成的信息传播不越过一个网格。
由于:
因此每个网格点对应的时间步长要求不同:
\[ (\Delta t)_i^t= C\frac{\Delta x}{a_i^t+V_i^t} \]
相邻点:
\[ (\Delta t)_{i+1}^t= C\frac{\Delta x}{a_{i+1}^t+V_{i+1}^t} \]
👉 各网格点的时间步长要求一般不同。
每个网格点使用自己的时间步:
\[ (\Delta t)_i^t \]
在所有网格点计算:
\[ (\Delta t)_1^t,\quad (\Delta t)_2^t,\quad \dots,\quad (\Delta t)_N^t \]
取最小值:
\[ \Delta t= \min\left[ (\Delta t)_1^t, (\Delta t)_2^t, \dots, (\Delta t)_N^t \right] \]
即:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ \Delta t= \min_i \left( C\frac{\Delta x}{a_i+V_i} \right) } $} \]
CFL 条件本质是信息传播约束:数值时间步不能超过物理信息传播所允许的尺度。
数值求解的另一个关键方面是 边界条件。
如果没有在物理上正确设置边界条件,并在数值上正确实现它们,就无法得到正确的数值解。

点 1 位于储气室附近,流体从储气室进入喷管。
入口流动为 低速亚声流。
速度不能为 0,否则无质量流进入喷管。
因此,它不完全等同于理想储气室。

对于一维非定常无粘流:方程为双曲型、存在三条特征线:
\[ \frac{dx}{dt}=V-a,\qquad \frac{dx}{dt}=V,\qquad \frac{dx}{dt}=V+a \]
物理意义:
边界条件的个数由 进入计算域的特征线数目 决定。

入口满足:
\[ 0<V_1<a_1 \]
此时三条特征线:
👉 因此亚声入口有 两条特征线进入计算域, 需要指定两个边界变量: \[\rho_1=1,\qquad T_1=1\] 它们对应储气室总参数。速度 \(V_1\) 由内部点决定。
\[ V_1=2V_2-V_3 \]

出口满足:
\[ V_N>a_N \]
此时三条特征速度为:
\[ V_N-a_N>0,\qquad V_N>0,\qquad V_N+a_N>0 \]
👉 在超声出口,无需指定任何变量。
👉 所有变量都由内部解决定。
\[ V_N=2V_{N-1}-V_{N-2}, \qquad \rho_N=2\rho_{N-1}-\rho_{N-2}, \qquad T_N=2T_{N-1}-T_{N-2} \]
喷管形状 \(A=A(x)\) 为已知并固定,与时间无关。
本算例采用如下抛物线型面积分布:
\[ A=1+2.2(x-1.5)^2,\qquad 0\leq x\leq 3 \]

为了开始时间推进计算,需要给定:
\[ \rho(x),\qquad T(x),\qquad V(x) \quad \text{在 } t=0 \]
可以将时间推进过程类比为:一根被拉伸的橡皮筋。
应利用对问题的物理认知:
喷管中:
本例采用的初始条件:
\[ \rho=1-0.3146x \]
\[ T=1-0.2314x \]
\[ V=(0.1+1.09x)T^{1/2} \]
💻 代码讲解和演示
nozzle_nonconservative_transonic_supersonic.m
对于收缩—扩张喷管:
请判断流动状态如何变化?
参考判断:
\[ \text{全亚声速}\rightarrow\text{喉部阻塞}\rightarrow\text{超声区/激波} \]
含激波问题中,守恒形式更可靠。
PURELY SUBSONIC NOZZLE FLOW
纯亚声速喷管流
同一个收缩—扩张喷管,
由于两端压比不同,也可能形成 全程亚声速
的等熵流动。
Subsonic branch · Exit pressure · Boundary-condition sensitivity
在前面的算例中,我们研究了 亚声速—超声速等熵喷管流。
本节讨论另一类不同的解:
纯亚声速(purely subsonic)等熵喷管流
其物理本质在于:虽然喷管仍然是收缩—扩张型,但由于喷管两端所施加的压比不同,流动在整个喷管内都保持亚声速。
因此,喉部也 不会达到声速。

对于某一给定喷管,若出口压力足够高,则喷管中的流动虽然会在收缩段加速、在扩张段减速,但局部马赫数始终满足:
\[ M<1 \]
这就是 纯亚声速喷管流。
在这种情况下,喉部不再是声速截面,因此需要区分两个面积:
对于堵塞流动,喉部就是声速截面,因此 \(A_t=A^*\)。
但对于纯亚声速流动,喉部马赫数仍小于 1,因此二者不再相等。
等熵准一维喷管流满足面积—马赫数关系:
\[ \frac{A}{A^*} =\frac{1}{M} \left[ \frac{2}{\gamma+1} \left( 1+\frac{\gamma-1}{2}M^2 \right) \right]^{\frac{\gamma+1}{2(\gamma-1)}} \]
对于亚声速流动,有:
\[ M<1 \]
代入面积—马赫数关系可知:
\[ \frac{A}{A^*}>1 \]
也就是说,任意一个亚声速截面的面积都大于其对应的临界面积。
特别地,在喷管喉部:\(M_t<1\),因此:\(\frac{A_t}{A^*}>1\),于是得到:
\[ \boxed{A^*<A_t} \]
物理含义是:
当前流量还不足以使喉部达到声速。若要把这股流动加速到 \(M=1\),需要一个比真实喉部更小的“等效临界面积”
\(A^*\)。
也就是说,\(A^*\) 在这里仅仅是一个 参考面积, 它小于真实喉部面积。
一旦 \(A^*\) 被确定,局部面积比 \(A/A^*\) 仍可通过面积—马赫数关系确定局部马赫数:
\[ \left(\frac{A}{A^*}\right)^2 =\frac{1}{M^2} \left[ \frac{2}{\gamma+1} \left(1+\frac{\gamma-1}{2}M^2\right) \right]^{(\gamma+1)/(\gamma-1)} \]
由于这里要求的是 纯亚声速解, 因此求 \(M\) 时应始终取亚声速分支。
一旦局部马赫数 \(M\) 已知,局部压力比、密度比和温度比可继续由等熵关系得到。
压力比:
\[ \frac{p}{p_0} =\left(1+\frac{\gamma-1}{2}M^2\right)^{-\gamma/(\gamma-1)} \]
密度比:
\[ \frac{\rho}{\rho_0} =\left(1+\frac{\gamma-1}{2}M^2\right)^{-1/(\gamma-1)} \]
温度比:
\[ \frac{T}{T_0} =\left(1+\frac{\gamma-1}{2}M^2\right)^{-1} \]
因此,在纯亚声速喷管流中:
\[ \frac{A}{A^*}\rightarrow M\rightarrow \frac{p}{p_0},\frac{\rho}{\rho_0},\frac{T}{T_0} \]
几何关系仍然决定 \(A/A^*\),而 \(A/A^*\) 再决定 \(M\),继而决定局部热力学状态。
与亚声速—超声速解的根本差别在于:
这里整个流场始终走的是亚声速分支。
本节采用的喷管面积分布为:
\[ \frac{A}{A_t}=1+2.2(x-1.5)^2,\qquad 0\le x\le 1.5 \]
以及:
\[ \frac{A}{A_t}=1+0.2223(x-1.5)^2,\qquad 1.5\le x\le 3.0 \]
这里 \(A_t\) 表示喷管喉部面积。
在纯亚声速情形下,喉部处并不满足 \(M=1\),因此:
\[ A_t\ne A^*,\qquad A^*<A_t \]
本节仍采用与前面 亚声速—超声速喷管流 相同的准一维非定常控制方程。
连续方程:
\[ \frac{\partial \rho}{\partial t} =-\rho\frac{\partial V}{\partial x} -\rho V\frac{\partial(\ln A)}{\partial x} -V\frac{\partial \rho}{\partial x} \]
动量方程:
\[ \frac{\partial V}{\partial t} =-V\frac{\partial V}{\partial x} -\frac{1}{\gamma} \left( \frac{\partial T}{\partial x} +\frac{T}{\rho}\frac{\partial \rho}{\partial x} \right) \]
能量方程:
\[ \frac{\partial T}{\partial t} =-V\frac{\partial T}{\partial x} -(\gamma-1)T \left[ \frac{\partial V}{\partial x} +V\frac{\partial(\ln A)}{\partial x} \right] \]
从方程形式看,本节与前一算例并无本质区别。
真正改变纯亚声速解的是:
入口仍然是亚声速流入边界,因此和前一算例一样,入口应允许一个变量“浮动”,其余变量由储气室条件给定。
这里取:
即:
\[ \rho_1=1,\qquad T_1=1 \]
入口速度由线性外推给出:
\[ V_1=2V_2-V_3 \]
与前一算例不同,本节的出口改为 亚声速出口。
因此在出口点 \(N\),特征线分析表明:
从物理上说,这个被指定的量正是:
\[ p_N \]
即出口压力。
因为对于纯亚声速喷管流,要获得唯一解,必须给定跨喷管的压比,或者在固定 \(p_0\) 的条件下给定出口静压 \(p_e\)。
数值方程中的未知量是:\(\rho\)、\(V\)、\(T\),而不是 \(p\)。
因此需要借助无量纲状态方程:
\[ p=\rho T \]
于是,在出口点 \(N\),压力边界条件可写为:
\[ p_N=\text{给定值} \]
由于控制变量是 \(\rho_N\) 和 \(T_N\),必须保证二者在每一时间步中始终满足状态方程:
\[ \rho_NT_N=p_N=\text{给定值} \]
先由内部点线性外推出口温度:
\[ T_N=2T_{N-1}-T_{N-2} \]
然后由状态方程求出口密度:
\[ \rho_N=\frac{p_N}{T_N} \]
这样便能保证出口压力满足给定值:
\[ \rho_NT_N=p_N \]
这里的关键不是单独指定 \(\rho_N\) 或 \(T_N\),而是通过 \(p_N=\rho_NT_N\) 保证出口压力边界条件被严格满足。
也可以先由内部点线性外推出口密度:
\[ \rho_N=2\rho_{N-1}-\rho_{N-2} \]
再由状态方程求出口温度:
\[ T_N=\frac{p_N}{\rho_N} \]
两种做法在数值实现上都可以使用,本质上都是为了满足:
\[ p_N=\rho_NT_N \]
此外,出口速度通常由线性外推给出:
\[ V_N=2V_{N-1}-V_{N-2} \]
初始流场采取如下较为简单的无量纲分布:
\[ \rho=1.0-0.023x \]
\[ T=1.0-0.009333x \]
\[ V=0.05+0.11x \]
这些初始条件给出了 \(t=0\) 时刻的流场分布。
需要注意:这些初始条件只是计算的起点,并不要求严格满足最终的定常解。随着时间推进,流场会在控制方程和边界条件共同作用下逐渐收敛。
对该纯亚声速喷管流,仍使用与前一算例完全相同的:
MacCormack 显式预测—校正格式
因此,在程序实现上,只需修改:
而不必改动差分算法本身。
采用压比为:\(\frac{p_e}{p_0}=0.93\)的纯亚声速算例。
💻 代码讲解和演示
nozzle_nonconservative_subsonic_pressure_exit.m
纯亚声速喷管流与亚声速—超声速喷管流相比,最大的差异不在于控制方程或数值格式,而在于:
即使最终稳态边界条件是物理正确的,它在非定常时间推进过程中也不一定总是数值上合适。
这正是数值边界条件设计中最微妙、也最重要的问题之一。
CONSERVATIVE VS. NONCONSERVATIVE FORM
守恒形式与非守恒形式
同一个物理问题,
采用不同的方程形式,可能得到完全不同的激波结果。
Conservation law · Shock capturing · Physical consistency
前面的准一维喷管流求解中,我们主要采用的是:
非守恒形式(nonconservative form)
其基本变量为:
这种形式物理直观,便于理解变量随时间和空间的演化。
在 CFD 中,还有另一种更重要的表达方式:
守恒形式(conservative form)
其基本变量为:
它直接对应控制体中的质量、动量和能量守恒。
本节的目的在于:
守恒形式在处理激波问题时具有决定性优势。
准一维连续方程的守恒形式为:
\[ \frac{\partial(\rho A)}{\partial t} +\frac{\partial(\rho V A)}{\partial x}=0 \]
该方程表示:
控制体内质量的变化率 + 通过控制体边界的质量通量 = 0
其中 \(\rho A\) 是单位长度内的质量,\(\rho V A\) 是质量流率。
从前面的准一维动量方程出发:
\[ \frac{\partial(\rho V A)}{\partial t} +\frac{\partial(\rho V^2A)}{\partial x} =-A\frac{\partial p}{\partial x} \]
为了写成守恒形式,需要将右侧压力梯度项重新整理。
利用乘积求导:
\[ \frac{\partial(pA)}{\partial x} =A\frac{\partial p}{\partial x} +p\frac{\partial A}{\partial x} \]
因此:
\[ -A\frac{\partial p}{\partial x} =-\frac{\partial(pA)}{\partial x} +p\frac{\partial A}{\partial x} \]
将压力项整理结果代入动量方程:
\[ \frac{\partial(\rho V A)}{\partial t} +\frac{\partial(\rho V^2A)}{\partial x} =-\frac{\partial(pA)}{\partial x} +p\frac{\partial A}{\partial x} \]
将通量项合并到左侧:
\[ \frac{\partial(\rho V A)}{\partial t} +\frac{\partial(\rho V^2A+pA)}{\partial x} =p\frac{\partial A}{\partial x} \]
也即:
\[ \frac{\partial(\rho V A)}{\partial t} +\frac{\partial\left[(\rho V^2+p)A\right]}{\partial x} =p\frac{dA}{dx} \]
右侧源项来自喷管面积变化。
总能量定义为:
\[ E=e+\frac{V^2}{2} \]
准一维喷管流的能量守恒形式为:
\[ \frac{\partial(\rho E A)}{\partial t} +\frac{\partial(\rho V E A+pVA)}{\partial x}=0 \]
也可以写为:
\[ \frac{\partial(\rho E A)}{\partial t} +\frac{\partial\left[\rho V A\left(E+\frac{p}{\rho}\right)\right]}{\partial x}=0 \]
该方程表示总能量随流动输运,同时包含压力功的贡献。
定义守恒变量:
\[ U_1=\rho A \]
\[ U_2=\rho V A \]
\[ U_3=\rho E A \]
对应地,\(\mathbf{U}\) 表示控制体内的守恒量。
定义通量:
\[ F_1=\rho V A \]
\[ F_2=\rho V^2A+pA \]
\[ F_3=\rho VEA+pVA \]
定义源项:
\[ \mathbf{J}= \begin{bmatrix} 0\\ p\dfrac{dA}{dx}\\ 0 \end{bmatrix} \]
于是,守恒形式可统一写为:
\[ \frac{\partial\mathbf{U}}{\partial t} +\frac{\partial\mathbf{F}}{\partial x} =\mathbf{J} \]
这就是后续 MacCormack 方法直接离散的方程形式。
其中:
对守恒形式:
\[ \frac{\partial\mathbf{U}}{\partial t} +\frac{\partial\mathbf{F}}{\partial x} =\mathbf{J} \]
仍采用显式预测—校正思想。
不同之处在于:推进对象由原始变量变为守恒变量 \(\mathbf{U}\)。
预测步采用前向差分:
\[ \overline{U}_i =U_i^n-\frac{\Delta t}{\Delta x}\left(F_{i+1}^n-F_i^n\right)+J_i^n\Delta t \]
其中:
这是守恒形式下的预测更新。
校正步采用后向差分:
\[ U_i^{n+1} =\frac{1}{2} \left[ U_i^n+\overline{U}_i -\frac{\Delta t}{\Delta x}\left(\overline{F}_i-\overline{F}_{i-1}\right) +\overline{J}_i\Delta t \right] \]
其中:
预测步与校正步平均后,得到二阶精度。
MacCormack 方法推进的是守恒变量:
\[ U_1=\rho A,\qquad U_2=\rho V A,\qquad U_3=\rho E A \]
但为了计算通量和物理量,需要恢复原始变量。
由守恒变量可得:
\[ \rho=\frac{U_1}{A}, \qquad V=\frac{U_2}{U_1}, \qquad E=\frac{U_3}{U_1} \]
\[ T=e=(\gamma-1)\left(\frac{U_3}{U_1}-\frac{\gamma}{2}V^2\right) \]
\[ p=\rho T \]
现在比较两种方法:
基本变量:
\[ \rho,\quad V,\quad T \]
基本变量:
\[ \rho A,\quad \rho V A,\quad \rho E A \]
在无激波、解足够光滑的情况下:
两种形式的结果基本一致。
原因是:对于光滑解,守恒形式与非守恒形式在连续意义下可以相互转换。
在存在激波时,情况发生根本变化。
两种形式会出现本质差异。
非守恒形式的问题:
守恒形式的优势:
为什么守恒形式更重要?
激波本质上是守恒律的弱解。
经典解要求“每一点都满足微分方程”;弱解只要求“任意控制体内的守恒关系成立”。激波处物理量不连续,不能作为经典解,但只要满足跨激波的守恒跳跃条件,它就是守恒律允许的弱解。
激波处变量不连续,不能再依赖普通微分意义下的方程变形。
此时真正可靠的是跨越不连续面的积分守恒关系。
守恒形式保证:
\[ \text{质量、动量、能量守恒} \]
非守恒形式在光滑区域通常没有问题。
但在激波处,非守恒形式可能破坏守恒关系。
因此,含激波问题中,方程是否写成守恒形式不是形式问题,而是物理正确性问题。
涉及不连续,特别是激波的问题,必须使用守恒形式。
| 方法 | 是否守恒 | 激波能力 |
|---|---|---|
| 非守恒形式 | ❌ | 差 |
| 守恒形式 | ✅ | 强 |
ARTIFICIAL VISCOSITY
激波捕捉与人工黏性
守恒形式对于正确处理激波是必要的,
但并不充分。
激波附近仍可能出现非物理数值振荡
本算例研究收缩—扩张喷管中的准一维可压缩流动:
\[ A=A(x),\qquad 0\le x\le3 \]
喷管面积分布为:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ A(x)=1+2.2(x-1.5)^2 } $} \]
出口压力指定为:
\[ p_e=0.6784 \]
扩张段内部将出现一道正激波。
这类问题的关键不是预先指定激波位置,而是让数值格式在守恒方程、边界条件和适当数值耗散的共同作用下自动捕捉激波。
当喷管内部存在正激波时,典型流动过程为:
激波位置由喷管几何、入口总量、出口背压以及守恒方程共同决定(手动推导)。
计算域和喷管面积为:
\[ x\in[0,3],\qquad A(x)=1+2.2(x-1.5)^2 \]
喉部位置由面积最小值确定:
\[ A_t=\min A(x),\qquad x_t=\operatorname*{arg\,min}_x A(x) \]
代码中对应:
本算例中,出口压力被指定为:\(p_e=0.6784\),这意味着喷管不能保持完整的亚声—超声等熵解。
当出口背压高于设计等熵出口压力、但又低于临界压力时,流动会出现:
解析解的目的不是替代 CFD,而是给出一个清楚的参照:
激波应该出现在什么位置?激波前后状态大约是多少?
对于完整的亚声—超声等熵解,出口压力不是任意指定的,而是由喷管面积比自动决定。
但对于含激波的喷管流,出口背压必须给定:
\[ \frac{p_e}{p_{01}}=0.6784 \]
这个背压决定了激波位置。
激波越靠下游,激波前马赫数越大,激波越强;
激波越靠上游,激波前马赫数越小,压力恢复过程也随之改变。
\[ p_e \Longrightarrow \text{激波强度} \Longrightarrow \text{激波位置} \]
\[ \text{几何}+p_e \Longrightarrow A_1 \]
设正激波位于喷管扩张段某一截面,其面积为:
\[ A_1 \]
激波前状态记为 1,激波后状态记为 2:
\[ M_1,\ p_{01},\ A_1^* \qquad\Longrightarrow\qquad M_2,\ p_{02},\ A_2^* \]
激波前:从储气室到激波前为等熵流动,因此总压为 \(p_{01}\)。
激波后:从激波后到出口仍近似等熵,但总压降低为 \(p_{02}\)。
\[ p_{02}<p_{01} \]
\[ s_2>s_1 \]
\[ A_2^*>A_1^* \]
准一维等熵临界流量可写为:
\[ \dot{m}= \frac{p_0A^*}{\sqrt{T_0}} \sqrt{ \frac{\gamma}{R} \left( \frac{2}{\gamma+1} \right)^{(\gamma+1)/(\gamma-1)} } \]
对于给定入口总温条件,有:
\[ \dot{m}\propto p_0A^* \]
由于质量流量穿过激波前后保持不变:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ p_{01}A_1^*=p_{02}A_2^* } $} \]
激波会造成总压损失,因此 \(p_{02}<p_{01}\)。
为了保持相同质量流量,激波后的等效临界面积必须增大,即 \(A_2^*>A_1^*\)。
对于本喷管,出口面积与喉部面积之比为:
\[ \frac{A_e}{A_t}=5.95 \]
激波前流动已在喉部阻塞,因此:
\[ A_1^*=A_t \]
将出口压力和面积比组合起来:
\[ \frac{p_eA_e}{p_{01}A_t}= 0.6784\times5.95= 4.03648 \]
激波后到出口为亚声速等熵流动,于是:
\[ \frac{p_eA_e}{p_{02}A_2^*}= \frac{p_eA_e}{p_{01}A_t}= 4.03648 \]
出口处等熵关系给出:
\[ \frac{A_e}{A_2^*}= \frac{1}{M_e} \left[ \frac{2}{\gamma+1} \left( 1+\frac{\gamma-1}{2}M_e^2 \right) \right]^{\frac{\gamma+1}{2(\gamma-1)}} \]
以及:
\[ \frac{p_e}{p_{02}}= \left( 1+\frac{\gamma-1}{2}M_e^2 \right)^{-\gamma/(\gamma-1)} \]
联立后得到关于 \(M_e\) 的方程:
\[ \frac{1}{M_e} \left( \frac{2}{\gamma+1} \right)^{\frac{\gamma+1}{2(\gamma-1)}} \left[ 1+\frac{\gamma-1}{2}M_e^2 \right]^{-1/2}= 4.03648\Longrightarrow \colorbox{yellow}{$\displaystyle \color{black}{ M_e=0.1431 } $} \]
由出口等熵关系:
\[ \frac{p_e}{p_{02}}= \left[ 1+\frac{\gamma-1}{2}(0.1431)^2 \right]^{-3.5}= 0.9858 \]
因此,激波前后总压比为:
\[ \frac{p_{02}}{p_{01}}= \frac{p_{02}}{p_e} \frac{p_e}{p_{01}}= \frac{0.6784}{0.9858}= 0.6882 \]
这说明正激波造成了明显的总压损失。
出口静压虽然由边界条件指定,但出口总压已经低于入口总压。
正激波总压比只由激波前马赫数 \(M_1\) 决定:
\[ \frac{p_{02}}{p_{01}}= \left[ \frac{(\gamma+1)M_1^2}{(\gamma-1)M_1^2+2} \right]^{\gamma/(\gamma-1)} \left[ \frac{\gamma+1}{2\gamma M_1^2-(\gamma-1)} \right]^{1/(\gamma-1)} \]
令:
\[ \frac{p_{02}}{p_{01}}=0.6882 \]
求解得到激波前马赫数:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ M_1=2.07 } $} \]
也就是说,数值计算若正确捕捉激波,激波前的局部马赫数应接近 \(2.07\)。
激波前为等熵超声速流动,因此局部面积比满足:
\[ \frac{A_1}{A_1^*}= \frac{1}{M_1} \left[ \frac{2}{\gamma+1} \left( 1+\frac{\gamma-1}{2}M_1^2 \right) \right]^{\frac{\gamma+1}{2(\gamma-1)}} \]
由于 \(A_1^*=A_t\),代入 \(M_1=2.07\) 得:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ \frac{A_1}{A_t}=1.790 } $} \]
因此,解析解预测:
正激波应位于喷管扩张段中面积比约为 \(A/A_t=1.79\) 的位置。
本算例喷管面积为:
\[ A(x)=1+2.2(x-1.5)^2 \]
喉部面积为:
\[ A_t=1 \]
由解析解:
\[ \frac{A_1}{A_t}=1.790 \Longrightarrow 1+2.2(x_s-1.5)^2=1.790 \]
激波位于扩张段,故取 \(x_s>1.5\):
\[ x_s=1.5+\sqrt{\frac{0.790}{2.2}}\Longrightarrow \colorbox{yellow}{$\displaystyle \color{black}{ x_s\simeq2.10 } $} \]
由正激波关系,激波前后压力比为:
\[ \frac{p_2}{p_1}= 1+\frac{2\gamma}{\gamma+1}(M_1^2-1) \]
代入 \(M_1=2.07\),得到:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ \frac{p_2}{p_1}=4.83 } $} \]
激波后的马赫数为:
\[ M_2= \left[ \frac{1+\frac{\gamma-1}{2}M_1^2} {\gamma M_1^2-\frac{\gamma-1}{2}} \right]^{1/2}= \colorbox{yellow}{$\displaystyle \color{black}{ 0.566 } $} \]
对于指定出口压力:
\[ \frac{p_e}{p_{01}}=0.6784 \]
解析结果为:
后续数值结果应重点检查:
激波位置是否接近 \(x\simeq2.10\),以及激波前后马赫数和压力跃升是否合理。
代码采用无量纲准一维守恒变量:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ U_1=\rho A } $} \]
\[ \colorbox{yellow}{$\displaystyle \color{black}{ U_2=\rho V A } $} \]
\[ \colorbox{yellow}{$\displaystyle \color{black}{ U_3=\rho A\left( \frac{T}{\gamma-1} +\frac{\gamma}{2}V^2 \right) } $} \]
其中:
\[ p=\rho T,\qquad M=\frac{V}{\sqrt{T}} \]
准一维喷管流守恒方程写为:
\[ \frac{\partial U}{\partial t} +\frac{\partial F}{\partial x} =J \]
其中通量项与几何源项分别为:
\[ \mathbf{F}= \begin{bmatrix} F_1\\[3pt] F_2\\[3pt] F_3 \end{bmatrix}= \begin{bmatrix} U_2\\[6pt] \dfrac{U_2^2}{U_1}+\dfrac{\gamma-1}{\gamma} \left( U_3-\dfrac{\gamma}{2}\dfrac{U_2^2}{U_1} \right)\\[8pt] \gamma\dfrac{U_2U_3}{U_1} -\dfrac{\gamma(\gamma-1)}{2}\dfrac{U_2^3}{U_1^2} \end{bmatrix}, \qquad \mathbf{J}= \begin{bmatrix} 0\\[6pt] \dfrac{1}{\gamma}p\dfrac{dA}{dx}\\[6pt] 0 \end{bmatrix}. \]
守恒形式
离散的是通量差:
\[ F_{i+1/2}-F_{i-1/2} \]
可以保证质量、动量和能量在控制体意义下守恒。
非守恒形式
直接离散局部导数:
\[ A(q)q_x \]
在激波间断处没有唯一含义,可能得到错误激波位置和跳跃强度。
激波捕捉的核心要求是:数值解应收敛到满足 Rankine–Hugoniot 跳跃关系的弱解。
预测步采用前向差分:
\[ \bar{U}_i= U_i^n -\frac{\Delta t}{\Delta x} \left( F_{i+1}^n-F_i^n \right) +\Delta tJ_i^n +S_i^n \]
代码中对应:
for i = 2:Nx-1
U_bar(:,i) = U(:,i) ...
- dt/dx*(F(:,i+1)-F(:,i)) ...
+ dt*J(:,i);
end
S = artificial_viscosity(U,p,Cx);
for i = 2:Nx-1
U_bar(:,i) = U_bar(:,i) + S(:,i);
end预测步先利用当前时刻的流场向前推进,得到中间状态 \(\bar{U}\)。
校正步采用后向差分:
\[ U_i^{n+1}= \frac{1}{2} \left[ U_i^n+\bar{U}_i -\frac{\Delta t}{\Delta x} \left( \bar{F}_i-\bar{F}_{i-1} \right) +\Delta t\bar{J}_i \right] +\bar{S}_i \]
代码中对应:
for i = 2:Nx-1
U_new(:,i) = 0.5*( ...
U(:,i) + U_bar(:,i) ...
- dt/dx*(F_bar(:,i)-F_bar(:,i-1)) ...
+ dt*J_bar(:,i) );
end
S_bar = artificial_viscosity(U_bar,p_b,Cx);
for i = 2:Nx-1
U_new(:,i) = U_new(:,i) + S_bar(:,i);
endMacCormack格式通过“预测+校正”获得二阶时间与空间精度,但在激波附近仍需要额外数值耗散。
每一步时间步长由局部传播速度限制:
\[ \Delta t= \mathrm{CFL} \frac{\Delta x} {\max(|V|+a)} \]
其中无量纲声速为:
\[ a=\sqrt{T} \]
代码中对应:
CFL条件反映了显式格式的时间步必须受物理信息传播速度限制。
入口采用简化的亚声速入口条件:
\[ \rho_{\mathrm{in}}=1,\qquad T_{\mathrm{in}}=1 \]
\[ V_1=2V_2-V_3 \]
\[ U_1=\rho A \]
\[ U_2=\rho VA \]
\[ U_3= \rho A \left( \frac{T}{\gamma-1} +\frac{\gamma}{2}V^2 \right) \]
出口为亚声速出口,指定静压:
\[ p_N=p_e \]
先外推质量变量和动量变量:
\[ (U_1)_N=2(U_1)_{N-1}-(U_1)_{N-2} \]
\[ (U_2)_N=2(U_2)_{N-1}-(U_2)_{N-2} \]
然后计算出口密度和速度:
\[ \rho_N=\frac{(U_1)_N}{A_N},\qquad V_N=\frac{(U_2)_N}{(U_1)_N} \]
由给定出口压力确定温度:
\[ T_N=\frac{p_e}{\rho_N} \]
最后更新能量变量:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ (U_3)_N= \rho_N A_N \left( \frac{T_N}{\gamma-1} +\frac{\gamma}{2}V_N^2 \right) } $} \]
亚声速出口不能简单外推所有变量。出口压力通过能量变量的重构进入计算。
对含激波流动,如果不加入人工粘性,数值解容易在激波附近出现非物理振荡,甚至导致残差不收敛。
压力二阶差分可以作为激波传感器:
\[ \phi_i= \frac{ \left|p_{i+1}-2p_i+p_{i-1}\right| }{ p_{i+1}+2p_i+p_{i-1} } \]
人工粘性项为:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ S_i=C_x\phi_i \left( U_{i+1}-2U_i+U_{i-1} \right) } $} \]
代码中对应:
压力二阶差分越大,说明局部压强变化越剧烈,人工粘性越强。
好处
代价
人工粘性的关键不是越大越好,而是在“稳定性”和“分辨率”之间取得平衡。
在喷管激波捕捉算例中,建议重点观察:
解析解
数值解
因此,判断激波捕捉是否合理,不能只看激波点处是否完全重合,还要看上下游状态、激波位置和整体守恒性是否正确。
喷管内正激波算例集中体现了 CFD 中几个核心思想:
一句话理解:
激波捕捉不是预先告诉程序激波在哪里,而是通过守恒方程、边界条件和适当数值耗散,让激波自然出现在正确位置附近。
在光滑流动中,守恒形式和非守恒形式往往可以相互转化。
例如:
\[ \frac{\partial U}{\partial t}+\frac{\partial F(U)}{\partial x}=0 \]
可在光滑区域写成:
\[ \frac{\partial q}{\partial t}+A(q)\frac{\partial q}{\partial x}=0 \]
但激波不是光滑结构,而是变量发生跳跃的间断结构。
此时,非守恒形式与守恒形式不再等价。
激波前后,密度、速度、压力、温度都可能发生突变:
\[ \rho_1,u_1,p_1,T_1 \quad \longrightarrow \quad \rho_2,u_2,p_2,T_2 \]
但是,跨过激波的质量、动量和能量仍必须满足守恒关系。
也就是说,变量可以跳变,但控制体意义下的守恒不能被破坏。
考虑一维守恒律:
\[ \frac{\partial U}{\partial t}+\frac{\partial F(U)}{\partial x}=0 \]
设激波位置为:
\[ x=x_s(t) \]
激波速度定义为:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ s=\frac{dx_s}{dt} } $} \]
激波两侧状态分别记为:
\[ U_1=U(x_s^-,t),\qquad U_2=U(x_s^+,t) \]
激波两侧状态分别记为:
\[ U_1=U(x_s^-,t),\qquad U_2=U(x_s^+,t) \]
对应通量为:
\[ F_1=F(U_1),\qquad F_2=F(U_2) \]
这里的 \(s\)
不是声速,而是激波面在物理空间中的传播速度。
对于定常喷管内激波,激波位置不随时间移动,因此 \(s=0\)。
在包围激波的微小控制体上积分:
\[ \int_{x_s^-}^{x_s^+} \left( \frac{\partial U}{\partial t} +\frac{\partial F}{\partial x} \right)dx=0 \]
由于控制体边界随激波运动,需要考虑边界移动带来的通量贡献。
对激波两侧做积分平衡,可得:
\[ \frac{d}{dt} \int_{x_s^-}^{x_s^+}U\,dx+ F_2-F_1=0 \]
当控制体厚度趋于零时,积分项只保留激波移动扫过间断所造成的贡献(why):
\[ \frac{d}{dt} \int_{x_s^-}^{x_s^+}U\,dx= -s\left(U_2-U_1\right) \]
设激波位置为 \(x=x_s(t)\),速度为:
\[ s=\frac{dx_s}{dt} \]
在激波附近取一个随激波一起运动的微小控制体:
\[ [x_s(t)-\varepsilon,\;x_s(t)+\varepsilon] \]
积分量为:
\[ I(t)=\int_{x_s(t)-\varepsilon}^{x_s(t)+\varepsilon}U(x,t)\,dx \]
当 \(\varepsilon\) 很小时,可近似认为:
\[ U(x,t)= \begin{cases} U_1, & x<x_s(t)\\ U_2, & x>x_s(t) \end{cases} \]
关键点:
积分区间内真正发生变化的,不是 \(U_1\)
和 \(U_2\)
本身,而是激波移动后,左状态区域和右状态区域的长度发生了变化。
假设在很短时间 \(\Delta t\) 内,激波向右移动:
\[ \Delta x_s=s\Delta t \]
原来属于右状态 \(U_2\) 的一小段区域,被左状态 \(U_1\) 取代,长度为 \(s\Delta t\)。
因此积分量的变化为:
\[ \Delta I= U_1(s\Delta t)-U_2(s\Delta t)=-s\left(U_2-U_1\right)\Delta t \]
两边除以 \(\Delta t\),并令 \(\Delta t\to0\),得到:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ \frac{d}{dt} \int_{x_s^-}^{x_s^+}U\,dx= -s\left(U_2-U_1\right) } $} \]
也就是:
\[ \frac{dI}{dt}=-s[U] \]
因此:
\[ -s\left(U_2-U_1\right)+\left(F_2-F_1\right)=0 \]
即:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ s[U]=[F] } $} \]
其中:
\[ [U]=U_2-U_1,\qquad [F]=F_2-F_1 \]
Rankine–Hugoniot 关系说明:激波前后状态不能任意跳变,必须满足跨间断的质量、动量和能量守恒。
守恒形式计算的是通量差:
\[ \frac{\partial U}{\partial t} =-\frac{\partial F}{\partial x} \]
离散后对应:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ U_i^{n+1}= U_i^n -\frac{\Delta t}{\Delta x} \left( F_{i+1/2}-F_{i-1/2} \right) } $} \]
一个单元失去的质量、动量和能量,会作为通量进入相邻单元。
因此,守恒形式天然具有控制体意义上的守恒性。
非守恒形式通常包含如下项:
\[ A(q)\frac{\partial q}{\partial x} \]
在光滑流场中,这没有问题。
但在激波处,\(q\) 发生跳跃,\(\partial q/\partial x\) 不再是普通函数,而是类似 Dirac delta 的奇异分布。
此时 \(A(q)\) 在间断处到底取左值、右值,还是某种平均值,并没有唯一规定。
在激波处:
\[ q= \begin{cases} q_L, & x<x_s\\ q_R, & x>x_s \end{cases} \]
于是:
\[ \frac{\partial q}{\partial x} \]
在普通函数意义下并不存在。
因此:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ A(q)\frac{\partial q}{\partial x} } $} \]
在间断处并没有天然唯一的数学含义。
这就是非守恒形式处理激波时最根本的问题。
守恒形式为:
\[ u_t+\left(\frac{u^2}{2}\right)_x=0 \]
在光滑区域,由链式法则可写成:
\[ u_t+uu_x=0 \]
在光滑区:
\[ \left(\frac{u^2}{2}\right)_x=uu_x \]
所以两种形式等价。
假设间断左、右状态分别为:
\[ u_L,\qquad u_R \]
守恒形式给出的激波速度由 Rankine–Hugoniot 条件决定:
\[ s= \frac{f(u_L)-f(u_R)}{u_L-u_R} \]
对于 Burgers 方程:
\[ f(u)=\frac{u^2}{2} \]
因此:
\[ \colorbox{yellow}{$\displaystyle \color{black}{ s=\frac{u_L+u_R}{2} } $} \]
如果直接使用非守恒形式:
\[ u_t+uu_x=0 \]
在间断附近,\(u\) 应该取什么值并不明确。
取左值
\[ u=u_L \]
激波速度偏向左状态
取右值
\[ u=u_R \]
激波速度偏向右状态
取平均
可能依赖具体离散方法
因此,非守恒形式可能得到错误的激波传播速度和错误的激波位置。
对于喷管内正激波,激波前后必须满足:
若采用非守恒形式,激波附近的跳跃关系可能被破坏。
激波位置错误
即使网格加密,数值激波也可能不收敛到正确位置。
激波强度错误
压力、密度、温度的跳跃幅值可能不满足 Rankine–Hugoniot 关系。
质量流量不守恒
喷管中 \(\rho u A\) 可能在激波附近出现不合理变化。
收敛到错误弱解
计算也许稳定,但得到的不是物理正确的解。
| 对比项 | 守恒形式 | 非守恒形式 |
|---|---|---|
| 基本形式 | \(\dfrac{\partial U}{\partial t}+\dfrac{\partial F}{\partial x}=0\) | \(\dfrac{\partial q}{\partial t}+A(q)\dfrac{\partial q}{\partial x}=0\) |
| 光滑流动 | 适用 | 适用 |
| 激波间断 | 适用 | 不可靠 |
| 跳跃关系 | 自动满足 Rankine–Hugoniot 条件 | 不一定满足 |
| 激波位置 | 通常更可靠 | 可能偏移 |
| 物理守恒性 | 控制体意义下守恒 | 可能破坏守恒 |
守恒形式的优势在于:
一句话理解:
激波不是普通的陡梯度,而是守恒律意义下的间断。
因此,激波捕捉必须尊重守恒形式。
非守恒形式在光滑区域中可以使用,但在激波间断处会失去明确的数学意义。
真正决定激波前后状态的不是局部微分形式,而是跨间断的积分守恒关系。
因此,对于喷管内激波、激波管、高速外流、爆轰波等含间断问题,应优先采用守恒形式,并配合适当数值耗散或高分辨率激波捕捉格式。
SUMMARY AND PERSPECTIVE
准一维喷管流动算例总结
通过一个经典问题,
系统展示 CFD 方法的完整应用流程。
我们研究了两类喷管流动。
亚声速—超声速流
纯亚声速流
两种形式:
非守恒形式变量:
\[ \rho,\quad V,\quad T \]
特点:推导简单、物理直观。
守恒形式变量:
\[ \mathbf{U}= \begin{bmatrix} \rho A\\ \rho V A\\ \rho E A \end{bmatrix} \]
特点:满足守恒律,可处理不连续。
采用:
MacCormack 显式预测—校正方法
主要特点:
时间推进求稳态:
\[ \frac{\partial}{\partial t}\rightarrow 0 \]
CFL 条件:
\[ \Delta t\leq\frac{\Delta x}{a+V} \]
边界条件:
初始条件对收敛速度影响很大。
问题:
👉 激波附近出现振荡
解决:
👉 人工黏性
本质:
加入适当耗散项,抑制激波附近的非物理振荡。
可以转化为:非定常问题 + 时间推进
尤其是亚声速出口压力。
需要:
稳定且物理正确的解
一个标准 CFD 流程如下:
这也是从简单喷管算例走向复杂工程 CFD 的基本路径。
高分辨率格式:
Riemann 求解器:
隐式方法:
多维 CFD:
喷管 CFD = 守恒方程 + 时间推进 + 正确边界 + 必要耗散
CFD 的本质是:
在数值稳定性与物理真实性之间寻找平衡。
参考课件中的准一维喷管流代码,采用守恒形式计算纯亚声速收缩—扩张喷管流,并与解析解对比。
要求:
\[ \frac{\partial U}{\partial t}+\frac{\partial F}{\partial x}=J \]
数值方法采用 MacCormack 预测—校正格式。
出口为亚声速出口,需要给定出口压力:
\[ p_N=p_e \]
\[ M<1 \]
计算区域:
\[ 0\le x\le 3 \]
面积分布:
\[ \frac{A}{A_t}=1+2.2(x-1.5)^2,\qquad 0\le x\le 1.5 \]
\[ \frac{A}{A_t}=1+0.2223(x-1.5)^2,\qquad 1.5\le x\le 3.0 \]
\[ \gamma=1.4,\qquad CFL=0.5,\qquad N=61 \]
出口压比可先取:
\[ p_e/p_0=0.95 \]
计算得到稳态后,画出:
利用等熵关系和面积—马赫数关系计算解析解。注意本题为纯亚声速流动,求解马赫数时始终取亚声速分支。
要求将数值解与解析解画在同一张图中,比较:
\[ M(x),\qquad p(x),\qquad \rho(x),\qquad T(x) \]
并计算一个误差指标,例如:
\[ E_M=\max_i|M_i^{num}-M_i^{exact}| \]
选择下面 3 类参数进行讨论。
建议取:
\[ p_e/p_0=0.93,\quad 0.95,\quad 0.97 \]
讨论出口压比变化对喉部马赫数、最大马赫数和流场分布的影响。
比较两种实现:
方式一:
\[ \rho_N=2\rho_{N-1}-\rho_{N-2},\qquad T_N=\frac{p_N}{\rho_N} \]
方式二:
\[ T_N=2T_{N-1}-T_{N-2},\qquad \rho_N=\frac{p_N}{T_N} \]
讨论哪种方式与解析解更接近。
尝试改变初始 \(\rho,V,T\) 分布,讨论初始条件对最终稳态和收敛速度的影响。
提交一份打印版作业,包含:
于 5月27日随堂提交打印版报告。