Wind Resource Explained
On this page
Problem statement
A wind atlas says one site has a mean wind speed of 8.4 m/s at 100 m and another 5.1, and it is natural to conclude the first is 63% better. The power in its wind is 3.8 times larger. The power in the wind rises with the cube of the speed, the speed rises with height at a rate that depends on the ground and the time of day, and the mean of a skewed distribution is a poor summary of the hours that do the work.
Wind resource assessment is mostly about keeping those three effects — the cube, the distribution and the shear — in the calculation rather than collapsing them into one mean speed too early.
Quick answer
The kinetic power flowing through one square metre of rotor is
P / A = ½ · ρ · v³ (W/m², with ρ ≈ 1.225 kg/m³ at sea level)
Average that over the year hour by hour — never cube the average speed.
import requests, numpy as np, pandas as pd
def wind(lat, lon, *heights):
j = requests.get("https://archive-api.open-meteo.com/v1/archive", params={
"latitude": lat, "longitude": lon,
"start_date": "2023-01-01", "end_date": "2023-12-31",
"hourly": ",".join(f"wind_speed_{h}m" for h in heights),
"wind_speed_unit": "ms", "timezone": "UTC"}, timeout=120).json()
d = pd.DataFrame(j["hourly"])
d.index = pd.to_datetime(d.pop("time"))
return d
sites = {"Ringkøbing": (56.09, 8.24), "Hamburg": (53.55, 9.99), "Albacete": (38.99, -1.86)}
print(f"{'site':<12}{'mean v':>8}{'½ρ·mean(v³)':>14}{'½ρ·mean(v)³':>14}{'ratio':>7}")
for name, (lat, lon) in sites.items():
v = wind(lat, lon, 100)["wind_speed_100m"].to_numpy()
true_pd = 0.5 * 1.225 * np.mean(v ** 3)
naive = 0.5 * 1.225 * v.mean() ** 3
print(f"{name:<12}{v.mean():>8.2f}{true_pd:>14,.0f}{naive:>14,.0f}{true_pd / naive:>7.2f}")
site mean v ½ρ·mean(v³) ½ρ·mean(v)³ ratio
Ringkøbing 8.37 631 359 1.76
Hamburg 6.61 297 177 1.68
Albacete 5.12 167 82 2.03
Cubing the mean underestimates the energy in the wind by a factor of 1.7 to 2. And the sites differ by far more than their mean speeds suggest.
Hub-height speeds, distributions and measured shear
1. Get hourly speeds at or near hub height
Modern hub heights are 100–170 m. A 10 m station or a 10 m model level is a measurement of the ground's roughness as much as of the wind.
2. Describe the distribution, not just the mean
The Weibull distribution fits most sites: a scale c near the mean and a shape k that says how spread out the speeds are. A low k means more calm hours and more strong ones — and more energy for the same mean.
3. Extrapolate with a shear exponent measured at the site
The power law v(h) = v_ref · (h / h_ref)^α is the standard way to move between heights. α = 1/7 is a textbook value for open terrain; measured values range from 0.1 over the sea to 0.3 or more over forest and at night.
4. Correct for air density
Density falls about 1% per 100 m of elevation and changes with temperature. A site at 700 m has 7–8% less power in the wind at the same speed as one at the coast.
5. Look at direction for layout, not for energy
The wind rose decides the turbine spacing (more in the prevailing direction) and the wake losses. It changes the energy of a single turbine very little.
6. Pass the speeds through a power curve
A turbine does not capture ½ρv³. It captures nothing below cut-in, a rising fraction up to rated speed, and a flat maximum above it. The energy yield depends on how the distribution sits on that curve.
Weibull parameters, daily shear and air density
Example 1 — the Weibull parameters
from scipy import stats
print(f"{'site':<12}{'k':>6}{'c (m/s)':>9}{'calm < 3 m/s':>14}{'> 12 m/s':>10}")
for name, (lat, lon) in sites.items():
v = wind(lat, lon, 100)["wind_speed_100m"].to_numpy()
k, _, c = stats.weibull_min.fit(v[v > 0], floc=0)
print(f"{name:<12}{k:>6.2f}{c:>9.2f}{(v < 3).mean():>14.0%}{(v > 12).mean():>10.0%}")
site k c (m/s) calm < 3 m/s > 12 m/s
Ringkøbing 2.19 9.44 7% 17%
Hamburg 2.29 7.46 12% 5%
Albacete 1.83 5.75 26% 1%
The Albacete site has a lower k — a more spread-out distribution — and a quarter of the year below 3 m/s, where a turbine produces nothing at all.
Example 2 — shear changes with the time of day
d = wind(53.55, 9.99, 10, 100)
ok = (d.wind_speed_10m > 1) & (d.wind_speed_100m > 1)
alpha = np.log(d.wind_speed_100m[ok] / d.wind_speed_10m[ok]) / np.log(100 / 10)
by_hour = alpha.groupby(alpha.index.hour).median()
print(f"annual median α: {alpha.median():.3f}")
print(f"lowest at {by_hour.idxmin():02d}:00 UTC ({by_hour.min():.3f}), "
f"highest at {by_hour.idxmax():02d}:00 UTC ({by_hour.max():.3f})")
print(f"textbook 1/7 = {1 / 7:.3f}")
annual median α: 0.223
lowest at 11:00 UTC (0.138), highest at 02:00 UTC (0.274)
textbook 1/7 = 0.143
In the afternoon, sunshine stirs the lower atmosphere and the wind is nearly the same at 10 m and 100 m. At night the ground cools, the air near it stratifies and the upper wind decouples from the lower. A single α is an average over two different atmospheres.
Example 3 — air density at elevation
j = requests.get("https://archive-api.open-meteo.com/v1/archive", params={
"latitude": 38.99, "longitude": -1.86,
"start_date": "2023-01-01", "end_date": "2023-12-31",
"hourly": "surface_pressure,temperature_2m", "timezone": "UTC"},
timeout=120).json()
p = np.array(j["hourly"]["surface_pressure"]) * 100 # hPa → Pa
t = np.array(j["hourly"]["temperature_2m"]) + 273.15
rho = p / (287.05 * t)
print(f"Albacete, {j['elevation']:.0f} m: mean density {rho.mean():.3f} kg/m³ "
f"({rho.mean() / 1.225 - 1:+.1%} against the 1.225 standard)")
print(f"range over the year: {rho.min():.3f}–{rho.max():.3f} kg/m³")
Albacete, 688 m: mean density 1.133 kg/m³ (-7.5% against the 1.225 standard)
range over the year: 1.045–1.228 kg/m³
Power curves are published at the standard 1.225 kg/m³. At this site every hour of wind carries less energy than the curve assumes, and the correction is not small next to the differences between candidate turbines.
Why the cube dominates everything
Why the cube dominates everything
A site with 10% higher speeds has about 33% more power in the wind. Errors propagate the same way: a 5% bias in a wind atlas is a 15% bias in energy before the power curve softens it. This is why the rest of the method — heights, shear, density — matters more than it would for almost any other variable.
Why the distribution matters as much as the mean
Because the cube is convex, spread increases the mean of v³. Two sites with the same mean speed and different Weibull shapes carry different energy, and the difference is systematic: gustier, more variable sites carry more.
Why a turbine blunts all of this
The power curve is roughly cubic only between cut-in and rated speed. Above rated the extra energy is thrown away; below cut-in there is none. So a turbine converts the cube into something much flatter, and the ratio between two sites in turbine output is smaller than the ratio in wind power density. That is the subject of the Weibull energy guide.
Reanalysis cells, forests, offshore and icing
- Reanalysis grid cells (ERA5 is about 30 km) smooth out hills and coastlines; local ridges can be much windier than the cell.
- Forest canopies raise the effective ground level by most of the tree height (the displacement height) and push α well above 0.2.
- Offshore α is often 0.1 or less, and density is high; both favour the site.
- Icing and extreme gusts do not change the mean energy much but decide turbine class and downtime.
- Direction sectors: for layout, fit Weibull parameters per 30° sector; the energy of one turbine rarely needs it.
Internal links
- How to estimate wind speed at hub height — measuring and applying the shear exponent
- How to estimate wind energy with a Weibull distribution — distribution through a power curve
- Wind energy from the mean speed is wrong — the fix guide for the cube
- Wind speed at 10 m used as hub height — the fix guide for shear
- Capacity factor explained — gross and net turbine output
- NetCDF and gridded data explained — what a reanalysis value represents
FAQ
How much power is in the wind?
½ρv³ watts per square metre of area perpendicular to the flow: about 600 W/m² at 10 m/s at sea level.
Why can't I use the mean wind speed?
Power depends on v³, and the mean of the cube is 1.7–2 times the cube of the mean for typical wind distributions.
What is the Weibull k parameter?
The shape of the distribution. Low k means more spread; for the same mean speed a lower k carries more energy.
What shear exponent should I use?
One measured at the site or computed from two model heights. 1/7 is a textbook value that underestimates shear over most land.
Does air density matter?
Yes: power is proportional to density, which falls about 1% per 100 m of elevation and varies with temperature.
Does wind direction change the energy yield?
Barely, for one turbine. It matters for the layout of many turbines because of wakes.