The PyPSA-Eur model workflow provides a built-in mechanism for validation. This allows users to contrast the outcomes of network optimization against the historical behaviour of the European power system. The snakemake rule
validate_elec_networks enables this by generating comparative figures that encapsulate key data points such as dispatch carrier, cross-border flows, and market prices per price zone.
These comparisons utilize data from the 2019 ENTSO-E Transparency Platform. To enable this, an ENTSO-E API key must be inserted into the
config.yaml file. Detailed steps for this process can be found in the user guide here.
Once the API key is set, the validation workflow can be triggered by running the following command:
snakemake validate_elec_networks –configfile config/config.validation.yaml -c8
The configuration file config/config.validation.yaml contains the following parameters:
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors # # SPDX-License-Identifier: CC0-1.0 run: name: "validation" scenario: ll: - v1.0 clusters: - 37 opts: - 'Ept' snapshots: start: "2019-01-01" end: "2020-01-01" inclusive: 'left' enable: retrieve_cutout: false electricity: co2limit: 1e9 extendable_carriers: Generator:  StorageUnit:  Store:  Link:  powerplants_filter: not (DateOut < 2019) conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass] renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, hydro] estimate_renewable_capacities: year: 2019 atlite: default_cutout: europe-2019-era5 cutouts: europe-2019-era5: module: era5 x: [-12., 35.] y: [33., 72] dx: 0.3 dy: 0.3 time: ['2019', '2019'] renewable: onwind: cutout: europe-2019-era5 offwind-ac: cutout: europe-2019-era5 offwind-dc: cutout: europe-2019-era5 solar: cutout: europe-2019-era5 hydro: cutout: europe-2019-era5 flatten_dispatch: 0.01 conventional: unit_commitment: false dynamic_fuel_price: true nuclear: p_max_pu: "data/nuclear_p_max_pu.csv" biomass: p_max_pu: 0.65 load: power_statistics: false lines: s_max_pu: 0.23 under_construction: 'remove' links: include_tyndp: false costs: year: 2020 emission_prices: co2: 25 clustering: simplify_network: exclude_carriers: [oil, coal, lignite, OCGT, CCGT] cluster_network: consider_efficiency_classes: true solving: options: load_shedding: true rolling_horizon: false horizon: 1000 overlap: 48
The setup uses monthly varying fuel prices for gas, lignite, coal and oil as well as CO2 prices, which are created by the script
build_monthly_prices. Upon completion of the validation process, the resulting network and generated figures will be stored in the
results/validation directory for further analysis.
By the time of writing the comparison with the historical data shows partially accurate, partially improvable results. The following figures show the comparison of the dispatch of the different carriers.
Issues and possible improvements#
Overestimated dispatch of wind and solar: Renewable potentials of wind and solar are slightly overestimated in the model. This leads to a higher dispatch of these carriers than in the historical data. In particular, the solar dispatch during winter is overestimated.
Coal - Lignite fuel switch: The model has a fuel switch from coal to lignite. This might result from non-captured subsidies for lignite and coal in the model. In order to fix the fuel switch from coal to lignite, a manual cost correction was added to the script
Planned outages of nuclear power plants: Planned outages of nuclear power plants are not captured in the model. This leads to a underestimated dispatch of nuclear power plants in winter and a overestimated dispatch in summer. This point is hard to fix, since the planned outages are not published in the ENTSO-E Transparency Platform.
False classification of run-of-river power plants: Some run-of-river power plants are classified as hydro power plants in the model. This leads to a general overestimation of the hydro power dispatch. In particular, Swedish hydro power plants are overestimated.
Load shedding: Due to constraint NTC’s (crossborder capacities), the model has to shed load in some regions. This leads to a high market prices in the regions which drive the average market price up. Further fine-tuning of the NTC’s is needed to avoid load shedding.