A standalone GenX case covering all 12 Nordic bidding zones — SE1–4, NO1–5, FI, DK1, DK2 — with 17 transmission lines including the three Swedish snitt cuts, six NO internal AC lines, the seven SE↔neighbor interconnectors, and NO2↔DK1 Skagerrak HVDC.
The companion library checkout is at ~/projects/GenX.jl/ — read that
for canonical input-file formats and source code. Don't modify it from
inside this repo.
| Path | What it is |
|---|---|
system/ |
Network + 8760-h time-series CSVs |
resources/ |
Resource definitions (Thermal/Vre/Storage/Hydro) |
policies/ |
CO2 cap + min-capacity policies |
plots/, scripts/ |
Plotting + validation Python |
data/fetch_entsoe.py |
ENTSO-E real-data fetcher |
~/projects/GenX.jl/example_systems/1_three_zones/ |
Reference for CSV formats |
~/projects/GenX.jl/src/ |
Source of truth for input semantics |
- Topology (
Network.csv): real. SE1–SE4 with snitt 1/2/4 NTC values reflecting market-available (post-minRAM) capacities. - Resource capacities (
resources/*.csv): real, ~2024 fleet. Nuclear/oil/hydro are existing-only; renewables and batteries can expand. - Time-series (
system/Demand_data.csv,Generators_variability.csv,Fuels_data.csv): synthetic, generated bybuild_timeseries.py. Calibrated to plausible Swedish totals (≈145 TWh/yr, ≈28 GW peak). - Real-data path:
data/fetch_entsoe.pypulls from ENTSO-E and overwrites the synthetic CSVs. NeedsENTSOE_API_TOKENindata/.env.
Never commit data/.env, data/raw/, or results/ — they are gitignored
inside the sweden_4_zones folder.
Don't re-derive these from memory; they are easy to get wrong:
- Nordic synchronous area = NO + FI + DK2 + SE (AC-coupled).
DK1, DE, PL, LT are connected only via HVDC (asynchronous). Reserves
(FCR/aFRR/mFRR) flow only inside the synchronous area, so neighbor
zones must be tagged accordingly if
CapacityReserveMarginis added. - EU minRAM / Article 16(8) of Regulation 2019/943 requires ≥70% of
secure cross-zonal capacity be offered to the market. Binding since
31 Dec 2025. The values in
Network.csvalready reflect this. Sweden (Svenska Kraftnät) has compliance issues on snitt 4 — Ei is reviewing after ACER flagged it. If aminRAM_fractionknob is added, that's the dial for sweeping compliance scenarios. - Bidding zones ≠ countries. SE1-SE4 are separate zones within Sweden; DK has two zones (DK1, DK2) in different sync areas.
For more detail, see the memory entries:
nordic_synchronous_area.mdeu_70pct_maczt.md
cd Tutorials/example_systems_tutorials/sweden_4_zones/
julia --project=. -e 'using Pkg; Pkg.add("GenX"); Pkg.instantiate()' # once
julia --project=. Run.jlFor fast iteration, set TimeDomainReduction: 1 in
settings/genx_settings.yml (8–11 representative weeks → solve in
seconds instead of minutes).
Detailed runbook: Tutorials/example_systems_tutorials/sweden_4_zones/HOW_TO_RUN.md.
-
GenX input CSVs: column conventions vary slightly between resource
types (
Thermal.csv,Vre.csv,Storage.csv,Hydro.csveach have their own schema). Always cross-check against~/projects/GenX.jl/example_systems/1_three_zones/or the test fixtures in~/projects/GenX.jl/test/before adding new resource rows. -
Currency: GenX is currency-agnostic; all costs in the Sweden case
are nominal
$/MWh and $ /MW-yr. Don't introduce SEK or EUR conversions silently. -
Comment frugality: GenX input CSVs aren't documented inline.
Domain notes belong in
README.md/HOW_TO_RUN.md, not in CSV cells. -
Julia not installed in this shell — testing the model end-to-end
requires the user to run
julia Run.jllocally. Don't claim a run succeeded if it wasn't actually executed.
- Don't modify files in
~/projects/GenX.jl/from this repo. - Don't commit ENTSO-E raw downloads or
.envfiles. - Don't change upstream
Tutorial_*.ipynbnotebooks unless the user asks — they're maintained by Princeton/MIT. - Don't conflate AC and HVDC neighbor links (see domain fact #1 above).
- Don't quote
Line_Max_Flow_MWvalues as "thermal capacity" — they are market-available NTC values.