Skip to content
cfd-lab:~/en/posts/2026-04-30-cavitation-nu…● online

Translated from the author's Korean original. Read the original (한국어)

NOTE #027DAY THU 유체역학DATE 2026.04.30UPDATED 2026.10.19READ 6 min read#Fluid-Dynamics#Cavitation#Multiphase#Bernoulli#Flow-Phenomena

Water Boils at 20°C Too — The Physics of Cavitation

At area ratio 0.4 and 5 m/s the throat still sits near 35.7 kPa, so sigma_min stays positive until the throat closes toward 0.3.

Water boils at 20°C. Drop the pressure far enough and it does. The schoolbook line "water boils at 100°C" hides a footnote: at 1 atm. What decides boiling is the balance between saturation vapor pressure and local static pressure. When water accelerates past a pump inlet or a propeller tip, static pressure falls and room-temperature water boils. That is cavitation. Today's note is the start condition, the one number that scores the risk, and the 10,000-bar shock that shows up when a bubble dies.

Boiling is not about temperature#

Water's saturation vapor pressure is a function of temperature.

TemperatureVapor pressure pvp_v
20°C2.34 kPa (≈ 17.5 mmHg)
60°C19.9 kPa
100°C101.3 kPa (≈ 760 mmHg)
200°C1554 kPa (≈ 15 atm)

Raising inlet speed or water temperature, or pinching the throat area ratio, lengthens the stretch where the pressure curve sits under the dashed vapor line.

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).

The table's 20°C is 2.34 kPa and 60°C is 19.9 kPa. Open the throat to 0.6 and the same inlet speed stays above the dashed line. The red rings downstream are the collapse, where pressure recovers.

Nothing magical sits at 100°C. That is just where pvp_v matches 1 atm. A pressure cooker (about 2 atm) pushes the boiling point to 120°C. On Everest (0.3 atm) water boils at 70°C.

Run it backward. To boil 20°C water, drop the pressure to about 2.5 kPa, roughly 1/40 of an atmosphere. A kitchen vacuum pump is enough.

Flowing water does not need that pump.

How a flow makes its own low pressure#

Along a streamline of an inviscid steady flow, Bernoulli holds.

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

pp is static pressure, ρ\rho density, uu speed, zz elevation. At fixed height, speed up and static pressure falls. A venturi throat, the suction side of an airfoil, a pump inlet. Every acceleration is a pressure dive.

Push pp under the vapor pressure pvp_v at the operating temperature and the liquid cannot hold. Tiny gas nuclei seed vapor bubbles. Cavitation is boiling by hydrodynamic depressurization, not by heat.

The cavitation number σ — one number for the whole risk#

Designers fold "will this pump cavitate" into one dimensionless number, the cavitation number.

σ=p∞−pv12ρU∞2\sigma = \frac{p_\infty - p_v}{\tfrac{1}{2}\rho U_\infty^2}

p∞p_\infty is the reference static pressure, U∞U_\infty the reference speed, pvp_v the vapor pressure at temperature. The numerator is the margin above vapor. The denominator is the largest dynamic pressure the flow can spend.

Bigger σ\sigma is safer. Even a full conversion of dynamic pressure cannot drag static pressure under pvp_v. Below a critical σi\sigma_i, cavitation starts. Each shape has its own σi\sigma_i, usually from a water tunnel.

In rotating machinery the twin quantity is NPSH (net positive suction head). Low NPSH means low σ\sigma, and the pump is boiling. Whether that constant even holds across streamlines is the question in the Bernoulli case where total pressure fell and dissipation stayed at zero.

The death of a bubble — a 10,000-bar shock#

Bubbles alone would be a nuisance. The damage is how they die.

A bubble drifts out of the low-pressure patch into a recovery zone. The Rayleigh–Plesset equation tracks the radius R(t)R(t) of a spherical bubble.

R R¨+32 R˙2=pB−p∞ρ−4νR˙R−2γρ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 is the interior pressure, γ\gamma surface tension, ν\nu kinematic viscosity. When p∞≫pBp_\infty \gg p_B, R¨\ddot R goes hard negative and the bubble implodes in microseconds. The liquid approaches acoustic speed, then a shock of order 10,000 bar fires where the bubble was.

Repeat that and metal pits. Impellers, propeller tips, turbine runners. The usual signature of cavitation erosion.

Code: predicting cavitation in a venturi#

Given an area profile A(x)A(x), continuity and Bernoulli return the pressure.

import numpy as np
 
def venturi_pressure_field(x, area_ratio, U_in, rho=1000.0, p_in=101300.0):
    """Cosine-tapered venturi: contracts to area_ratio, then recovers."""
    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                              # continuity
    p = p_in + 0.5 * rho * (U_in**2 - u**2)   # Bernoulli
    return A, u, p
 
def cavitation_zone(p, p_vapor):
    """Indices where the static pressure drops below 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  # vapor pressure of water at 20°C, in Pa
 
zone = cavitation_zone(p, p_vapor)
sigma_min = (p.min() - p_vapor) / (0.5 * 1000.0 * 5.0**2)
 
print(f"min static pressure: {p.min()/1000:.1f} kPa")
print(f"sigma_min = {sigma_min:.3f}   (negative means cavitation)")
print(f"cavitating length: {zone.size/x.size*100:.0f}% of the tube")

Drop area_ratio from 0.5 to 0.3 and throat speed jumps by about 1.7x, dynamic pressure nearly triples, and static pressure punches through pvp_v. The instant σmin⁡\sigma_{\min} goes negative is the start of cavitation.

Put the code defaults on that Bernoulli line. ρ=1000\rho = 1000, Uin=5U_{in} = 5, pin=101300p_{in} = 101300. Inlet dynamic pressure 12ρUin2\tfrac{1}{2}\rho U_{in}^2 is 12500 Pa, 12.5 kPa. At area ratio 0.4 the throat speed is 5/0.4=12.55/0.4 = 12.5. Throat dynamic pressure is 78125 Pa. Static pressure is 101300+12500−78125=35675101300 + 12500 - 78125 = 35675 Pa, about 35.7 kPa. That is still above the code's vapor pressure, 2339 Pa. The table's 2.34 kPa is 2340 Pa, one pascal off the code. σmin⁡=(35675−2339)/12500≈2.67\sigma_{\min} = (35675 - 2339) / 12500 \approx 2.67. Positive. The default does not trip the negative flag.

At area ratio 0.5 the throat speed is 5/0.5=105/0.5 = 10. At 0.3 it is 5/0.3≈16.75/0.3 \approx 16.7, a ratio of 1.67. The dynamic-pressure ratio is (0.5/0.3)2=25/9≈2.78(0.5/0.3)^2 = 25/9 \approx 2.78. That division is the "1.7x" and the "nearly triple" above. At 0.3, static pressure falls to about −2.51×104-2.51\times 10^{4} Pa and crosses 2339 Pa, so σmin⁡\sigma_{\min} goes negative. The inlet numerator is 101.3−2.34≈99101.3 - 2.34 \approx 99 kPa. Divide by 12.5 kPa and the reference σ\sigma is about 7.9. Spend the dynamic pressure in the throat and 7.9 falls to 2.67. At 60°C the table's pvp_v is 19.9 kPa, and 19.9/2.34≈8.519.9/2.34 \approx 8.5. The same 12.5 kPa of dynamic pressure leaves a much thinner margin.

The flat throat in the code runs from a1=0.42a_1 = 0.42 to a2=0.58a_2 = 0.58, a length of 0.16. The contraction ahead runs from a0=0.30a_0 = 0.30 to a1a_1, length 0.12. Recovery runs from a2a_2 to a3=0.70a_3 = 0.70, another 0.12. There are 400 samples from 0 to 1, spaced by 1/3991/399. Then 0.42×3990.42 \times 399 is about 168 and 0.58×3990.58 \times 399 is about 231, so the flat throat is 64 cells, 16% of the tube. At area ratio 0.4 every one of those 64 cells sits at 35.7 kPa. That is above 2339 Pa, so the printed cavitating length is 0%. At area ratio 0.3 those 64 cells are all under vapor pressure, so the printed percentage is at least 16 before either ramp is counted. Inlet pressure 101300 Pa is the table's vapor pressure at 100°C, 101.3 kPa. The 20°C case needs the throat because the inlet is still far above 2.34 kPa.

Where you actually meet it — pumps, propellers, medicine#

  • Pumps and turbines: short NPSH at the impeller inlet dominates. Suction losses, temperature, and rotation rate all eat σ\sigma.
  • Ship propellers: the tip-vortex core cavitates first, cutting thrust and making noise. Submarines throttle back to stay quiet.
  • Valves and orifices: a narrow passage with weak recovery eats the downstream pipe.
  • Medical ultrasound (HIFU): cavitation inside tissue breaks kidney stones or heats tumors. The same collapse, used as a tool.
  • Water hammer: when a turbine stops, the returning column hits a closed valve, carves a brief negative-pressure pocket, and leaves a cavitation pulse.

How far to pinch the throat#

At area ratio 0.4 and 5 m/s the throat static pressure stays near 35.7 kPa and σmin⁡\sigma_{\min} near 2.67. No bubbles yet. Close it to 0.3 and static pressure goes negative. The code's negative flag turns on. The step from a throat speed of 10 to 16.7 is what decides how long the impeller lives.

The metal is scarred downstream, where pressure recovers, not in the throat itself. A calculation that pushes one bubble through the moment R¨\ddot R goes negative is Keller–Miksis and the secondary Bjerknes force.

Share if you found it helpful.