本节摘要:无粘绝热(等熵)流动中滞止参数守恒,变截面管道里亚音速与超音速气流对"缩"与"张"的反应截然相反,喉道是唯一的声速关卡。激波是极薄(分子平均自由程量级)的突跃面,跨过它参数跳变、熵增、总压损失,正激波关系式给出全部定量结果。本节用 Python 实现正激波计算器并讨论损失。
跨音速飞机曾经是航空工业的鬼门关:1940 年代俯冲的螺旋桨飞机接近声速时猛烈抖振、抬头失控,多起机毁人亡。今天我们知道,那是激波首次以致命姿态登场——机翼局部流速率先超过声速,激波在翼面上生成、后移、引发分离抖振。要理解这段历史,得先弄清"光滑膨胀"与"突跃压缩"这两条完全不同的状态变化路径。
等熵假设下(无粘、绝热),连续性 + 能量 + 状态方程联合给出面积-马赫数关系。结论非常有戏剧性:
原因是密度变化接管了:超音速气流膨胀时密度下降比速度上升更快,要维持质量流量,截面必须增大才能"腾出地方"。推论就是著名的喉道定则:亚音速要加速到超音速,必须经过一个先缩后张的通道,且恰好声速出现在最小截面(喉道)。这是拉瓦尔喷管的全部几何哲学(下一节展开)。
超音速气流被突然压缩(撞上钝头、迎上高压背压)时,来不及光滑调整,参数在约 10⁻⁷ 米、几个分子平均自由程的厚度内完成跳变——宏观上就是一张无限薄的"墙"。跨正激波的质量、动量、能量守恒给出兰金-雨贡纽关系式。用马赫数为唯一自变量的版本(γ = 1.4):
Ma₂ = (1 + 0.2 Ma₁²)/(1.4 Ma₁² − 0.2),p₂/p₁ = (2.8 Ma₁² − 0.4)/2.4,T₂/T₁ 由状态方程导出。
import numpy as np def normal_shock(Ma1, gamma=1.4): Ma2 = (1 + (gamma-1)/2*Ma1**2) / (gamma*Ma1**2 - (gamma-1)/2) p_ratio = 1 + 2*gamma/(gamma+1) * (Ma1**2 - 1) T_ratio = p_ratio * ((2 + (gamma-1)*Ma1**2) / ((gamma+1)*Ma1**2)) p0_ratio = (p_ratio)**(gamma/(gamma-1)) * \ ((2 + (gamma-1)*Ma1**2) / (1 + (gamma-1)/2*Ma2**2))**(-gamma/(gamma-1)) return Ma2, p_ratio, T_ratio, p0_ratio print("Ma1 Ma2 p2/p1 T2/T1 p02/p01 总压恢复") for Ma1 in [1.2, 1.5, 2.0, 3.0, 5.0]: m2, pr, tr, po = normal_shock(Ma1) print(f"{Ma1:4.1f} {m2:5.2f} {pr:6.1f} {tr:5.2f} {po:6.3f}")
读输出的三行真相:
物理上熵增来自激波内部极强的速度梯度与(被我们忽略的)粘性/热传导耗散——激波是自然界把不可逆过程压缩到极薄层的装置。工程上对它又爱又恨:超音速进气道用多道斜激波逐级压缩(每道弱一点、总损失更小)来替代一道强正激波;而超声速风洞则全力避免试验段出现激波。
斜激波是正激波的"斜着放"版本:气流跨过它方向偏折、参数突跃,强度由来流马赫数与楔角共同决定;楔角超过最大偏折角时激波脱体成弓形(钝头前的情况)。膨胀扇(普朗特-迈耶膨胀) 则相反:超音速气流绕外凸角光滑等熵膨胀,马赫数升高、静压下降、没有损失。超音速机翼设计就是"上表面膨胀扇加速、前缘斜激波减速"的配平游戏。
| 损失来源 | 机理 | 无量纲指标 | 工程对策 |
|---|---|---|---|
| 正激波 | 突跃压缩的熵增 | 总压恢复 σ | 改用多道斜激波、进气道造型 |
| 斜激波系 | 多次弱突跃 | σ 提升至 0.9 以上 | 可调唇口、等熵进气道 |
| 壁面摩擦 | 边界层耗散 | 摩阻系数 | 边界层吸除、控制转捩 |
| 波阻 | 激波诱发的压差 | 波阻系数 | 超临界翼型、面积律 |
⚠️ 常见坑:把激波当"等熵过程"计算。静压跳变可以用等熵公式勉强近似,但总压损失是激波的本质属性,忽略它设计的进气道/喷管,实测性能必然低于计算——跨音速压气机早期的失败多源于此。
亚音速里皮托管直接读总压,超音速不行——管口前必有一道脱体弓激波,近似按正激波处理。皮托管读到的其实是"波后总压",要恢复来流总压必须除以激波总压恢复比。这就是超音速空速管公式的来历:由读数与静压联立迭代解出 Ma。
import numpy as np from scipy.optimize import brentq g = 1.4 def rayleigh(Ma): # 正激波后总压与来流静压之比 return ((g+1)*Ma**2/2)**(g/(g-1)) * ((g+1)/(2*g*Ma**2-(g-1)))**(1/(g-1)) p_read, p_static = 180.0, 20.0 # kPa 示意读数 ratio = p_read / p_static Ma = brentq(lambda m: rayleigh(m) - ratio, 1.0, 8.0) print(f"雷利公式解出来流马赫数 {Ma:.2f}")
这个雷利皮托公式是超音速风洞与早期导弹空速测量的标准工具。它再次体现本章的方法论:遇到激波不是绕开,而是把激波关系式编进测量链条——突跃被方程化之后,反而成了可利用的传感介质。
⚠️ 排错提示:CFD 里若发现超音速区某处总压"升高",先查数值格式——激波处总压只能降不能升,物理上熵增单向。这是检验格式是否产生非物理振荡的常用哨兵。
工具备齐,下一节把它们装进一件改变航空史的部件:拉瓦尔喷管。