Skip to content

data(nordic): per-zone carbon intensity for Norwegian bidding zones NO1–NO5#1260

Open
avalyset wants to merge 1 commit into
mlco2:masterfrom
avalyset:khepri-no-per-zone-ci
Open

data(nordic): per-zone carbon intensity for Norwegian bidding zones NO1–NO5#1260
avalyset wants to merge 1 commit into
mlco2:masterfrom
avalyset:khepri-no-per-zone-ci

Conversation

@avalyset

Copy link
Copy Markdown

data(nordic): per-zone carbon intensity for Norwegian bidding zones NO1–NO5

Hi! This proposes replacing the uniform 18.0 gCO2eq/kWh placeholder currently shared by all five Norwegian bidding zones in codecarbon/data/private_infra/nordic_emissions.json with per-zone, derived values. Data-only change — happy to adjust anything based on your review.

What

Zone before after (gCO2eq/kWh)
NO1 (Oslo) 18.0 23.3
NO2 (Southern) 18.0 23.9
NO3 (Central) 18.0 21.5
NO4 (Northern) 18.0 39.6
NO5 (Western) 18.0 24.5

SE1–SE4 and FI are unchanged (byte-for-byte; only NO blocks + file metadata touched).

Why the placeholder is worth improving

The current 18.0 is identical across NO1–NO5 (so it can't distinguish the zones) and reads low for every zone — and ~2.5× low for NO4 (39.6), which carries persistent fossil-gas generation. A single value can't represent the five zones; NO4 in particular is structurally different.

Source & method (aligned with CodeCarbon's own fallback)

  • Source: ENTSO-E Transparency Actual Generation per Production Type (A75), per bidding zone, full year 2025.
  • Method: production-based generation-mix — weighted average of each generation source × its lifecycle factor. This matches the approach CodeCarbon's own static fallback already documents ("weighted average of the emissions from the different energy sources used to generate electricity").
  • These values replace the production fallback; they do not touch the Electricity Maps API path, which remains the consumption-based (import-adjusted) source when a token is configured.

A point we'd like your steer on: the factor basis

We derived these with IPCC AR5 Annex III (Table A.III.2) lifecycle medians (coal 820, gas 490, hydro 24, wind 11, …) rather than CodeCarbon's carbon_intensity_per_source.json (coal 995 / gas 743 direct-combustion + WNA-lifecycle for low-carbon). Our reasoning:

  • IPCC AR5 is a single, peer-reviewed, consistent-lifecycle basis, and it keeps these numbers identical to the upstream derivation's DOI-frozen record (so there's one citable value per zone, not two).
  • Using AR5 (gas 490 vs 743) makes the NO values slightly conservative relative to CodeCarbon's own gas factor.

That said — this is a recommendation, not a correction of your table. If you'd prefer internal consistency with carbon_intensity_per_source.json, re-deriving with your own per-source factors is a one-line change on our side; just say the word. What matters to us is that NO gets real per-zone numbers.

Honest characterization (per-zone notes added, not just five numbers)

A multi-year analysis (2021–2025) is carried in the per-zone note fields, because a bare NO4 number would mislead:

  • NO1/NO2/NO3: stable year-over-year (<5% drift) → annual update is sufficient.
  • NO4: event-driven, not a stable constant — driven by Hammerfest LNG gas turbines, which were offline after a Sept-2020 fire and restarted June 2022 (source). NO4 CI ranged 23–51 gCO2eq/kWh across 2021–2024; the 39.6 value is period-dependent.
  • NO5: sits near the hydro lifecycle floor (~24) in pure-hydropower periods.
  • Honest limit, stated plainly: production-based NO carbon intensity is low and not very distinct between zones except where fossil gas occurs (NO4).

Reproducibility

Every value is traceable. Derivation method, pre-registered before computation, is in the ADR chain (esp. ADR-0001 CI method); the per-zone results and the multi-year drift analysis are in the repo's docs/. Frozen and citable:

Tests

CodeCarbon's existing Nordic tests read the factor values dynamically from the JSON and pass unchanged with the new values (verified locally). No code changes — data only.

Thanks for maintaining CodeCarbon — glad to iterate on any of this.

Replace the uniform 18.0 gCO2eq/kWh placeholder for NO1-NO5 with per-zone
production-based values (NO1 23.3, NO2 23.9, NO3 21.5, NO4 39.6, NO5 24.5)
derived from ENTSO-E generation-per-type x IPCC AR5 lifecycle factors (2025).
Adds per-zone method/source/drift notes + updated file metadata. SE/FI unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant