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: .. math:: CI_{elec}(y) = CI_0 + \big(CI_{2050} - CI_0\big)\,t, \qquad t = \frac{y - 2019}{2050 - 2019} .. math:: CI_{2050} = CI_0\,(1 - p) + 50\,p where :math:`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: .. math:: CI_{elys} = \varepsilon_{elys}\, CI_{elec}, \qquad \varepsilon_{elys} = \frac{1}{\eta_{elys}}, \qquad CI_{elec} = \frac{CI_{grid}}{3.6} .. math:: CI_{SMR} = \varepsilon_{SMR}\, CI_{elec} + CI_{SMR,const} = 0.045\, CI_{elec} + 85.95 .. math:: CI_{prod} = (1 - s_{SMR})\, CI_{elys} + s_{SMR}\, CI_{SMR} .. math:: CI_{LH_2,del} = \frac{CI_{prod} + CI_{elec}\, n_{liq}\,(1 + f_{BOR} f_{loss})\, \varepsilon_{liq} + (1 - f_{BOR})\, f_{loss}\, 96.7} {1 - f_{loss}\,(1 - f_{BOR})} with :math:`\varepsilon_{liq} = 3.6 \cdot e_{liq} / 120` (liquefaction kWh/kg → MJ electricity per MJ H₂; default 12 kWh/kg), :math:`f_{loss}` the vapor-loss fraction (``vap``, default 2 %), :math:`f_{BOR}` the boil-off recovery fraction (``bor``, default 50 %), :math:`n_{liq} = 1`, and 96.7 gCO₂e/MJ the climate intensity of vented hydrogen (:math:`\mathrm{GWP}_{100} = 11.6`; :cite:`sand2023,warwick2023`). The denominator is the produced-vs-delivered correction: fuel that evaporates in transit must be produced but never reaches the aircraft (see :doc:`energyDemand` 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 :math:`(1 - sc/100)` (see :doc:`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 :math:`y`: .. math:: X_i(y) = X_{i,max} \cdot s_i\!\left(\frac{y - t_{i,start}} {t_{i,end} - t_{i,start}}\right), \qquad X_{tot} = \min\!\Big(\sum_i X_i,\; C_{amb}\Big) where :math:`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 :cite:`corsia_cef`. Blend CI and the energy wedge: .. math:: CI_{blend}(y) = \frac{\sum_i X_i(y)\, CI_i(y)}{\sum_i X_i(y)}, \qquad \Delta_{en} = G_{gross}\, X_{tot}\left(1 - \frac{CI_{blend}}{CI_{JetA1}}\right) **PtL stoichiometric formulation (DL-024).** Two-track via ``ptl_model``; the default ``'cascade_stoich'`` implements the CASCADE jet-fuel PtL-CI formulation: .. math:: CI_{PtL}(y) = \varepsilon_{PtL,elec}\, CI_{elec}(y) + \varepsilon_{PtL,H_2}\, CI_{GH_2}(y) with :math:`\varepsilon_{PtL,elec} = 0.61` MJ/MJ (FT-reactor + DAC electricity + net heat bundle, ``efuels_elec_ei``), :math:`\varepsilon_{PtL,H_2} = 1.4` MJ_H₂/MJ_SAF from FT stoichiometry — :math:`(2n{+}1)\,H_2 + n\,CO \rightarrow C_nH_{2n+2} + n\,H_2O` with RWGS :math:`CO_2 + H_2 \rightarrow CO + H_2O`; CASCADE reports 1.36–1.42 (cf. CASCADE *Jet Fuel*, ptl-saf-ci) — and :math:`CI_{GH_2}` the gaseous-hydrogen production CI blended over electrolysis and SMR by the shared ``smr_share`` (DL-026; :math:`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 :math:`CI_{PtL} = \max(5,\; \varepsilon\, CI_{elec} + 8)` with :math:`\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 :math:`f_{loss}` year trajectory DL-081 (``leakage-trajectory.ts``); grid-linked liquefaction CI :math:`\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 :math:`\sum X = 1`: .. math:: CI_{CH_4,blend} = X_{bio}\, CI_{bio} + X_{PtG}\, CI_{PtG}(y) + (1 - X_{bio} - X_{PtG})\, CI_{fossil} 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): .. math:: CI_{PtG}(y) = \frac{CI_{elec}(y)\,\varepsilon_{PtG} + CI_{GH_2}(y)\,\varepsilon_{H_2}}{1 - f_{loss}} + f_{loss}\, CI_{CH_4,loss} + \varepsilon_{liq}\, CI_{elec}(y) with :math:`\varepsilon_{PtG} = 0.25` (DAC electricity + net heat), :math:`\varepsilon_{H_2} = 1.14` MJ_H₂/MJ_CH₄ (stoichiometric, :math:`CO_2 + 4H_2 \rightarrow CH_4 + 2H_2O`), :math:`\varepsilon_{liq} = 0.04` (CH₄ liquefaction), :math:`f_{loss} = 1.6\%` and :math:`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 :math:`\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_loss`` and ``ci_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 :math:`CI_{CH_4,loss} = 558` contradicts its own inputs: :math:`\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_EVIDENCE`` modules default to the derived 596 (and to the Sabatier LHV floor :math:`\varepsilon_{H_2,PtG} = 1.20636` over the published 1.14, which sits 5.4 % below the stoichiometric minimum), with the published values reproduced under ``CASCADE_PARITY`` (``src/engine/basis.ts``). * **F2** — :math:`f_{loss}` appears inside the defining equation for :math:`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: .. math:: s_{carrier} = \min\!\Big(1,\; \frac{1}{X_{SAF} + X_{CH_4}}\Big) .. math:: \Delta_{en} = G_{gross}\, s_{carrier} \Big[ X_{SAF}\Big(1 - \frac{CI_{blend}}{CI_{JetA1}}\Big) + X_{CH_4}\Big(1 - \frac{CI_{CH_4,blend}}{CI_{JetA1}}\Big) \Big] The fix is bit-identical whenever :math:`X_{SAF} + X_{CH_4} \le 1` — always true for the frozen baseline (``ch4_share`` defaults to 0, so :math:`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_share`` curve is not yet threaded into ``ciGh2At`` — the GH₂ track uses the same static ``smr_share`` as 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-compounded ``f_loss`` fraction rather than per-stage inputs. * Non-CO₂ radiative-forcing indices (``rfi_*``) are display-only.