Translated from the author's Korean original. Read the original (한국어)
Waves Hanging in the Sky — The Kelvin-Helmholtz Instability
With equal density and no gravity or surface tension, sigma equals k times ΔU over 2, and short waves run away.
Every so often the sky wears a row of frozen ocean waves. Hook-shaped crests, lined up like breakers. In a photo they look faked. They are real clouds. Kelvin-Helmholtz clouds. The air is copying a wave the instant before it breaks.
The hooks start on a thin boundary where a fast stream meets a slow one. A shear layer. That boundary refuses to stay flat. When it rolls, and when it stays quiet, sits in one growth-rate formula. At the end a thin vortex sheet gets rolled up by hand.
Move the sliders for shear , density ratio, gravity, and surface tension. The growth-rate curve either lies down on the floor or the orange band pinches in from both sides.
Drop near 6 and the curve flips to "STABLE." Raise gravity or surface tension and the unstable band shrinks from both ends. Push the density ratio toward 1 and the curve shoots up under a weak shear.
Waves Hanging in the Sky#
Kelvin-Helmholtz clouds are not the only place this happens. The same thing plays out everywhere. The seams where Jupiter's bands split apart, the internal waves where seawater of different densities slides past itself, the brief spiral when you pour milk into coffee. Even the point where a rising ribbon of cigarette smoke suddenly scatters follows the same rule.
They share one ingredient. Two fluid layers flow side by side at different speeds. The upper layer fast, the lower layer slow. The thin boundary between them slips. That slip — the shear — is the seed.
Intuitively you might expect the two streams to just glide past each other. They do not. Even the tiniest ripple on the boundary grows on its own. This is the Kelvin-Helmholtz instability (a shear-driven instability of the interface).
What Happens When Two Streams Slip#
Say a small bump rises on the boundary. The fast upper stream has to go over it. The passage over the crest narrows. To keep the flow rate the same, the fluid speeds up where the passage is tight.
Faster means lower pressure. That is Bernoulli's principle (where the flow is fast, the pressure is low). Lower pressure above the crest sucks the crest up even more. In the trough the opposite happens: the flow slows, the pressure rises, and the trough gets pushed down harder.
So the crest rises higher and the trough digs deeper. A small ripple feeds itself — a positive feedback. Once it starts, it does not stop. That is the core mechanism of the instability.
One common misconception: "Heavy water below, light air above — isn't that stable?" By gravity alone, yes. But strong enough shear beats gravity's stabilizing effect. Even a stable stratification collapses in front of a strong wind.
The Dispersion Relation — Which Wavelengths Grow#
This tug-of-war compresses into a single equation. An upper layer (density ) and a lower layer (density ) slip past each other at relative speed , with gravity and surface tension acting on the interface. The rate at which a ripple of wavenumber (waves per unit length) grows — its growth rate — is:
is how fast the ripple grows. The first term under the root is shear (it destabilizes), the second is gravity (heavy fluid below stabilizes), and the third is surface tension (it pulls the interface taut and stabilizes).
If the radicand is positive, is real and the ripple grows exponentially. If negative, is imaginary — the ripple only oscillates and never grows. The instability condition is that the radicand is positive, i.e., shear beats the other two.
Look at the purest case. If the two layers have equal density () and there is no gravity or surface tension, the formula collapses to something strikingly simple.
The larger the wavenumber — the shorter the wavelength — the faster it grows. With no brakes at all, arbitrarily short wavelengths blow up. In real flow, viscosity cuts off this runaway at the short-wavelength end.
Gravity and Surface Tension Hit the Brakes#
The two brakes stop different wavelengths. The gravity term scales as , so it suppresses long waves (small ). The surface-tension term scales as , so it suppresses short waves (large ). A band of unstable wavelengths survives in between.
If the shear is weak, that band never opens. Increase the shear and at some point instability breaks through first at one particular wavelength. That threshold is exactly the minimum wind speed at which a breeze starts raising waves on a calm surface.
Plug in air and water and you get , with the first wavelength to break through at about 1.7 cm. Kelvin computed this in the 19th century. (A real water surface ripples at lower wind speeds too, because of viscosity — a limit of the ideal theory.)
For a continuously stratified flow, the verdict comes from the Richardson number (the ratio of buoyancy to shear). , where is the buoyancy frequency. The Miles-Howard theorem says instability is possible somewhere below . It is the working criterion for predicting when turbulence erupts in the atmosphere and ocean.
The orange band on the curve above is the window that first opens at this threshold. The velocity inside a rolled-up core overlaps the split drawn in forced and free vortices.
Drawing the Growth-Rate Curve in Python#
Port the formula straight into code and you can read off which wavelength grows first at any wind speed.
import math
def kh_growth_rate(k, dU, rho_u, rho_l, g=9.81, T=0.072):
"""Growth rate sigma(k) of a Kelvin-Helmholtz mode."""
shear = rho_u * rho_l * dU**2 / (rho_u + rho_l)**2 # destabilizing (shear)
gravity = g * (rho_l - rho_u) / ((rho_u + rho_l) * k) # stabilizes long waves
tension = T * k / (rho_u + rho_l) # stabilizes short waves
disc = shear - gravity - tension
return k * math.sqrt(disc) if disc > 0 else 0.0
rho_air, rho_water = 1.225, 1000.0
ks = [1 + 0.2 * i for i in range(4000)]
for dU in (3.0, 6.6, 10.0):
s = [kh_growth_rate(k, dU, rho_air, rho_water) for k in ks]
smax = max(s)
if smax > 0:
kstar = ks[s.index(smax)]
lam = 2 * math.pi / kstar * 100 # cm
print(f"dU={dU:4.1f} m/s -> unstable, lambda*={lam:5.2f} cm, sigma_max={smax:6.2f} /s")
else:
print(f"dU={dU:4.1f} m/s -> stable (no waves)")Running it prints:
dU= 3.0 m/s -> stable (no waves)
dU= 6.6 m/s -> unstable, lambda*= 1.69 cm, sigma_max= 4.89 /s
dU=10.0 m/s -> unstable, lambda*= 0.78 cm, sigma_max=183.30 /sRaise the vortex-count slider and the shear slider together and both the roll-up speed and the hook spacing change.
A gentle line winds into a cat's eye in a few seconds. Higher rolls faster. More vortices cut the hooks finer. Reset returns a flat ripple.
At 3 m/s the surface stays calm. Cross 6.6 m/s and the first ripple has cm and /s. At 10 m/s, cm and /s. Wind only rises by about 1.5, from 6.6 to 10. The growth rate jumps by about 37, from 4.89 to 183.30. Just above threshold the radicand is thin.
The printed 1.69 cm is , roughly . Drop that and into the unbraked formula and lands in the thousands per second. The printed 4.89 /s is a different order. At 6.6 m/s, shear nearly cancels gravity and surface tension. The densities are air 1.225 and water 1000, with and . Those four numbers make m/s. The drop from 1.69 cm to 0.78 cm means the short side is starting to win.
The eye shows up after the linear stage#
Linear theory holds while the bump is still small. Once the crest is large, the story changes. The interface does not stop at a wave. It rolls up whole. The thin vortex sheet winds into a train. That is the hook cloud, Stuart's cat's eye.
The growth-rate formula only sees the linear stage, the first rise of the ripple. The cat's eye is nonlinear. The interface pulls on itself. Each marker tugs its neighbors through an inviscid induced velocity. The ripple stands up. Then it rolls.
Above Ri of 1/4, shear alone does not roll it#
If sits above 1/4, the Miles-Howard theorem does not allow instability. Stratification is holding the shear down. On an air-water interface the printout is stable whenever is under 6.6 m/s. The 3 m/s line opens no wave at all.
The same interface, broken into drops by tension alone, is Plateau–Rayleigh breakup of a liquid jet. Here the only question is whether shear beats that tension. With no brakes, as in , short waves win without limit. Viscosity cuts that end off. A hook in the sky means shear already won, before that cutoff.
Related
Share if you found it helpful.