Reproducing observed 2024 gas burn

validation
2024
gas
GB
The load-bearing validation result, presented as a reproducible package: the model dispatches 2024 gas within 0.91% of observed outturn.
Author

Richard Lyon

Published

July 9, 2026

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.

0 80 TWh 73.45 Modelled 72.79 Observed Δ +0.91%
Modelled versus observed 2024 GB gas generation (CCGT + OCGT). The data table below is the accessible fallback.
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-reference

The 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")
Note

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?

Provenance
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.