Nordic FBMC

Sign in to continue.

Only one active session is allowed; signing in here will revoke any other session.

Nordic FBMC

PTDF & Outage Explorer
Pick a UTC quarter and press fetch.

Network

Loading…

Slack bus

Auto (PyPSA picks first bus in each sub-network). Click any bus on the map to override.

Active outages

Shift + click a line on the map to toggle it as an outage. Active count: 0.

    Reference list

    Fetch the published contingency list for a UTC hour to help identify which lines to outage manually. Items here are not auto-applied to the network.

      Dispatch

      Press fetch at the top to load realised generation (A75) and load (A65) per Nordic zone for the chosen quarter.

      Computed CNEC

      Select a line on the map and pick a UTC quarter to compute F0/RAM.

      FB domain · JAO published

      Select a line and pick a UTC quarter; JAO CNECs whose hubs are contained in the line's zones will be loaded automatically.

      Net positions · JAO

      Pending.

      Zonal diagrams

      Generation (per carrier), load, net position and zonal PTDF for the selected UTC quarter. zPTDF requires a CNEC selected on the map (Flow-based tab).

      Fetch a quarter at the top to populate.

      Nodal diagrams

      For each bus in the chosen zone: net injection, generation by carrier, consumption, GSK weight and nodal PTDF (when a CNEC is selected on the map).

      Fetch a quarter at the top to populate.

      Base case

      DC load flow on the dispatched system — already computed as part of the CNEC Fref calculation. Bus injections are coloured green (gen > load) / red (load > gen). Lines are coloured by flow magnitude.

      Compute a CNEC in the Flow-based tab first.

      Most loaded lines

      What this tool does

      Nordic FBMC Explorer reproduces the linear flow-based market-coupling computation for the Nordic synchronous area (NO1–NO5, SE1–SE4, FI, DK1–DK2) using a public PyPSA-Eur network and live ENTSO-E / JAO data. It is a teaching and diagnostic tool — not a TSO-grade clearance — but the maths and data sources match what JAO publishes for the FBMC NEMOs.

      Pipeline

      1. Topology. Buses + AC lines from PyPSA-Eur snapshots. Transformers are substation-internal and dropped; HVDC links are not in the AC topology — they appear as scheduled exchanges via JAO virtual hubs.
      2. PTDF. DC PTDF built per sub-network with one slack bus. Default slack = Forsmark 400 kV (highest-degree SE 400 kV bus), overridable by clicking any bus. Outages are applied by setting the line's reactance x → ∞ and rebuilding the matrix.
      3. Dispatch. ENTSO-E Transparency feeds at the chosen UTC quarter:
        • A75 — actual generation per carrier per zone,
        • A65 — actual total load per zone.
        JAO referenceNetPosition supplies per-zone NPs and virtual-hub HVDC scheduled flows.
      4. HVDC adjustment. JAO virtual hubs (e.g. NO2_SK, NO2_NK, NO2_ND, DK1_KS) are aggregated to their parent zones and treated as zone-level load when exporting (or generation when importing). The AC PTDF therefore only carries the AC part: NPAC = (gen − load) − net HVDC export.
      5. Per-bus disaggregation. For each zone:
        • genb = Σcarrier (capb,c ⁄ capz,c) · genz,c (carrier-aware capacity share),
        • loadb = (capb ⁄ capz) · (loadz + HVDC exportz).
        The sum over buses in zone z reproduces NPAC,z.
      6. Zonal PTDF. Bus weights from the GSK collapse the nodal PTDF row to 12 numbers per CNEC: zPTDFz = Σb∈z Hb · wb.

      F0, Fref, RAM

      On a chosen line ℓ (a "CNEC" once stress-tested):

      Fref = nodal DC LF flow = Hℓ · (genb − loadb)
      Σ PTDF·NP = zonal market contribution = Σz zPTDFz · NPAC,z
      F0 = Fref − Σ PTDF·NP — loop / internal flow surviving at NP=0
      RAM = Fmax − |F0| − FRM

      Fmax is the physical line capacity (taken from the line's thermal rating in the network model). FRM (Flow Reliability Margin) is fixed at 10% of Fmax here; real TSOs derive it from forecast-error studies.

      GSK strategies

      • flat — equal weight per bus within a zone.
      • installed_capacity — weighted by total installed MW.
      • production_weighted — bus weight follows realised dispatch by carrier (per-carrier capacity share × A75 per carrier). Captures that wind-rich coastal buses contribute more than a peaker when wind is blowing.

      Base case

      The "show base case" view is just the per-line and per-bus output of the same DC LF used to compute Fref. Buses are coloured by net injection (green = gen>load, red = load>gen), lines by loading |f| / Fmax. Zonal balance (Σ pb) reproduces NPAC,z by construction.

      Outages

      Shift-click any line to toggle it as an outage. Outages propagate by rebuilding the PTDF on the post-outage topology — the rebuilt nodal PTDF is then re-aggregated to zonal PTDFs and used for F0/RAM and the base case. The Reference list panel just displays ENTSO-E A78 unavailabilities for the hour — they help you pick what to outage manually but are not applied automatically.

      Data sources

      • PyPSA-Eur — buses, AC lines, HVDC links, generators with carrier and p_nom.
      • ENTSO-E TP — A65 load, A75 generation per carrier, A78 transmission unavailabilities (the only outage source used here).
      • JAO Publication Tool — finalComputation (CNECs + zonal PTDFs + RAM), referenceNetPosition (NPs + virtual hubs). Used as ground-truth for the FB domain comparison; not used as an outage source.

      Sign convention & the invert toggle

      The PTDF row's sign depends on which end PyPSA labels as bus0 vs bus1. JAO publishes flows with their own convention. The Invert line direction checkbox in the Computed CNEC panel flips the sign of F0, Fref, and the zonal PTDF rows simultaneously so they line up with JAO's display.

      What this is not

      • Not an AC load flow — it's DC, lossless, no voltage limits.
      • No remedial actions (PSTs, topology) — published JAO Fref already includes them, our linear approximation does not.
      • No N-1 RAM derivation — we use a static 10% FRM.
      • No clearing — the tool computes flows for given NPs but does not run the market.

      Stack

      • Backend — FastAPI + PyPSA + pandas/numpy. Endpoints: /network, /cnec/compute, /dispatch/nodal, /jao/fb_domain, /entsoe/dispatch, /entsoe/outages, /slack.
      • Frontend — Plain JS + Leaflet, served by nginx which proxies /api/ to the backend container.
      • Deployment — Docker Compose; production overlay adds HTTP Basic Auth via nginx + an htpasswd file.
      PTDF
      -1.0 0 +1.0