Energy Carriers#
This page covers the four energy pathways: electricity (grid decarbonisation), liquid hydrogen, jet fuel/SAF (including PtL), and methane.
Electricity#
Implementation status: Partial (coverage matrix row Electricity).
Default: linear decarbonisation. The low-carbon CI is a user input per the
RST (ci_elec_lc, DL-129 — previously a hardcoded 50 gCO₂/kWh floor),
and setting curve_elec_lc drives grid CI through the market-share
curve family (half-S, full-S, linear, accelerating, piecewise, flat,
pulse — DL-161) instead of the legacy linear interpolation. Remaining
divergence: CASCADE’s α_lowcarbon has no stated value in the RST.
Source: src/engine/saf.ts:gridCIAt, gridCIAtFor
Test evidence: tests/dl129-grid-ci-lowcarbon.spec.ts,
tests/curve-shapes-flat-pulse.spec.ts,
tests/ptl-stoich.spec.ts (monotonicity cases)
Grid carbon intensity declines linearly from today’s value
(grid, default 400 gCO₂/kWh) to an ambition-selected 2050 target:
where \(p\) is the low-carbon share at 2050 from the energy-ambition table (60/82/92/98/100 % for levels 1–5) and 50 gCO₂/kWh is the assumed renewables residual floor. In per-MJ terms the engine divides by 3.6.
Hydrogen — LH₂ delivered carbon intensity#
Implementation status: Exact for the delivered-LH₂ closed form
(DL-024, 5-case equation-level parity incl. SMR blends and boil-off);
Partial for the production-mix dynamics (coverage matrix row
Hydrogen)
Source: src/engine/cascade.ts:computeLCA (CI block),
src/engine/cascade.ts:h2ElysShareAt, src/engine/saf.ts:ciGh2At
Test evidence: tests/hydrogen-pathways.spec.ts
The full delivered-CI chain — production mix, liquefaction, vapor loss and boil-off recovery (cf. CASCADE Hydrogen, eqs. hydrogen_electrolysis_CI, hydrogen_SMR_CI, hydrogen_vapor_loss_boiloff_recovery) — as implemented:
with \(\varepsilon_{liq} = 3.6 \cdot e_{liq} / 120\) (liquefaction
kWh/kg → MJ electricity per MJ H₂; default 12 kWh/kg), \(f_{loss}\) the
vapor-loss fraction (vap, default 2 %), \(f_{BOR}\) the boil-off
recovery fraction (bor, default 50 %), \(n_{liq} = 1\), and 96.7
gCO₂e/MJ the climate intensity of vented hydrogen
(\(\mathrm{GWP}_{100} = 11.6\); [Sand et al., 2023, Warwick and others, 2023]). The
denominator is the produced-vs-delivered correction: fuel that evaporates
in transit must be produced but never reaches the aircraft (see
Energy Demand for the demand-side use of the same identity).
The electrolysis share of production follows a year-varying adoption curve
(h2ElysShareAt; default half-S, entry 2 % in 2019 → 70 % in 2050) with
a historical freeze: pre-2024 values hold at the entry value so the
calibrated 2019–2023 baseline never shifts retroactively
(h2_historical_frozen, default true).
A superconducting-motor efficiency gain sc scales the delivered CI by
\((1 - sc/100)\) (see HyFlux Extensions).
Jet fuel and SAF#
Implementation status: Simplified (coverage matrix rows Jet Fuel,
SAF — per-feedstock blend with static CORSIA CIs; PtL two-track)
Source: src/engine/saf.ts:safBlend,
src/engine/saf.ts:feedstockCI, src/engine/saf.ts:ptlStoichCI
Test evidence: tests/ptl-stoich.spec.ts,
tests/cascade-parity.spec.ts
Seven feedstocks each follow their own adoption curve (distinct start/end years, peak share and shape; cf. CASCADE Jet Fuel, blend equations). At year \(y\):
where \(C_{amb}\) is the energy-ambition ceiling on total SAF share at 2050 (35/50/65/78/85 % for levels 1–5), applied as a pro-rata scale-back. Feedstock defaults: HEFA-UCO (CI 13.9, peak 12 %), FT-MSW (28.4, 18 %), FT-Miscanthus (20.2, 14 %), ATJ (32.8, 16 %), PtL-Wind (dynamic, 20 %), PtL-Grid (dynamic, 5 %), LCAF (65.0, 3 %) — static CIs from CORSIA default life-cycle values [ICAO, 2022].
Blend CI and the energy wedge:
PtL stoichiometric formulation (DL-024). Two-track via ptl_model;
the default 'cascade_stoich' implements the CASCADE jet-fuel PtL-CI
formulation:
with \(\varepsilon_{PtL,elec} = 0.61\) MJ/MJ (FT-reactor + DAC
electricity + net heat bundle, efuels_elec_ei),
\(\varepsilon_{PtL,H_2} = 1.4\) MJ_H₂/MJ_SAF from FT stoichiometry
— \((2n{+}1)\,H_2 + n\,CO \rightarrow C_nH_{2n+2} + n\,H_2O\) with
RWGS \(CO_2 + H_2 \rightarrow CO + H_2O\); CASCADE reports 1.36–1.42
(cf. CASCADE Jet Fuel, ptl-saf-ci) — and \(CI_{GH_2}\) the
gaseous-hydrogen production CI blended over electrolysis and SMR by the
shared smr_share (DL-026; \(CI_{GH_2} = (1-s)\,CI_{elec}/\eta +
s\,CI_{SMR}\)). Electricity source is grid-linked or a dedicated constant
supply (efuels_ci_elec; the wind variant is always dedicated). The
legacy track 'legacy_factor' keeps \(CI_{PtL} = \max(5,\;
\varepsilon\, CI_{elec} + 8)\) with \(\varepsilon = 0.32\) (wind) /
0.87 (grid). Deviation: the stoichiometric track has no artificial
floor — dedicated zero-carbon supply drives CI toward zero, the physically
correct behaviour.
Methane#
Implementation status: All 11 Methane page equations implemented
(DL-134); values two-track per DL-130 (see the F1 warning below).
Fossil/bio CIs conditionally validated; NEC/DW/WW category split landed
DL-048; editable \(f_{loss}\) year trajectory DL-081
(leakage-trajectory.ts); grid-linked liquefaction CI
\(\varepsilon_{liq}\,CI_{elec}(t)\) DL-162; downstream vapour-loss
compounding DL-134 (methane-stoichiometry.ts:downstreamVapourLoss).
Source: src/engine/saf.ts:methaneBlend,
src/engine/saf.ts:ciCh4PtgAt, src/engine/saf.ts:ch4LossTermsAt,
src/engine/methane-stoichiometry.ts
Test evidence: tests/methane-parity.spec.ts,
tests/carrier-conservation.spec.ts, tests/methane-split.spec.ts,
tests/leakage-trajectory.spec.ts,
tests/methane-stoichiometry.spec.ts
Methane displaces Jet-A1 like SAF, on its own adoption curve
(ch4_share, entry/saturation years, shape). The blend mixes three
pathways whose shares renormalise to \(\sum X = 1\):
with fossil LNG WTW 68 and bio-methane WTW 22 gCO₂e/MJ (defaults; combustion-only 55 both). The e-methane (PtG) lifecycle CI (DL-032; cf. CASCADE Methane, eq. methane_ptg_ci):
with \(\varepsilon_{PtG} = 0.25\) (DAC electricity + net heat), \(\varepsilon_{H_2} = 1.14\) MJ_H₂/MJ_CH₄ (stoichiometric, \(CO_2 + 4H_2 \rightarrow CH_4 + 2H_2O\)), \(\varepsilon_{liq} = 0.04\) (CH₄ liquefaction), \(f_{loss} = 1.6\%\) and \(CI_{CH_4,loss} = 558\) gCO₂e/MJ. All constants editable.
UI (DL-032). The Energy & Fuels modal exposes methane as its fourth
top-level tab set (4d. Methane in EnergyFuelsModal.tsx), with four
sub-tabs:
🏠 Home — pathway summary table (shares, CIs, computed 2050 PtG CI), the methane adoption
CurveEditor(entry/saturation years, share, shape), and the pathway-mix sliders: bio-methane fraction (ch4_bio_frac) and e-methane fraction (ch4_ptg_frac), with fossil LNG shown as the implicit remainder. Over-specified mixes (bio + PtG > 100 %) raise an inline warning; the engine normalises pro-rata so \(\sum X = 1\).Fossil LNG — WTW CI slider (default 68 gCO₂e/MJ) with a live vs-Jet-A1 reduction readout.
Bio-Methane — WTW CI slider (default 22 gCO₂e/MJ); the tab notes the CASCADE NEC/dry-waste/wet-waste split and HyFlux’s single-bio-bucket simplification (the engine-side split landed later, DL-048).
e-Methane (PtG) — live computed-CI readout (2050, current settings) plus sliders for every PtG constant:
ch4_eps_ptg,ch4_eps_h2(RST value 1.14),ch4_eps_liq,ch4_f_lossandci_ch4_loss(whose hint records the F1 558-vs-596 inconsistency).
Warning
Methane-parity findings (Boeing documentation inconsistencies), recorded in the claim register:
F1 — CASCADE’s published \(CI_{CH_4,loss} = 558\) contradicts its own inputs: \(\mathrm{GWP}_{100} = 29.8 \times 1000 / 50\ \mathrm{MJ/kg} = 596\). The published 558 back-implies GWP 27.9 — a 6.4 % internal documentation inconsistency. The frozen parity track adopts the published 558 (evidence-register central; the derived 596 is selectable via
ci_ch4_loss— DL-022, BC-13). DL-130 made this two-track:CURRENT_EVIDENCEmodules default to the derived 596 (and to the Sabatier LHV floor \(\varepsilon_{H_2,PtG} = 1.20636\) over the published 1.14, which sits 5.4 % below the stoichiometric minimum), with the published values reproduced underCASCADE_PARITY(src/engine/basis.ts).F2 — \(f_{loss}\) appears inside the defining equation for \(CI_{loss}\) and as a multiplier in the CI equations — a notational double-count. HyFlux adopts the single-multiplier reading.
Carrier conservation (DL-033)#
Implementation status: Fixed (aggregate-mix constraint enforced;
in-code DL-033 label — the decision log assigns DL-033 to Workstream B,
a recorded numbering collision)
Source: src/engine/cascade.ts:computeLCA (energy-wedge carrier
scale)
Test evidence: tests/carrier-conservation.spec.ts (10 tests,
including the DL-032 PtG pathway cases)
CASCADE constrains all fuel-carrier market shares to sum to 1 (cf. CASCADE Jet Fuel / Methane, aggregate-mix equations). HyFlux specifies the SAF and methane adoption curves independently, so an aggressive scenario could over-subscribe the energy wedge (SAF 85 % + CH₄ 50 % = 135 % of fuel energy displaced). The sweep therefore scales both carriers pro-rata when their shares exceed the budget:
The fix is bit-identical whenever \(X_{SAF} + X_{CH_4} \le 1\) — always
true for the frozen baseline (ch4_share defaults to 0, so
\(s_{carrier} = 1\)). Tests pin the over-subscribed pro-rata value, the
never-more-than-100 %-of-gross bound, the conservation identity under
over-subscription, the untouched within-budget regime, and the methane-off
default identity.
Known deviations / limitations#
Electricity decarb defaults to linear; the market-share curve family incl. half-S is opt-in via
curve_elec_lc(DL-161), and α_lowcarbon is never valued in the RST.The time-varying
h2_elec_sharecurve is not yet threaded intociGh2At— the GH₂ track uses the same staticsmr_shareas the LH₂ chain (consistent, but coarser; recorded residual).SMR share applies even to dedicated-supply PtL variants (SMR feedstock is fossil methane regardless of electricity source; documented).
Methane: the NEC/dry-waste/wet-waste category split (DL-048,
tests/methane-split.spec.ts) and downstream vapour-loss compounding (DL-134,methane-stoichiometry.ts) are implemented; the compounding enters production as a single already-compoundedf_lossfraction rather than per-stage inputs.Non-CO₂ radiative-forcing indices (
rfi_*) are display-only.