Reproducing observed 2024 gas burn
INVESTIGATION · GB-TIER REPRODUCTION
Research question
If you hand GridSim the real 2024 GB system — the actual fleet, the actual weather, the actual must-take generation and interconnector flows — and ask it to dispatch the one thing left free, gas, does it burn the amount the grid actually burned?
Method
Run scenarios/gb-2024-reference.toml. Every non-gas source (wind, solar, nuclear, biomass, hydro, coal, pumped-storage, net imports) is set to observed 2024 outturn. Gas (CCGT + OCGT) is the residual the engine must dispatch, half-hour by half-hour, to balance the system. We compare the modelled annual gas total against the observed FUELHH total.
Result
The model dispatches 73.45 TWh of gas against an observed 72.79 TWh — a deviation of +0.91%, pinned to ±0.01 TWh in the engine’s regression suite.
| Quantity | TWh | Source (public repo path) |
|---|---|---|
| Modelled gas (CCGT + OCGT) | 73.45 | grid-cli/tests/regression_2024.rs (PINNED_GAS_TWH) |
| Observed gas (FUELHH) | 72.79 | docs/notes/2024-validation-pack-report.md §2 |
| Deviation | +0.91% | derived; pinned counterfactual for a failing ±5% gate: +5.30% |
Reproduce it
Committed scenario, one command:
grid-cli run scenarios/gb-2024-reference.toml --out runs/2024-referenceThe run writes summary.toml with a header carrying the determinism triple (engine git hash · scenario SHA-256 · created-UTC) and a per-file SHA-256 for each data-pack file consumed. CI re-proves the pinned gas total on every push — the living green tick you can watch.
Regenerate the figure
The figure above is drawn from the two cited public numbers. This is the rerunnable recipe that redraws it from the committed run output rather than by hand:
# Redraw modelled-vs-observed gas from committed artefacts.
# Modelled: runs/2024-reference/summary.toml (regenerated by the command above).
# Observed: docs/notes/2024-validation-pack-report.md §2 (72.79 TWh, FUELHH).
import tomllib, matplotlib.pyplot as plt
with open("runs/2024-reference/summary.toml", "rb") as f:
summary = tomllib.load(f)
modelled = summary["gas_ccgt_twh"] + summary["gas_ocgt_twh"] # 73.45
observed = 72.79 # cited, FUELHH 2024
fig, ax = plt.subplots(figsize=(4, 3))
ax.bar(["Modelled", "Observed"], [modelled, observed])
ax.set_ylabel("Gas generation, TWh")
ax.set_title(f"2024 gas: Δ {100*(modelled-observed)/observed:+.2f}%")
fig.savefig("gas-2024.svg", bbox_inches="tight")The cell is not executed at build time on this scaffold, so quarto render has no Python dependency. At launch, investigation posts run under freeze: auto against their pinned engine tag and committed CSV/TOML.
Discussion
This is a deliberately narrow claim, and its narrowness is its strength. The model is not being credited for reproducing wind or nuclear — those are inputs. It is being tested on the one quantity it is free to get wrong. Because gas is the marginal balancing fuel in the 2024 GB system, “how much gas” is a demanding, whole-year integral of every dispatch decision the engine makes. It lands within 0.91%.
The gate has teeth: mis-assigning the 3.35 TWh FUELHH “other” wedge onto gas would push the deviation to +5.30% and fail the ±5% tolerance. That failure is pinned as a counterfactual, so widening the tolerance would itself fail a test.
Wind and solar are excluded from this comparison on purpose — under the total-generation convention they include embedded generation the transmission-metered actuals do not, so a naive fuel-by-fuel table would be a category error. See Limitations.
Conclusion
Given the real 2024 non-gas system, GridSim burns the right amount of gas to within 0.91% of what actually happened. That single run is the standing answer to the first question about any model: does it match reality?
- Engine
- grid-sim v0.1.0 · github.com/grid-modeller/grid-sim
- Scenario
-
scenarios/gb-2024-reference.toml - Pinned test
-
grid-cli/tests/regression_2024.rs - Run digest
-
779d7444…2541abd - Data pack
-
data/packs/2024.sha256· Zenodo DOI: pending Phase-0 record
Observed generation and demand: Supported by National Energy SO Open Data. Contains BMRS data © Elexon Limited copyright and database right 2024.