The World Energy Model: Structure, Weights, and Behaviour
This report describes a model of the world energy system. The model has 86,622 nodes and 197,068 weighted links. It shows how a change at one point in the system travels to every other point.
1. What the model does
The model answers one question. If something changes here, what changes elsewhere, by how much, and how soon?
A node is one part of the system: a price benchmark, a national grid, a power station, a household group, or a recorded disaster.
A link connects two nodes. Each link carries a weight, and the weight says how strongly a change at the first node moves the second.
A change is applied at one or more nodes. The model then calculates the effect at every other node.
2. What the model contains
| Node type | Count | What one node is |
|---|---|---|
| Power station | 34,936 | One real United States plant, with its coordinates |
| Consumer group | 35,207 | Households or industry in one district |
| Fuel supply | 725 | One fuel in one country |
| District | 571 | One part of a national grid |
| Historical event | 9,259 | One recorded disaster, with its real damage cost |
| National grid | 3,546 | The power system of one country |
| Price benchmark | 6 | One traded price, such as Brent crude |
| Behaviour channel | 6 | One psychological effect on demand |
| Climate system | 2 | Carbon dioxide level and temperature anomaly |
| Total | 86,622 |
3. Where the numbers come from
| Source | What it gives the model | Size |
|---|---|---|
| Energy Institute Statistical Review | Fuel mix and electricity demand for each country | 299,321 rows, 1965 to 2025 |
| Our World in Data | Fuel shares for 182 more countries | 11,285 country-years |
| WRI Global Power Plant Database v1.3 | Every generating unit in the world database, at its recorded coordinate, with capacity and fuel | 34,936 units, 167 countries |
| GeoNames cities15000 | Settlements above fifteen thousand people, and the population and concentration of each administrative division | 34,068 settlements, 2,786 divisions |
| USGS earthquake catalogue | Earthquakes of magnitude 5.5 and above that reach infrastructure | 8,733 wired events |
| NGA World Port Index | Ports | 2,896 |
| FRED | Daily price histories | 9 series, 38,633 observations |
| EM-DAT | Recorded disasters with damage costs | 27,727 events; 14,057 energy-relevant |
| NOAA Mauna Loa | Carbon dioxide level | 820 months |
| NASA GISTEMP | Global temperature anomaly | 146 years |
| LASP LISIRD, NRLTSI2 | Total solar irradiance, the solar constant the space layer runs on | 44 years, with uncertainties |
| NOAA CPC, Oceanic Niño Index | El Niño and La Niña | 917 overlapping seasons, 1950 on |
| NOAA CPC, standardised NAO | The North Atlantic Oscillation | 917 months, 1950 on |
| Orbital geometry | Annual mean insolation by latitude. Computed, not measured, and checked against S0/4 | 18 bands |
| Allen Brain Atlas | Brain structures for the behaviour nodes | 6 channels matched |
| FAOSTAT | Nitrogen fertilizer use | 12,734 area-years |
The complete data set is 11.5 GB. It is stored in 13 folders by subject.
One group of values is not measured. The consumer response values come from published studies. These are the only assumed parameters in the model, and they are marked as assumed in the provenance report.
4. How the model calculates
4.1 The state of a node
Each node holds one number. This number is the effect. An effect of 0 means no change. A positive effect means more stress or a higher price. A negative effect means relief or a lower price. The effect stays between -1 and +1.
4.2 Which way a link carries
Most couplings in this system run both ways. A grid and the plants feeding it move together, and so do a price benchmark and the supplies priced against it. Two layers are different. An earthquake acts on a grid and no grid causes an earthquake, and the same holds for the climate.
So the layers carry a rank: climate 0, events 1, everything else 2. A link between equal ranks carries in both directions. A link that crosses a rank carries one way only, from the lower rank to the higher. The exogenous layers drive and are not driven.
4.3 How a node weighs its drivers
Each link is divided by the number of links arriving at the same node from the same layer. A layer therefore speaks once however many members it has, and the members split that one voice between them. What remains is divided by the node's total incoming weight, so a node's inflow is the weighted mean of what its drivers are carrying.
The mean rather than the sum is the load-bearing choice. A national grid carries thousands of plants, and a node that added what its drivers carried would multiply a change by its own degree instead of distributing it.
4.4 The calculation
The model repeats these steps until the numbers stop moving:
- For each node, take the weighted mean of the effects arriving along its links, using the coefficients from 4.3.
- Multiply that inflow by (1 − inertia) for that node.
- Add the applied change at that node, if any.
- Apply the tanh function. This keeps the result between -1 and +1.
- Move the node most of the way to this new value.
The model stops when no node moves more than 0.00001 in one step, and gives up at sixty steps. Nothing in this write-up reaches sixty.
5. How the model is weighted
5.1 Link weights
There are 197,068 links, with weights between -0.670 and +1.000. Of these, 1,144 are negative. A negative link carries relief rather than stress.
| Link | Weight | Where the weight comes from |
|---|---|---|
| Climate system → temperature | 0.85 | Fixed. The temperature follows the forcing closely. |
| Oil price → related prices | 0.70 to 0.80 | Observed price correlation |
| Fuel supply → national grid | 0.55 × fuel share | The real share of that fuel in that country's power |
| Price benchmark → fuel supply | 0.35 + 0.40 × share | Higher where the country depends more on that fuel |
| National grid → district | 0.60 | Fixed. Districts are parts of the grid. |
| District → consumer group | 0.50 | Fixed. |
| Historical event → grid | 0.05 to 0.50 | log10 of the real damage cost in dollars |
| Temperature → national grid | 0.30 | Heating and cooling demand |
| Temperature → gas and power price | 0.15 to 0.20 | Heating and cooling demand |
| Consumer group → district | negative | Demand response. Consumers use less when costs rise. |
| Power station → grid | 0.45 ÷ plant count | Normalised. See section 5.3. |
5.2 Node inertia
Inertia says how strongly a node resists change. A value of 0 means the node reacts at once. A value of 1 means the node almost never moves.
| Node type | Inertia | Reason |
|---|---|---|
| Historical event | 0.15 | An event happens at once. |
| Price benchmark | 0.09 to 0.30 | Set by the real volatility of that price series. A more volatile price reacts faster. |
| National grid | 0.30 | A grid must balance in seconds. |
| Fuel supply, district | 0.35 | Supply chains take weeks. |
| Consumer group, power station | 0.45 | People and plants change slowly. |
| Climate system | 0.45 to 0.55 | The climate is a slow variable. |
| Behaviour channel | 0.75 | Habits change very slowly. |
5.3 Fan-in normalisation
A grid has thousands of plants connected to it. If each plant sent its full link weight, China's 4,235 plants would together send 1,042, and the grid would saturate for any change at all.
The model divides each link by the number of links reaching the same node from the same layer, so a layer's total influence does not grow with its membership. Adding more plants therefore improves the detail of the model. It does not make the grid more sensitive.
The rule keeps the layers commensurable. The Chinese grid hears its plants at 0.246, its markets at 0.265, the climate at 0.300, its fuel supplies at 0.108 and the disaster record at 0.500, so a change in the country's coal supply moves it and a change at one of its 4,235 plants does not.
6. How the model behaves
| Kind of change | Widest in that kind | Nodes that changed |
|---|---|---|
| Universe & Earth, exogenous | A step in climate forcing | 77,669 |
| Climate goal meetings | Paris, fully met | 76,165 |
| Country policy changes | The United States retires coal | 13,969 |
| Natural disasters | A major California earthquake | 13,969 |
| Technology improvement & buildout | Fusion arrives at scale | 6,983 |
| Wars | A war of 1939-45 scale | 5,478 |
| Energy makeup evolution | Renewables pass half of world power | 5,121 |
| People & cognition | Fear becomes salient | 3,004 |
| Global pandemics | The Black Death, at today's scale | 2,744 |
7. How to run the model
There are three ways. All three use the same calculation.
| Method | Command | Use |
|---|---|---|
| Julia | julia run.jl | Fastest. No packages needed. |
| Terminal application | python3 energy_terminal.py | Interactive. Browse, shock, trace routes. |
| Charts | python3 make_chart.py | Produces the summary figures. |
The Julia version and the Python version give the same numbers, node by node.
The check file is calibrate/out/parity_target.json.
Figures from this model
The routes through the system, computed from the link weights. All figures.