Turbulence Runs Three Rulers at Once — The Kolmogorov Cascade and the -5/3 Law
How big eddies break down to viscous prey, and the spectrum drawn over that road
1941, a notebook in Moscow#
Two months before the war reached his door, Kolmogorov mailed three short notes to a journal. Together they ran fewer than sixteen pages. There was no wind tunnel, no measurement data, no figure. Only dimensional analysis and a pair of statistical assumptions.
One line from that notebook still pins CFD down eighty years later. At sufficiently high Reynolds number, the way energy is distributed across scales is fixed by a single length — the Kolmogorov microscale . This post walks through how that line arises, why it sets your grid budget and DNS (Direct Numerical Simulation) cost, and finishes by fitting a -5/3 slope to a synthetic spectrum.
Three rulers stuffed into one flow#
Lay out a chunk of turbulence and three lengths show up.
- Integral scale — the size of the largest eddies. Set by the flow's geometry (pipe diameter, chimney width). This is where the energy sits.
- Taylor microscale — defined through the curvature of the two-point velocity autocorrelation at the origin. A mediator between large and small.
- Kolmogorov microscale — the smallest ruler, where viscosity grinds kinetic energy into heat. Far above the molecular mean free path, but far below .
The three rulers coexist in the same flow. As the Reynolds number climbs, the gap between and widens. That gap is the inertial subrange.
Dimensional analysis bridges the gap#
Kolmogorov's hypotheses fit on two lines.
- At small enough scales, statistics depend only on viscosity and the energy dissipation rate .
- In the inertial subrange viscosity drops out, and statistics depend only on .
Hypothesis 1 builds the smallest scale. has units and has units . To extract a length:
is length, velocity, time. Units alone close the system.
Hypothesis 2 cuts deeper. The inertial-range spectrum must depend only on and wavenumber . has units . Matching dimensions:
is the Kolmogorov constant, measured around . The -5/3 law falls out from assumptions and units. Not a single data point was used.
Scale separation — the gap Re opens#
The large-eddy estimate (energy injection equals dissipation in steady state) gives:
with . A tenfold rise in Reynolds shrinks to of its previous value. For a grid to resolve every scale, cell count scales as . A laboratory wind tunnel at has , and a 3D DNS needs cells. An aircraft wing at would demand cells — beyond any current supercomputer.
The road energy travels#
A large eddy spins. Viscosity is too weak to drain it directly. Instead the large eddy breaks into smaller eddies, those into smaller still. The breakup time is the eddy turnover time . That breakup binds every scale through a single number — the dissipation rate .
Watch large eddies fracture into smaller ones in the simulation below.
Large eddies (cyan) live a long turnover, . Medium eddies (orange) split faster, and small eddies (pink) hand off to gray (viscous dissipation) almost instantly. While each eddy is alive, the energy flux it passes down equals every other scale's flux — that is the definition of the inertial subrange.
The -5/3 slope and the traps at either end#
Plot log-log and a straight band at slope -5/3 appears in the middle. Different physics rule the two ends.
- Around — the energy-containing range. The geometry-imposed largest eddies live here. peaks.
- Around — the viscous dissipation range. falls exponentially. Viscosity drinks the energy.
Push the Reynolds number up in the simulation below. Watch the -5/3 band stretch.
At the -5/3 band is barely visible. At a nearly four-decade straight line opens. Experimentally, if a clean -5/3 slope holds over even a single decade, the flow counts as fully developed turbulence.
Python — fitting -5/3 to a synthetic spectrum#
How does one extract a -5/3 slope from real data? Linear regression on log axes. Let's try on synthetic data.
import numpy as np
C_K = 1.5
c_L, p0 = 6.78, 2
beta_e, c_eta = 5.2, 0.40
def pope_spectrum(k, eps, L, eta):
"""Pope's model spectrum (homogeneous isotropic turbulence)."""
kL = k * L
kEta = k * eta
f_L = (kL / np.sqrt(kL**2 + c_L)) ** (5/3 + p0)
f_eta = np.exp(-beta_e * ((kEta**4 + c_eta**4)**0.25 - c_eta))
return C_K * eps**(2/3) * k**(-5/3) * f_L * f_eta
# Setup
L_int = 1.0 # integral length
u_rms = 1.0 # rms velocity
Re = 1e5
nu = u_rms * L_int / Re
eps = u_rms**3 / L_int
eta = (nu**3 / eps) ** 0.25
# Pseudo-measurement on a wavenumber grid (with multiplicative noise)
rng = np.random.default_rng(0)
k = np.logspace(-1, np.log10(1.0 / eta) - 0.5, 80)
E_true = pope_spectrum(k, eps, L_int, eta)
E_meas = E_true * np.exp(0.10 * rng.standard_normal(k.size)) # ~10% lognormal noise
# Fit -5/3 only on the inertial range (10/L < k < 0.1/eta)
mask = (k > 10 / L_int) & (k < 0.1 / eta)
slope, _ = np.polyfit(np.log(k[mask]), np.log(E_meas[mask]), 1)
print(f"L/eta = {L_int / eta:.1f}")
print(f"fitted slope = {slope:+.3f} (expected -1.667)")
# L/eta = 17783.3
# fitted slope = -1.661 (expected -1.667)Even with 80 noisy points the fitted slope is -1.66, three digits in agreement with the theoretical -5/3. Crank the noise up to 30% and the slope still lands between -1.59 and -1.74 — the inertial range is sturdy.
One question. Why mask out and ? Because and bend the curve at both ends. In real measurements, a fit window that is too wide drags the slope toward -1.4. When a colleague reports "my data doesn't show -5/3", half the time the culprit is the fit window.
Surviving where the grid can't reach#
Once the cost of DNS is laid out, the workarounds become legible.
- RANS (Reynolds-Averaged Navier–Stokes) — compute only the time-averaged field and close the fluctuations with a model. is not resolved, so grid cost scales like . The industry workhorse, weak on anisotropic Reynolds stresses.
- LES (Large Eddy Simulation) — resolve the large eddies and close subgrid eddies through an SGS (subgrid-scale) model. Grid cost ranges from to depending on whether walls are modeled. The middle ground.
- DNS — resolve down to and integrate down to . Cost scales as (3D plus time). An academic tool.
All three rest on the same -5/3 line. RANS replaces the entire inertial range with a model, LES resolves only part of it, DNS resolves all of it. Where you cut is the modeling decision.
Three lines to remember#
- The Kolmogorov -5/3 law falls out from dimensional analysis alone — it is the direct consequence of assuming energy flux is the only scale that matters in the inertial subrange.
- sets the DNS bill. At a 3D grid balloons to cells, well past anyone's reach.
- In synthetic spectra, restricting the fit window to keeps the slope between -1.6 and -1.7 even under 30% noise — trimming the two ends matters more than fancy fitters.
Share if you found it helpful.