reneuro 0.0.0.9000
pypsa_eur_41vreworked: the existing fleet is oneSTOCKvintage per carrier carrying the summed retirement path, and gas gainsNEW<year>vintage windows that freeze each assumption year’s efficiency, lifetime and annuity. The fleet’s milestone totals are unchanged.Model
@names are upper-case (PYPSA_EUR_41,PYPSA_EUR_41V, …), as solver-set identifiers.New dataset
tyndp_demand: electricity-demand growth factors by country, scenario and milestone year from the TYNDP 2024 scenarios (NT+, Distributed Energy, Global Ambition), anchored at the measured 2025 load.New
grow_demand()builds year-keyed demand from a base-year profile and any growth-factor table;build_demand()wraps it with a source model, name, and optional year/region selection.In
policy_pathsthe ETS-shape scenario is namedets_cap(wascurrent_policy): the legislated linear reduction factors make it the tightest of the three paths, and the old name misread as a contradiction.New dataset
policy_paths: three CO2-cap trajectories as factors on 2025 emissions (the EU ETS shape, the EU NDC pledges, linear net-zero 2050), and a Scenarios article showing carbon caps and a carbon tax built with plain constraints and taxes on the shipped models.The translation article gains a “Revised assumptions” section documenting the deliberate deviations shipped as separate model versions: atlas-anchored capacity factors, economic retirement, and TYNDP demand growth.
nuts_loadandnuts_linesregion codes are normalized to the same underscore convention asnuts_gs, so joins across the three datasets match for the non-NUTS countries (BA, MD, UA, XK).pypsa_eur_289andpypsa_eur_1035are no longer shipped. The coarser NUTS levels are derived frompypsa_eur_nuts3withenergyRt::aggregate_model_regions(), and subsetting starts frompypsa_eur_nuts3directly.All shipped models are rebuilt with corrected calendar chronology: converter-built calendars ordered timeslices hour-major, so storage could not carry energy from one hour to the next. The converted Belgium model now reproduces PyPSA’s solution within 0.02%.
be_solvedsolves to a new objective gate (164,899,752.517).convert_pypsa()gainsexpand_transmission: corridors become investable at PyPSA’s line costs, for comparing against networks solved with transmission expansion.All four continental models are rebuilt on 2025 weather and load (ENTSO-E measured demand, the
europe-2025-sarah3-era5cutout). Regions, object names and the existing fleet are unchanged from the 2013 build; the demand year total moves from 3,356 to 3,163 TWh.New one-year horizon series
pypsa_eur_41_2025…pypsa_eur_41_2050: per-horizon cost vintages and a fleet aged by announcedDateOutschedules plus assumed carrier lifetimes, recorded separately in provenance. The series ships without weather;attach_weather(m, from = pypsa_eur_41)restores it.New vintaged multi-year model
pypsa_eur_41v: the 41-node system over 2025-2050 milestones, existing fleet split into build-year vintages with per-vintage efficiency and retirement, plus one investable path per carrier with year-keyed costs. Ships without weather, like the horizon series.attach_weather()gainsfrom =, to copy weather objects from another model.Every model carries a
reneuro_provenanceattribute recording the upstream commit and the weather, load, capacity and cost years; the build scripts refuse to save without it.pypsa_eur_41is rebuilt. Its corridors are flat: the six loss tranches it carried – the converter’s default when it was built – became 224,640 generated constraints on a 288-slice calendar, 91% of the solver exchange files, and no open solver generated them in reasonable time. Every other continental model was alreadytranches = NULL.pypsa_eur_41also has its fuel costs separated:varomholds the true VOM and each fuel’s supply carries its price, taken from the cost table the network was built from. The objective is unchanged – the split is exact – and the fuel price is now a number you can vary. Its regions, object names and technology stock are unchanged; only trade and the cost split differ.Every technology and storage port carries its commodity’s unit.
data-raw/pypsa_eur_41.Rbuilds it, so all six shipped models now have a build script. The docs name where each lives: this package’sdata-raw/for the continental models,reneuro.dev/data-raw/for the Belgian ones.The website’s data documentation is reorganized into four articles: “Data in PyPSA-Eur 41-node” (what ships in the 41-node model, with mean capacity-factor, demand and network maps), “Data sources” (the upstream inputs and the NUTS processing), and new “Wind energy” and “Solar energy” articles.
The wind article documents a quality-aware resource layer: the Global Wind Atlas beside the cutout, carved wind-quality areas over the full atlas window, an eligibility threshold and resource clusters with capacity-factor tiers, and speed-domain calibration along an aggregate park power curve.
The solar article compares the cutout with the Global Solar Atlas (the gap is flat – no calibration applied) and splits the solar supply into yield levels with the same carving machinery.
A data-sources article shows the upstream inputs – the weather cutout, measured ENTSO-E demand, the plant fleet, the network – as maps and figures, with a source/licence table.
Two website articles show what
report()produces: a model report forpypsa_eur_41and a scenario report for the same model solved on a sampled calendar. Each gives the call that derives it and then embeds the rendered report, built bydata-raw/example_reports.R.pypsa_eur_nuts3: the NUTS3 network over the full year, 1,035 regions and 8,760 hourly snapshots. Its weather profiles ship as sevenwx_nuts3_*objects, since the model whole is 181 MB and past GitHub’s file limit;attach_weather()puts back the ones a study needs andweather_resources()lists them.pypsa_eur_nuts3carriesnuts_gs, so the coarser NUTS levels are derived rather than shipped:energyRt::aggregate_model_regions(pypsa_eur_nuts3, level = "nuts1")gives 36 regions at NUTS0, 106 at NUTS1 and 289 at NUTS2.nuts_gsis now keyed the way the models are.convert_pypsa()rewrites every non-alphanumeric character, so the adm1 codes of Bosnia, Moldova, Ukraine and Kosovo reach a model asBA_BIHwhere the geoscale hadBA-BIH. The two disagreed on 37 regions – every region of those four countries – and aggregating a model against the geoscale dropped them.nuts_gsnow carries per-region demand, existing capacity and renewable potential alongside area, population and GDP, and declares seven of them as weights. Rebuilt bydata-raw/nuts_gs.R.Three vignettes:
vignette("reneuro")walks a model end to end and carves a local model out of NUTS3;vignette("data")covers what ships and what changing spatial resolution does to it;vignette("about")holds the model provenance, solver benchmarks, references and licences moved out of the README.Initial package skeleton, pkgdown site and project documentation.
