Skip to content
cfd-lab:~/en/posts/2026-06-02-kolmogorov-ca…online
NOTE #062DAY TUE 유체역학DATE 2026.06.02READ 5 min readWORDS 952#Turbulence#Kolmogorov#Energy-Cascade#DNS#유동현상

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 η\eta. 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 LL — the size of the largest eddies. Set by the flow's geometry (pipe diameter, chimney width). This is where the energy sits.
  • Taylor microscale λ\lambda — defined through the curvature of the two-point velocity autocorrelation at the origin. A mediator between large and small.
  • Kolmogorov microscale η\eta — the smallest ruler, where viscosity grinds kinetic energy into heat. Far above the molecular mean free path, but far below LL.

The three rulers coexist in the same flow. As the Reynolds number climbs, the gap between LL and η\eta widens. That gap is the inertial subrange.

Dimensional analysis bridges the gap#

Kolmogorov's hypotheses fit on two lines.

  1. At small enough scales, statistics depend only on viscosity ν\nu and the energy dissipation rate ε\varepsilon.
  2. In the inertial subrange viscosity drops out, and statistics depend only on ε\varepsilon.

Hypothesis 1 builds the smallest scale. ν\nu has units m2/s\mathrm{m^2/s} and ε\varepsilon has units m2/s3\mathrm{m^2/s^3}. To extract a length:

η=(ν3ε)1/4,uη=(νε)1/4,τη=(νε)1/2\eta = \left(\frac{\nu^3}{\varepsilon}\right)^{1/4}, \quad u_\eta = (\nu \varepsilon)^{1/4}, \quad \tau_\eta = \left(\frac{\nu}{\varepsilon}\right)^{1/2}

η\eta is length, uηu_\eta velocity, τη\tau_\eta time. Units alone close the system.

Hypothesis 2 cuts deeper. The inertial-range spectrum E(k)E(k) must depend only on ε\varepsilon and wavenumber kk. EE has units m3/s2\mathrm{m^3/s^2}. Matching dimensions:

E(k)=Cε2/3k5/3E(k) = C\, \varepsilon^{2/3}\, k^{-5/3}

CC is the Kolmogorov constant, measured around C1.5C \approx 1.5. 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 εu3/L\varepsilon \sim u'^3 / L (energy injection equals dissipation in steady state) gives:

ηL=Re3/4,λLRe1/2,τηTRe1/2\frac{\eta}{L} = \mathrm{Re}^{-3/4}, \quad \frac{\lambda}{L} \sim \mathrm{Re}^{-1/2}, \quad \frac{\tau_\eta}{T} \sim \mathrm{Re}^{-1/2}

with Re=uL/ν\mathrm{Re} = u'L/\nu. A tenfold rise in Reynolds shrinks η/L\eta/L to 103/40.1810^{-3/4} \approx 0.18 of its previous value. For a grid to resolve every scale, cell count scales as Re9/4\mathrm{Re}^{9/4}. A laboratory wind tunnel at Re=104\mathrm{Re} = 10^4 has L/η1,000L/\eta \approx 1{,}000, and a 3D DNS needs 109\sim 10^9 cells. An aircraft wing at Re=107\mathrm{Re} = 10^7 would demand 101510^{15} 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 τ/u\tau_\ell \sim \ell/u_\ell. That breakup binds every scale through a single number — the dissipation rate ε\varepsilon.

Watch large eddies fracture into smaller ones in the simulation below.

Each eddy lives a turnover time τ ∝ ℓ^(2/3), then splits into smaller ones. The smallest eddies (gray) dissipate as heat.

Large eddies (cyan) live a long turnover, τL2/3\tau \sim L^{2/3}. 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 E(k)E(k) log-log and a straight band at slope -5/3 appears in the middle. Different physics rule the two ends.

  • Around k1/Lk \sim 1/L — the energy-containing range. The geometry-imposed largest eddies live here. E(k)E(k) peaks.
  • Around k1/ηk \sim 1/\eta — the viscous dissipation range. E(k)E(k) falls exponentially. Viscosity drinks the energy.

Push the Reynolds number up in the simulation below. Watch the -5/3 band stretch.

Model energy spectrum E(k) on log-log axes (Pope 2000 form).
L/η = 5.62e+3  ·  η = 1.78e-4  ·  λ (Taylor) = 1.22e-2

At Re=103\mathrm{Re} = 10^3 the -5/3 band is barely visible. At Re=106\mathrm{Re} = 10^6 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 k<10/Lk < 10/L and k>0.1/ηk > 0.1/\eta? Because fLf_L and fηf_\eta 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. η\eta is not resolved, so grid cost scales like Re0\mathrm{Re}^0. 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 Re0.5\mathrm{Re}^{0.5} to Re1\mathrm{Re}^1 depending on whether walls are modeled. The middle ground.
  • DNS — resolve down to η\eta and integrate down to τη\tau_\eta. Cost scales as Re3\mathrm{Re}^{3} (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 ε\varepsilon is the only scale that matters in the inertial subrange.
  • η/L=Re3/4\eta/L = \mathrm{Re}^{-3/4} sets the DNS bill. At Re=107\mathrm{Re} = 10^7 a 3D grid balloons to 101510^{15} cells, well past anyone's reach.
  • In synthetic spectra, restricting the fit window to 10/L<k<0.1/η10/L < k < 0.1/\eta 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.