Skip to content
cfd-lab:~/zh/posts/2026-06-18-de-laval-nozz…online
NOTE #078DAY THU 유체역학DATE 2026.06.18READ 4 min readWORDS 1,784#유동현상#Compressible-Flow#De-Laval-Nozzle#Choked-Flow#Gas-Dynamics

想超声速就把管子加宽 — 缩放喷管与壅塞

从面积马赫关系到背压决定的七种喷管流动

捏住花园水管的出口,水会喷得更快。把它收窄,速度就提高 — 直觉到此为止。可火箭喷管的形状恰恰相反,喉部之后像小号一样张开。气体一旦越过声速,只有把管子加宽才能继续加速。本文用面积马赫关系追踪这个反转为何发生,再让你拉动背压,观察喷管内部依次上演的七个阶段。

收窄会加速,越过声速则相反#

在可压缩流动(密度会变化的流动)中,面积与速度的关系随马赫数而翻转。一维等熵流的面积速度关系一行就讲清楚了。

dAA=(M21)dVV\frac{dA}{A} = (M^2 - 1)\,\frac{dV}{V}

其中 AA 是横截面积,VV 是速度,MM 是马赫数(速度除以声速)。符号是关键。

亚声速(M<1M<1)时 M21<0M^2-1<0。要提高速度(dV>0dV>0)就得缩小面积(dA<0dA<0)。这正是捏水管的直觉。

超声速(M>1M>1)时 M21>0M^2-1>0。想再快就必须扩大面积。符号翻转了。

所以要把气体加速到声速之外,先收窄使其达到声速,再从那一点开始加宽。这种先收后扩的形状就是缩放喷管(de Laval 喷管)。最窄处称为喉部。

一个面积,两个马赫数#

面积马赫关系把等熵流中的横截面积与马赫数联系起来。

AA=1M[2γ+1(1+γ12M2)]γ+12(γ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)}}

其中 AA^*M=1M=1 处的临界截面积(喉部面积),γ\gamma 是比热比(定压比热除以定容比热,空气约为 1.4)。

右端是一条 U 形曲线,在 M=1M=1 处取最小值 1。因此大于 1 的每个面积比都对应两个马赫数解:一个亚声速,一个超声速。

在下面的图中拖动面积比试试。

M=1M=0.20M=2.64Mach numberA / A*
subsonic: M=0.197, p/p0=0.973  |  supersonic: M=2.637, p/p0=0.047

加大面积比,两个根会向两侧分开。亚声速根趋于 0,超声速根越来越大。即便喷管形状相同,流动走哪一支由出口处的压力——也就是背压——决定。

壅塞 — 喉部再也容纳不下的瞬间#

逐渐降低背压,通过喷管的质量流量会增加。但不会无限增加。喉部速度达到声速(M=1M=1)的那一刻就撞上了上限。

原因在于信息传播的速度。压力扰动以声速向上游传播。当喉部达到声速,下游的压力变化信号便无法逆流回上游。喉部上游"无从知道"背压又降低了。质量流量被锁定在最大值。这种状态称为壅塞。

壅塞喷管的最大质量流量只由喉部面积 AA^* 和滞止条件决定。

m˙=Ap0γRT0(2γ+1)γ+12(γ1)\dot{m} = A^* \, p_0 \sqrt{\frac{\gamma}{R T_0}} \left(\frac{2}{\gamma+1}\right)^{\frac{\gamma+1}{2(\gamma-1)}}

其中 p0p_0 是滞止压力,T0T_0 是滞止温度,RR 是气体常数。无论背压再怎么下降,这个值都不变。火箭发动机的推力之所以通过喉部尺寸来设计,根据就在这里。

背压下降时依次发生的七个阶段#

真正的好戏在壅塞之后才开始。把背压 pbp_b 从滞止压力 p0p_0 慢慢降下来,喷管内部的流动会逐级改变。

在下面的模拟中操作一下。把背压比滑块从 1.0 降到 0.05,观察喷管内部的颜色(马赫数)和下方的压力曲线。

按顺序梳理如下。

(a) 亚声速文丘里。 背压足够高时,全段都是亚声速。在喉部最快,然后在扩张段重新变慢。压力在喉部最低,在出口几乎恢复。

(b) 第一临界点。 再降背压,喉部恰好达到 M=1M=1。壅塞从这里开始。

(c)~(d) 喷管内部的激波。 继续降,流动在扩张段加速到超声速,然后遇到正激波(把流动骤然拉回亚声速的间断面)。激波之后是亚声速,于是减速并匹配背压。背压越低,激波越被推向出口一侧。

(e) 过膨胀。 激波移出出口后,喷管内部完全是超声速。但出口压力低于背压,于是喷管外的斜激波来弥合差异。这称为过膨胀(overexpanded)。

(f) 设计点。 出口压力恰好等于背压的那一个点。喷管内外都没有激波。这是效率最高的工作状态。

(g) 欠膨胀。 背压低于设计值时,出口气体在喷管外通过膨胀波继续膨胀。这称为欠膨胀(underexpanded)。

随着火箭升高、环境压力(背压)下降,它会依次经过 (e) → (f) → (g)。这就是为什么在海平面过膨胀的喷管,到了高空会越过设计点、变成欠膨胀。

用代码求解喷管#

下面的代码用二分法求面积马赫关系的两个解,并由出口面积比算出设计压力。

import numpy as np
 
def area_ratio(mach, gamma=1.4):
    """等熵面积比 A/A*(Mach 的函数)"""
    t = 1.0 + 0.5 * (gamma - 1.0) * mach**2
    expo = (gamma + 1.0) / (2.0 * (gamma - 1.0))
    return (1.0 / mach) * (2.0 / (gamma + 1.0) * t) ** expo
 
def invert_area_ratio(target, gamma=1.4, branch="sub"):
    """给定 A/A* 求 Mach 解(亚声速/超声速支)"""
    lo, hi = (1e-4, 1.0) if branch == "sub" else (1.0, 8.0)
    for _ in range(80):
        mid = 0.5 * (lo + hi)
        f = area_ratio(mid, gamma)
        # 亚声速支递减,超声速支递增
        ascending = (branch == "sup")
        if (f < target) == ascending:
            lo = mid
        else:
            hi = mid
    return 0.5 * (lo + hi)
 
def pressure_ratio(mach, gamma=1.4):
    """静压/滞止压力比 p/p0"""
    return (1.0 + 0.5 * (gamma - 1.0) * mach**2) ** (-gamma / (gamma - 1.0))
 
# 出口面积比为 4.0 的喷管的设计条件
ae_over_astar = 4.0
m_exit = invert_area_ratio(ae_over_astar, branch="sup")
p_design = pressure_ratio(m_exit)
 
print(f"设计出口 Mach     = {m_exit:.3f}")
print(f"设计压力比 pe/p0  = {p_design:.4f}")
print(f"反算面积比校验    = {area_ratio(m_exit):.3f}")

运行结果:

设计出口 Mach     = 2.940
设计压力比 pe/p0  = 0.0298
反算面积比校验    = 4.000

面积比为 4.0 的喷管把流动加速到马赫 2.94,此时出口压力约为滞止压力的 3%。换言之,当背压约为 p0p_0 的 3% 时,正是这个喷管的设计点。反算得到的面积比与输入的 4.0 一致,也证实了两个函数互为精确的反函数。

值得记住的三点#

  • 声速以下越收窄越快,越过声速则必须加宽才能更快。所以喷管是先收后扩的形状。
  • 喉部达到 M=1M=1 时喷管壅塞。再降背压也不会增加质量流量。
  • 同一个喷管会随背压在文丘里、内部激波、过膨胀、设计点、欠膨胀之间切换。出口压力等于背压的那一点就是设计点。

如果对您有帮助,请分享。