Methodology · new layer
The Dunkelflaute-Index: one number for the grid's worst weather
Published 2026-07-19 · see the live layer
Dunkelflaute — "dark doldrums" — is the German compound for the power system's worst weather: no wind, no sun, and cold enough that everyone is heating. It's the scenario that stress-tests every decarbonization plan, the word that appears in Bundestag debates and TSO adequacy reports, and the regime behind most of Europe's triple-digit price spikes outside of fuel crises. Yet there has never been a live, public map that answers the simple question: how deep in a Dunkelflaute is each bidding zone, right now?
So we built one. The Dunkelflaute-Index is a 0–100 stress score per bidding zone, computed hour by hour from realized weather, on the same free map that shows the prices it helps explain.
The formula — fully disclosed
Composite indices earn distrust when their recipe is secret. Ours is three ingredients with fixed weights, chosen to mirror how a Dunkelflaute actually attacks the supply-demand balance:
| Component | Weight | Definition |
|---|---|---|
| Becalmed wind | 50% | 1 − min(wind speed / 12 m/s, 1) at the zone centroid. Wind turbines produce most of their energy in the 8–14 m/s band; below ~12 m/s output falls off steeply, and below 4 m/s it's effectively zero. |
| Dark sky | 20% | 1 − min(shortwave radiation / 600 W/m², 1). 600 W/m² is a bright-day reference; a heavy overcast winter noon delivers under 100. |
| Heating cold | 30% | max(0, min((12°C − T) / 15, 1)) on the population-weighted zone temperature. Heating demand switches on below ~12°C and saturates around −3°C — the classic heating-degree kink. |
Multiply by 100 and you have the index. A becalmed, overcast zone at −3°C scores near 100. A breezy, bright summer afternoon scores near zero. There is no machine learning in this layer — deliberately. A stress index you can compute on a napkin is one a journalist can quote and an analyst can audit.
Why these three, and why weighted this way
Wind gets half the weight because wind is the marginal renewable across northern and central Europe: German onshore + offshore wind capacity alone exceeds 70 GW, and the difference between a windy and a becalmed day is more energy than every European battery combined. Cold gets 30% because a Dunkelflaute only hurts when demand is high — the same calm, dark week in May is a non-event. Solar gets 20% because in the deep-winter weeks when Dunkelflauten cluster, solar's contribution is structurally small — but intraday it still separates a merely-calm day from a genuinely stressed one.
The honest limitations, stated plainly: the index uses realized weather (it describes stress now, not a forecast of stress next week); it doesn't know a zone's hydro reservoirs or import capacity, which are exactly the buffers that decide whether stress becomes price (we show reservoirs and flows as their own layers instead of baking assumptions into one number); and centroid wind is a proxy for a fleet-weighted capacity factor. Version 2 will weight by actual wind-farm locations.
Watch it against the price
The index earns its place because of what sits one click away: the price layer. Flip between Dunkelflaute and Price on a stressed winter evening and the correlation is unmistakable — the violet zones are the expensive zones. Here's Germany's live price card for reference:
A live embed — this exact card is free to put on your own site.
Use it
The layer is free and needs no login: voltcast.com/terminal/dunkelflaute. Scrub back through recent hours, or use the archive to replay past stress events. If you're writing about a Dunkelflaute — this winter, or the next one — the map is yours to screenshot (attribution appreciated), and the share button exports a branded PNG or a 24-hour video loop. For the underlying wind, solar and temperature series, it's one API call per zone.
The monthly European power roundup
Negative-price records, the biggest spreads, which zones were hardest to forecast — every number computed from our production data, on the 2nd of each month. No filler, unsubscribe anytime.