The logarithmic law and how roughness controls momentum transfer
2026-02-26
You should know
That air near the ground is slowed by friction, and that wind speed usually changes with height.
You will learn
How wind profiles are shaped by surface roughness, what turbulence does, and why the lower atmosphere is rarely moving at one single speed.
Why this matters
Wind controls fire behaviour, evapotranspiration, turbine performance, pollutant transport, and many exchanges between land and atmosphere.
If this gets hard, focus on…
Keep the physical picture in mind: surfaces drag on moving air, so wind is slower near the ground and faster higher up.
Wind turbines in Alberta’s Pincher Creek area are mounted on towers 80–120 metres tall — not for scenic reasons but because wind speed at 100 metres is typically 25–40% higher than at 10 metres. That increase translates directly into energy: wind power scales as the cube of wind speed, so a 30% increase in speed nearly doubles the available power. The tower height is an economic optimisation grounded in atmospheric physics — specifically in the logarithmic wind profile that describes how wind speed increases with height in the lowest kilometre of the atmosphere.
The logarithmic profile arises from a elegant piece of dimensional analysis. Near the ground, turbulent eddies are the dominant mechanism of momentum transfer. The relevant length scale for those eddies is simply the height above the surface; the relevant velocity scale is the friction velocity, a measure of the surface stress. Dimensional analysis then requires that wind speed increase logarithmically with height — and experimental measurements confirm this with remarkable precision over a wide range of surface types. The roughness length — the height at which the logarithmic profile theoretically reaches zero — encodes everything about the surface: it is an order of magnitude smaller over a smooth water surface than over a city, and that difference propagates through the entire profile. This model derives the log law from first principles, introduces the concept of stability corrections, and shows how surface roughness controls the wind resource at turbine height.
Why does wind speed increase with height, and why does the rate of increase depend on the surface?
Measure wind speed at multiple heights: - At ground level: Nearly calm (friction with surface) - At 2 m: Light breeze - At 10 m: Moderate wind - At 100 m: Strong wind
The shape of this wind profile depends on the surface: - Ocean: Smooth → wind increases rapidly with height - Grassland: Moderate roughness → intermediate profile - Forest: Rough → wind increases slowly with height
The mathematical question: What is the equation for wind speed as a function of height, and how does surface roughness enter the model?
The atmospheric boundary layer (ABL) is the lowest ~1 km of atmosphere where surface friction matters.
Three sublayers:
Wind creates turbulent eddies that mix momentum downward.
Shear stress (momentum flux):
\tau = -\rho \overline{u'w'}
Where: - \tau = shear stress (N/m² or Pa) - \rho = air density (kg/m³) - \overline{u'w'} = covariance of horizontal and vertical wind fluctuations - Overbar = time average, prime = fluctuation from mean
Near the surface, shear stress is approximately constant with height (constant stress layer).
Friction velocity (u_*):
u_* = \sqrt{\frac{\tau}{\rho}}
This is a velocity scale (m/s) characterizing turbulence intensity, not the actual wind speed.
In the surface layer, wind speed increases logarithmically with height:
u(z) = \frac{u_*}{k} \ln\left(\frac{z}{z_0}\right)
Where: - u(z) = wind speed at height z (m/s) - u_* = friction velocity (m/s) - k = 0.41 = von Kármán constant (dimensionless) - z_0 = roughness length (m)
Roughness length (z_0) is where the logarithmic profile extrapolates to zero wind speed.
Prandtl’s mixing length hypothesis:
Turbulent eddies have a characteristic size \ell (mixing length). They transport momentum proportional to:
\tau \propto \rho \ell^2 \left(\frac{du}{dz}\right)^2
Near the surface, mixing length is proportional to height:
\ell = kz
Where k is the von Kármán constant.
Combine:
\tau = \rho (kz)^2 \left(\frac{du}{dz}\right)^2
In the constant stress layer, \tau is constant. Define u_*^2 = \tau/\rho:
u_*^2 = (kz)^2 \left(\frac{du}{dz}\right)^2
\frac{du}{dz} = \frac{u_*}{kz}
Integrate:
u(z) = \frac{u_*}{k} \ln(z) + C
Boundary condition: At z = z_0, u = 0 (roughness length is where wind extrapolates to zero).
$0 = \frac{u_*}{k} \ln(z_0) + C \implies C = -\frac{u_*}{k}\ln(z_0)$
Final form:
u(z) = \frac{u_*}{k} \left[\ln(z) - \ln(z_0)\right] = \frac{u_*}{k} \ln\left(\frac{z}{z_0}\right)
This is the logarithmic wind profile or log law.
Physical meaning: Height where the logarithmic profile extrapolates to zero wind.
Typical values:
| Surface Type | z_0 (m) |
|---|---|
| Open ocean, ice | 0.0001–0.001 |
| Snow surface | 0.001–0.005 |
| Bare soil, sand | 0.001–0.01 |
| Short grass | 0.01–0.05 |
| Crops | 0.05–0.15 |
| Shrubland | 0.1–0.3 |
| Deciduous forest | 0.5–2.0 |
| Conifer forest | 1.0–3.0 |
| Urban areas | 0.5–2.0 |
Rule of thumb: z_0 \approx 0.1 h, where h is vegetation height.
If wind speed is known at two heights, solve for u_*:
u_2 - u_1 = \frac{u_*}{k} \ln\left(\frac{z_2}{z_1}\right)
u_* = \frac{k(u_2 - u_1)}{\ln(z_2/z_1)}
Example: u(2\text{ m}) = 3 m/s, u(10\text{ m}) = 5 m/s:
u_* = \frac{0.41 \times (5 - 3)}{\ln(10/2)} = \frac{0.82}{1.61} = 0.51 \text{ m/s}
For tall, dense vegetation (forests, crops), wind appears to originate from a height d above the ground (zero-plane displacement).
Modified log law:
u(z) = \frac{u_*}{k} \ln\left(\frac{z - d}{z_0}\right)
Typical values: - d \approx 0.7h (where h is canopy height) - z_0 \approx 0.1h
Example: 20 m forest: - d = 14 m - z_0 = 2 m
Problem: A grassland has roughness length z_0 = 0.03 m. Wind speed at 10 m height is 8 m/s.
(a) Friction velocity
From log law:
u(10) = \frac{u_*}{k} \ln\left(\frac{10}{z_0}\right)
$8 = \frac{u_*}{0.41} \ln\left(\frac{10}{0.03}\right)$
$8 = \frac{u_*}{0.41} \ln(333.3)$
$8 = \frac{u_*}{0.41} \times 5.81$
u_* = \frac{8 \times 0.41}{5.81} = 0.565 \text{ m/s}
(b) Wind speed at 2 m
u(2) = \frac{0.565}{0.41} \ln\left(\frac{2}{0.03}\right)
= 1.378 \times \ln(66.7)
= 1.378 \times 4.20 = 5.79 \text{ m/s}
(c) Height for 12 m/s
$12 = \frac{0.565}{0.41} \ln\left(\frac{z}{0.03}\right)$
$12 = 1.378 \ln\left(\frac{z}{0.03}\right)$
\ln\left(\frac{z}{0.03}\right) = \frac{12}{1.378} = 8.71
\frac{z}{0.03} = e^{8.71} = 6063
z = 0.03 \times 6063 = 182 \text{ m}
Wind speed reaches 12 m/s at 182 m height.
Below is an interactive wind profile simulator.
<label>
Surface type:
<select id="surface-type-wind">
<option value="ocean">Open Ocean (z₀=0.0002 m)</option>
<option value="snow">Snow (z₀=0.003 m)</option>
<option value="grass" selected>Grassland (z₀=0.03 m)</option>
<option value="crops">Crops (z₀=0.10 m)</option>
<option value="forest">Forest (z₀=1.5 m)</option>
</select>
</label>
<label>
Wind speed at 10 m (m/s):
<input type="range" id="wind-ref-slider" min="2" max="20" step="1" value="8">
<span id="wind-ref-value">8</span> m/s
</label>
<label>
Custom roughness length (m):
<input type="range" id="z0-slider" min="-4" max="0.5" step="0.1" value="-1.52">
<span id="z0-value">0.03</span> m
</label>
<div class="button-group">
<button id="toggle-log-scale">Toggle Log Scale</button>
</div>
<p><strong>Friction velocity (u*):</strong> <span id="ustar-display"></span> m/s</p>
<p><strong>Wind at 2 m:</strong> <span id="wind-2m"></span> m/s</p>
<p><strong>Wind at 50 m:</strong> <span id="wind-50m"></span> m/s</p>
<p><strong>10m/2m ratio:</strong> <span id="wind-ratio"></span></p>
Try this: - Switch to ocean: Very smooth → wind increases rapidly with height - Switch to forest: Very rough → wind increases slowly, high z₀ - Toggle log scale: On log-height axis, profile becomes a straight line (proof it’s logarithmic) - Increase reference wind: Friction velocity increases proportionally - Notice: Rougher surfaces have lower wind speeds at all heights for same reference wind
Key insight: The logarithmic profile is universal — only u_* and z_0 change between surfaces.
The log profile emerges from: 1. Turbulent mixing dominates (not molecular viscosity) 2. Constant stress with height near surface 3. Mixing length proportional to height (\ell = kz)
These three assumptions lead uniquely to the logarithmic form.
Surface drag is parameterized by z_0: - Large z_0 → strong drag → more turbulence → slower wind near surface - Small z_0 → weak drag → less turbulence → faster wind near surface
Momentum flux to surface:
\tau = \rho u_*^2
Higher u_* (stronger wind or rougher surface) → more momentum transferred to ground.
Wind power increases with cube of wind speed:
P = \frac{1}{2}\rho A u^3
Why turbines are tall: At 100 m vs. 10 m:
For grassland (z_0 = 0.03 m), if u(10) = 8 m/s:
u(100) = \frac{u_*}{k}\ln(100/0.03) = \frac{0.565}{0.41}\times 8.11 = 11.2 \text{ m/s}
\frac{P(100)}{P(10)} = \left(\frac{11.2}{8}\right)^3 = 2.2
2.2× more power at 100 m!
Cities have large z_0 (buildings) → more turbulent mixing → enhanced heat/moisture transport from surface to atmosphere → affects local climate.
Our log law assumes neutral stability (no buoyancy effects).
Unstable (convective, daytime): - Warm surface → rising air - Enhanced mixing - Wind profile steeper than log law
Stable (nighttime, inversion): - Cool surface → suppressed turbulence - Reduced mixing - Wind profile less steep
Monin-Obukhov similarity theory corrects for stability.
The log law applies above vegetation, not within it.
Inside a canopy: - Wind decreases exponentially with depth - Different profile shape - Multiple length scales
The log law assumes horizontally uniform flow.
Real atmosphere has: - Pressure gradients → acceleration - Terrain variation → flow separation, channeling - Thermal effects → local circulations
Real surfaces have heterogeneous roughness: - Patchy vegetation - Urban/rural transitions - Fetch effects (distance upwind to equilibrium)
Internal boundary layers form at roughness transitions.
The same turbulent eddies that transport momentum also transport heat and moisture.
Temperature profile (analog to wind):
T(z) - T_s = \frac{H}{\rho c_p u_* k} \ln\left(\frac{z}{z_h}\right)
Where: - H = sensible heat flux (from Model 18) - z_h = roughness length for heat (typically z_h < z_0)
Moisture profile:
q(z) - q_s = \frac{LE}{L_v \rho u_* k} \ln\left(\frac{z}{z_q}\right)
Where: - q = specific humidity - z_q = roughness length for moisture
These profiles enable bulk transfer formulas used in climate models to calculate surface fluxes from atmospheric conditions.
The natural logarithm is the inverse of the exponential function:
y = e^x \iff x = \ln(y)
Where e = 2.71828... (Euler’s number).
\ln(ab) = \ln(a) + \ln(b)
\ln(a/b) = \ln(a) - \ln(b)
\ln(a^b) = b\ln(a)
\ln(1) = 0, \quad \ln(e) = 1
The differential equation:
\frac{du}{dz} = \frac{u_*}{kz}
Has solution:
u = \frac{u_*}{k}\ln(z) + C
Separating variables:
du = \frac{u_*}{k}\frac{dz}{z}
Integrate:
\int du = \int \frac{u_*}{k}\frac{dz}{z}
u = \frac{u_*}{k}\ln(z) + C
The $1/z$ term on the right forces a logarithm on the left.