Skip to content
cfd-lab:~/zh/posts/2026-04-30-cavitation-nu…online
NOTE #029DAY THU 유체역학DATE 2026.04.30READ 4 min readWORDS 1,918#유체역학#Cavitation#Multiphase#Bernoulli#유동현상

20℃的水也会沸腾 — 空化的物理

减压引发的沸腾、空化数、以及气泡溃灭的万级冲击。

20℃的水也会沸腾。只要把压力降得足够低就行。"水的沸点是100℃"这条课本结论隐藏着一个被省略的脚注:在1个大气压下。真正决定沸腾的并不是温度,而是饱和蒸气压与周围压力之间的平衡。当水在泵叶轮入口或船用螺旋桨叶尖加速,静压随之下降,常温的水也会突然沸腾。这就是空化(cavitation, 空蚀现象)。本文整理空化为何发生、如何用一个无量纲数衡量风险,以及气泡消失瞬间为何会激起万级冲击波。文末附一段在文丘里管中预测空化区的Python代码,以及一个可以亲手操作的模拟器。

沸点不由温度决定#

水的饱和蒸气压是温度的函数。

温度饱和蒸气压 pvp_v
20℃2.34 kPa(≈ 17.5 mmHg)
60℃19.9 kPa
100℃101.3 kPa(≈ 760 mmHg)
200℃1554 kPa(≈ 15 atm)

100℃之所以听起来特别,只因为在该温度下 pvp_v 恰好等于1个大气压。在压力锅里(约2个大气压)沸点升至120℃;在珠峰之巅(0.3个大气压)水在70℃就沸腾。

把这个逻辑反过来:想煮20℃的水,只需把外界压力降到约2.5 kPa,即1个大气压的1/40。一个家用真空泵就足够把温水煮沸。

麻烦的是,流动的水根本不需要真空泵

流动制造的低压 — Bernoulli的阴影#

在无粘定常流中,沿一条流线伯努利方程成立。

p+12ρu2+ρgz=constp + \tfrac{1}{2}\rho u^2 + \rho g z = \text{const}

pp 是静压,ρ\rho 是密度,uu 是速度,zz 是高度。在同一高度上,速度变快的位置静压必然下降。文丘里喉部、翼型负压面、泵叶轮入口 — 凡是流速被加快的地方,压力都会同时跳水。

如果继续推到极端,静压一旦低于工作温度对应的 pvp_v,液体就再也维持不住。微小气体核作种子,蒸气泡爆发式生长。这就是空化的诞生瞬间。

一句话总结:空化不是被加热出来的沸腾,而是由流体力学减压触发的沸腾

空化数 σ — 用一个数衡量风险#

设计者把"这台泵会不会空化"压缩成一个无量纲数,空化数

σ=ppv12ρU2\sigma = \frac{p_\infty - p_v}{\tfrac{1}{2}\rho U_\infty^2}

pp_\infty 是参考点的静压,UU_\infty 是参考速度,pvp_v 是工作温度下的饱和蒸气压。分子代表"蒸气压之上还剩多少压力余量",分母代表"流动能贡献的最大动压"。

σ\sigma 越大越安全。即便流动充分加速,动压全部转化也不足以把静压拉到 pvp_v 之下。一旦 σ\sigma 跌到临界值 σi\sigma_i 以下,空化就开始(initiation)。每种翼型或叶轮的 σi\sigma_i 不同,通常通过风洞或水洞实验测定。

旋转机械工程中,NPSH(净正吸入扬程) 起到同等作用。NPSH不足意味 σ\sigma 偏小,泵就在沸腾。

气泡之死 — 万级冲击波#

如果空化只是产生气泡,问题倒不大。真正的破坏来自气泡的消亡。

气泡漂过低压区,被流动带入压力恢复的区域。在那里,气泡内的蒸气被周围液体猛然挤压。球形气泡半径 R(t)R(t) 的演化由 Rayleigh–Plesset 方程刻画。

RR¨+32R˙2=pBpρ4νR˙R2γρRR\,\ddot R + \tfrac{3}{2}\,\dot R^2 = \frac{p_B - p_\infty}{\rho} - \frac{4\nu \dot R}{R} - \frac{2\gamma}{\rho R}

pBp_B 是气泡内压,γ\gamma 是表面张力,ν\nu 是运动粘度。当外压远高于内压时,R¨0\ddot R \ll 0,气泡在微秒尺度上溃灭。崩溃前夜液体速度逼近声速;崩溃瞬间,气泡所处位置瞬间出现万级压强的冲击波。

这种冲击反复出现后,金属表面会像麻坑一样被掏空。泵叶轮、船舶螺旋桨叶尖、水轮机转轮 — 这些都是空化侵蚀(erosion)留下的熟悉痕迹。

代码:在文丘里管中预测空化#

只要给定截面积 A(x)A(x),连续方程和伯努利定理立刻给出整条压力分布。

import numpy as np
 
def venturi_pressure_field(x, area_ratio, U_in, rho=1000.0, p_in=101300.0):
    """以余弦形收缩再恢复的文丘里管。"""
    a0, a1, a2, a3 = 0.30, 0.42, 0.58, 0.70
    A = np.ones_like(x)
    m1 = (x >= a0) & (x < a1)
    s1 = 0.5 - 0.5 * np.cos(np.pi * (x[m1] - a0) / (a1 - a0))
    A[m1] = 1.0 + (area_ratio - 1.0) * s1
    A[(x >= a1) & (x <= a2)] = area_ratio
    m2 = (x > a2) & (x < a3)
    s2 = 0.5 - 0.5 * np.cos(np.pi * (x[m2] - a2) / (a3 - a2))
    A[m2] = area_ratio + (1.0 - area_ratio) * s2
 
    u = U_in / A                              # 连续方程
    p = p_in + 0.5 * rho * (U_in**2 - u**2)   # 伯努利
    return A, u, p
 
def cavitation_zone(p, p_vapor):
    """返回空化区段的索引。"""
    return np.where(p < p_vapor)[0]
 
x = np.linspace(0, 1, 400)
A, u, p = venturi_pressure_field(x, area_ratio=0.4, U_in=5.0)
p_vapor = 2339.0  # 20℃水的饱和蒸气压
 
zone = cavitation_zone(p, p_vapor)
sigma_min = (p.min() - p_vapor) / (0.5 * 1000.0 * 5.0**2)
 
print(f"最低静压: {p.min()/1000:.1f} kPa")
print(f"sigma_min = {sigma_min:.3f}   (负值即空化)")
print(f"空化长度: 管长的 {zone.size/x.size*100:.0f}%")

area_ratio 从0.5降到0.3。喉部速度提升约1.7倍,动压增至接近3倍,静压轻而易举跌破蒸气压。σmin\sigma_{\min} 转为负值的那一刻,就是空化开始的信号。

亲手制造空化#

在下面的模拟器里直接拖动入口速度、喉部面积比、以及水温。

Top: venturi tube cross-section. Bubbles spawn where p(x) < p_vapor and collapse downstream (red ring). Bottom: pressure profile and vapor-pressure threshold. Reference: water at 20°C with p_vapor ≈ 2.3 kPa (Antoine fit used for slider).

把温度滑到60℃,在相同流速下空化要容易得多 — 蒸气压从约2 kPa跳到20 kPa。反过来把throat ratio放宽到0.6以上,适中的速度也激不起气泡。当下游气泡收缩为红色环时,你看到的就是溃灭瞬间。

你会在哪里遇到 — 泵、螺旋桨、医疗#

  • 泵与水轮机: 叶轮入口NPSH不足是最常见原因。吸入管损失、液体温度、转速都会侵蚀 σ\sigma
  • 船用螺旋桨: 叶尖涡核最先发生空化,既损伤推进效率又制造可听噪声。潜艇刻意压低转速以保持安静。
  • 阀门与节流孔: 狭窄通道压力恢复不良会侵蚀下游管道。
  • 医用超声(HIFU): 在人体组织中刻意诱发空化,用以击碎结石或加热肿瘤 — 把蚕食螺旋桨的同种崩溃冲击当作治疗手段。
  • 水锤: 水轮机停机瞬间,反向流动的水柱撞击关闭的阀门,瞬时形成负压区并伴随空化脉冲。

下次再看见气泡#

只需记住三个张力极限。

  1. 液体不需要加热也能沸腾,只要绝对压力跌破当前温度的 pvp_v
  2. σ=(ppv)/(12ρU2)\sigma = (p_\infty - p_v)/(\tfrac{1}{2}\rho U_\infty^2) 越小越危险。这就是设计者紧盯一个数的理由。
  3. 损伤来自气泡的崩溃而非诞生。要保护的是压力恢复的区域。

下次再展开泵吸入段图纸时,用一支粗荧光笔把NPSH裕度勾出来。那一条线决定叶轮的寿命。

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