Translated from the author's Korean original. Read the original (한국어)
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.
| Temperature | Vapor pressure |
|---|---|
| 20°C | 2.34 kPa (≈ 17.5 mmHg) |
| 60°C | 19.9 kPa |
| 100°C | 101.3 kPa (≈ 760 mmHg) |
| 200°C | 1554 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 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.
is static pressure, density, speed, 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 under the vapor pressure 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.
is the reference static pressure, the reference speed, the vapor pressure at temperature. The numerator is the margin above vapor. The denominator is the largest dynamic pressure the flow can spend.
Bigger is safer. Even a full conversion of dynamic pressure cannot drag static pressure under . Below a critical , cavitation starts. Each shape has its own , usually from a water tunnel.
In rotating machinery the twin quantity is NPSH (net positive suction head). Low NPSH means low , 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 of a spherical bubble.
is the interior pressure, surface tension, kinematic viscosity. When , 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 , 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 . The instant goes negative is the start of cavitation.
Put the code defaults on that Bernoulli line. , , . Inlet dynamic pressure is 12500 Pa, 12.5 kPa. At area ratio 0.4 the throat speed is . Throat dynamic pressure is 78125 Pa. Static pressure is 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. . Positive. The default does not trip the negative flag.
At area ratio 0.5 the throat speed is . At 0.3 it is , a ratio of 1.67. The dynamic-pressure ratio is . That division is the "1.7x" and the "nearly triple" above. At 0.3, static pressure falls to about Pa and crosses 2339 Pa, so goes negative. The inlet numerator is kPa. Divide by 12.5 kPa and the reference is about 7.9. Spend the dynamic pressure in the throat and 7.9 falls to 2.67. At 60°C the table's is 19.9 kPa, and . The same 12.5 kPa of dynamic pressure leaves a much thinner margin.
The flat throat in the code runs from to , a length of 0.16. The contraction ahead runs from to , length 0.12. Recovery runs from to , another 0.12. There are 400 samples from 0 to 1, spaced by . Then is about 168 and 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 .
- 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 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 goes negative is Keller–Miksis and the secondary Bjerknes force.
Related
Share if you found it helpful.