Configuration#
PyPSA-Eur has several configuration options which are documented in this section and are collected in a config.yaml file located in the root directory. Users should copy the provided default configuration (config.default.yaml) and amend their own modifications and assumptions in the user-specific configuration file (config.yaml); confer installation instructions at Handling Configuration Files.
Top-level configuration#
version: 0.8.0
tutorial: false
logging:
level: INFO
format: '%(levelname)s:%(name)s:%(message)s'
foresight: overnight # options are overnight, myopic, perfect (perfect is not yet implemented)
# if you use myopic or perfect foresight, set the investment years in "planning_horizons" below
countries: ['AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK']
# CO2 budget as a fraction of 1990 emissions
# this is over-ridden if CO2Lx is set in sector_opts
# this is also over-ridden if cb is set in sector_opts
co2_budget:
2020: 0.701
2025: 0.524
2030: 0.297
2035: 0.150
2040: 0.071
2045: 0.032
Unit |
Values |
Description |
|
|---|---|---|---|
version |
– |
0.x.x |
Version of PyPSA-Eur. Descriptive only. |
tutorial |
bool |
{true, false} |
Switch to retrieve the tutorial data set instead of the full data set. |
logging |
|||
– level |
– |
Any of {‘INFO’, ‘WARNING’, ‘ERROR’} |
Restrict console outputs to all infos, warning or errors only |
– format |
– |
Custom format for log messages. See LogRecord attributes. |
|
foresight |
string |
{overnight, myopic, perfect} |
Defaults to overnight scenarios. |
countries |
– |
Subset of {‘AL’, ‘AT’, ‘BA’, ‘BE’, ‘BG’, ‘CH’, ‘CZ’, ‘DE’, ‘DK’, ‘EE’, ‘ES’, ‘FI’, ‘FR’, ‘GB’, ‘GR’, ‘HR’, ‘HU’, ‘IE’, ‘IT’, ‘LT’, ‘LU’, ‘LV’, ‘ME’, ‘MK’, ‘NL’, ‘NO’, ‘PL’, ‘PT’, ‘RO’, ‘RS’, ‘SE’, ‘SI’, ‘SK’} |
European countries defined by their Two-letter country codes (ISO 3166-1) which should be included in the energy system model. |
focus_weights |
– |
Keys should be two-digit country codes (e.g. DE) and values should range between 0 and 1 |
Ratio of total clusters for particular countries. the remaining weight is distributed according to mean load. An example: |
co2_budget |
– |
Dictionary with planning horizons as keys. |
CO2 budget as a fraction of 1990 emissions. Overwritten if |
run#
It is common conduct to analyse energy system optimisation models for multiple scenarios for a variety of reasons, e.g. assessing their sensitivity towards changing the temporal and/or geographical resolution or investigating how investment changes as more ambitious greenhouse-gas emission reduction targets are applied.
The run section is used for running and storing scenarios with different configurations which are not covered by Wildcards. It determines the path at which resources, networks and results are stored. Therefore the user can run different configurations within the same directory. If a run with a non-empty name should use cutouts shared across runs, set shared_cutouts to true.
run:
name: "" # use this to keep track of runs with different settings
disable_progressbar: false # set to true to disable the progressbar
shared_resources: false # set to true to share the default resources across runs
shared_cutouts: true # set to true to share the default cutout(s) across runs
Unit |
Values |
Description |
|
|---|---|---|---|
name |
– |
any string |
Specify a name for your run. Results will be stored under this name. |
disable_progrssbar |
bool |
{true, false} |
Switch to select whether progressbar should be disabled. |
shared_resources |
bool |
{true, false} |
Switch to select whether resources should be shared across runs. |
shared_cutouts |
bool |
{true, false} |
Switch to select whether cutouts should be shared across runs. |
scenario#
The scenario section is an extraordinary section of the config file
that is strongly connected to the Wildcards and is designed to
facilitate running multiple scenarios through a single command
# for electricity-only studies
snakemake -call solve_elec_networks
# for sector-coupling studies
snakemake -call solve_sector_networks
For each wildcard, a list of values is provided. The rule
solve_all_elec_networks will trigger the rules for creating
results/networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc for all
combinations of the provided wildcard values as defined by Python’s
itertools.product(…) function
that snakemake’s expand(…) function
uses.
An exemplary dependency graph (starting from the simplification rules) then looks like this:
scenario:
simpl:
- ''
ll: # allowed transmission line volume expansion, can be any float >= 1.0 with a prefix v|c (today) or "copt"
- v1.0
- v1.5
clusters: # number of nodes in Europe, any integer between 37 (1 node per country-zone) and several hundred
- 37
- 128
- 256
- 512
- 1024
opts: # only relevant for PyPSA-Eur
- ''
sector_opts: # this is where the main scenario settings are
- Co2L0-3H-T-H-B-I-A-solar+p3-dist1
# to really understand the options here, look in scripts/prepare_sector_network.py
# Co2Lx specifies the CO2 target in x% of the 1990 values; default will give default (5%);
# Co2L0p25 will give 25% CO2 emissions; Co2Lm0p05 will give 5% negative emissions
# xH is the temporal resolution; 3H is 3-hourly, i.e. one snapshot every 3 hours
# single letters are sectors: T for land transport, H for building heating,
# B for biomass supply, I for industry, shipping and aviation,
# A for agriculture, forestry and fishing
# solar+c0.5 reduces the capital cost of solar to 50\% of reference value
# solar+p3 multiplies the available installable potential by factor 3
# seq400 sets the potential of CO2 sequestration to 400 Mt CO2 per year
# dist{n} includes distribution grids with investment cost of n times cost in data/costs.csv
# for myopic/perfect foresight cb states the carbon budget in GtCO2 (cumulative
# emissions throughout the transition path in the timeframe determined by the
# planning_horizons), be:beta decay; ex:exponential decay
# cb40ex0 distributes a carbon budget of 40 GtCO2 following an exponential
# decay with initial growth rate 0
planning_horizons: # investment years for myopic and perfect; for overnight, year of cost assumptions can be different and is defined under 'costs'
- 2050
# for example, set to
# - 2020
# - 2030
# - 2040
# - 2050
# for myopic foresight
Unit |
Values |
Description |
|
|---|---|---|---|
simpl |
– |
List of |
|
clusters |
– |
List of |
|
ll |
– |
List of |
|
opts |
– |
List of |
|
sector_opts |
– |
List of |
|
planning_horizons |
– |
List of |
snapshots#
Specifies the temporal range to build an energy system model for as arguments to pandas.date_range
snapshots:
start: "2013-01-01"
end: "2014-01-01"
inclusive: 'left' # include start, not end
Unit |
Values |
Description |
|
|---|---|---|---|
start |
– |
str or datetime-like; e.g. YYYY-MM-DD |
Left bound of date range |
end |
– |
str or datetime-like; e.g. YYYY-MM-DD |
Right bound of date range |
inclusive |
– |
One of {‘neither’, ‘both’, ‘left’, ‘right’} |
Make the time interval closed to the |
enable#
Switches for some rules and optional features.
enable:
prepare_links_p_nom: false
retrieve_databundle: true
retrieve_sector_databundle: true
retrieve_cost_data: true
build_cutout: false
retrieve_irena: false
retrieve_cutout: true
build_natura_raster: false
retrieve_natura_raster: true
custom_busmap: false
# CO2 budget as a fraction of 1990 emissions
# this is over-ridden if CO2Lx is set in sector_opts
# this is also over-ridden if cb is set in sector_opts
Unit |
Values |
Description |
|
|---|---|---|---|
prepare_links_p_nom |
bool |
{true, false} |
Switch to retrieve current HVDC projects from Wikipedia |
retrieve_databundle |
bool |
{true, false} |
Switch to retrieve databundle from zenodo via the rule |
retrieve_sector_databundle |
bool |
{true, false} |
Switch to retrieve sector databundle from zenodo via the rule |
retrieve_cost_data |
bool |
{true, false} |
Switch to retrieve technology cost data from technology-data repository. |
build_cutout |
bool |
{true, false} |
Switch to enable the building of cutouts via the rule |
retrieve_irena |
bool |
{true, false} |
Switch to enable the retrieval of |
retrieve_cutout |
bool |
{true, false} |
Switch to enable the retrieval of cutouts from zenodo with |
build_natura_raster |
bool |
{true, false} |
Switch to enable the creation of the raster |
retrieve_natura_raster |
bool |
{true, false} |
Switch to enable the retrieval of |
custom_busmap |
bool |
{true, false} |
Switch to enable the use of custom busmaps in rule |
electricity#
electricity:
voltages: [220., 300., 380.]
gaslimit: false # global gas usage limit of X MWh_th
co2limit: 7.75e+7 # 0.05 * 3.1e9*0.5
co2base: 1.487e+9
agg_p_nom_limits: data/agg_p_nom_minmax.csv
operational_reserve: # like https://genxproject.github.io/GenX/dev/core/#Reserves
activate: false
epsilon_load: 0.02 # share of total load
epsilon_vres: 0.02 # share of total renewable supply
contingency: 4000 # fixed capacity in MW
max_hours:
battery: 6
H2: 168
extendable_carriers:
Generator: [solar, onwind, offwind-ac, offwind-dc, OCGT]
StorageUnit: [] # battery, H2
Store: [battery, H2]
Link: [] # H2 pipeline
# use pandas query strings here, e.g. Country not in ['Germany']
powerplants_filter: (DateOut >= 2022 or DateOut != DateOut)
# use pandas query strings here, e.g. Country in ['Germany']
custom_powerplants: false
conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass]
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, hydro]
estimate_renewable_capacities:
enable: true
# Add capacities from OPSD data
from_opsd: true
# Renewable capacities are based on existing capacities reported by IRENA
year: 2020
# Artificially limit maximum capacities to factor * (IRENA capacities),
# i.e. 110% of <years>'s capacities => expansion_limit: 1.1
# false: Use estimated renewable potentials determine by the workflow
expansion_limit: false
technology_mapping:
# Wind is the Fueltype in powerplantmatching, onwind, offwind-{ac,dc} the carrier in PyPSA-Eur
Offshore: [offwind-ac, offwind-dc]
Onshore: [onwind]
PV: [solar]
Unit |
Values |
Description |
|
|---|---|---|---|
voltages |
kV |
Any subset of {220., 300., 380.} |
Voltage levels to consider |
gaslimit |
MWhth |
float or false |
Global gas usage limit |
co2limit |
\(t_{CO_2-eq}/a\) |
float |
Cap on total annual system carbon dioxide emissions |
co2base |
\(t_{CO_2-eq}/a\) |
float |
Reference value of total annual system carbon dioxide emissions if relative emission reduction target is specified in |
agg_p_nom_limits |
file |
path |
Reference to |
operational_reserve |
Settings for reserve requirements following like GenX |
||
– activate |
bool |
true or false |
Whether to take operational reserve requirements into account during optimisation |
– epsilon_load |
– |
float |
share of total load |
– epsilon_vres |
– |
float |
share of total renewable supply |
– contingency |
MW |
float |
fixed reserve capacity |
max_hours |
|||
– battery |
h |
float |
Maximum state of charge capacity of the battery in terms of hours at full output capacity |
– H2 |
h |
float |
Maximum state of charge capacity of the hydrogen storage in terms of hours at full output capacity |
extendable_carriers |
|||
– Generator |
– |
Any extendable carrier |
Defines existing or non-existing conventional and renewable power plants to be extendable during the optimization. Conventional generators can only be built/expanded where already existent today. If a listed conventional carrier is not included in the |
– StorageUnit |
– |
Any subset of {‘battery’,’H2’} |
Adds extendable storage units (battery and/or hydrogen) at every node/bus after clustering without capacity limits and with zero initial capacity. |
– Store |
– |
Any subset of {‘battery’,’H2’} |
Adds extendable storage units (battery and/or hydrogen) at every node/bus after clustering without capacity limits and with zero initial capacity. |
– Link |
– |
Any subset of {‘H2 pipeline’} |
Adds extendable links (H2 pipelines only) at every connection where there are lines or HVDC links without capacity limits and with zero initial capacity. Hydrogen pipelines require hydrogen storage to be modelled as |
powerplants_filter |
– |
use pandas.query strings here, e.g. Country not in [‘Germany’] |
Filter query for the default powerplant database. |
custom_powerplants |
– |
use pandas.query strings here, e.g. Country in [‘Germany’] |
Filter query for the custom powerplant database. |
conventional_carriers |
– |
Any subset of {nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass} |
List of conventional power plants to include in the model from |
renewable_carriers |
– |
Any subset of {solar, onwind, offwind-ac, offwind-dc, hydro} |
List of renewable generators to include in the model. |
estimate_renewable_capacities |
|||
– enable |
bool |
Activate routine to estimate renewable capacities |
|
– from_opsd |
– |
bool |
Add capacities from OPSD data |
– year |
– |
bool |
Renewable capacities are based on existing capacities reported by IRENA for the specified year |
– expansion_limit |
– |
float or false |
Artificially limit maximum capacities to factor * (IRENA capacities), i.e. 110% of <years>’s capacities => expansion_limit: 1.1 false: Use estimated renewable potentials determine by the workflow |
– technology_mapping |
Mapping between powerplantmatching and PyPSA-Eur technology names |
atlite#
Define and specify the atlite.Cutout used for calculating renewable potentials and time-series. All options except for features are directly used as cutout parameters.
atlite:
default_cutout: europe-2013-era5
nprocesses: 4
show_progress: false # false saves time
cutouts:
# use 'base' to determine geographical bounds and time span from config
# base:
# module: era5
europe-2013-era5:
module: era5 # in priority order
x: [-12., 35.]
y: [33., 72]
dx: 0.3
dy: 0.3
time: ['2013', '2013']
europe-2013-sarah:
module: [sarah, era5] # in priority order
x: [-12., 45.]
y: [33., 65]
dx: 0.2
dy: 0.2
time: ['2013', '2013']
sarah_interpolate: false
sarah_dir:
features: [influx, temperature]
Unit |
Values |
Description |
|
|---|---|---|---|
default_cutout |
– |
str |
Defines a default cutout. |
nprocesses |
– |
int |
Number of parallel processes in cutout preparation |
show_progress |
bool |
true/false |
Whether progressbar for atlite conversion processes should be shown. False saves time. |
cutouts |
|||
– {name} |
– |
Convention is to name cutouts like |
Name of the cutout netcdf file. The user may specify multiple cutouts under configuration |
– – module |
– |
Subset of {‘era5’,’sarah’} |
Source of the reanalysis weather dataset (e.g. ERA5 or SARAH-2) |
– – x |
° |
Float interval within [-180, 180] |
Range of longitudes to download weather data for. If not defined, it defaults to the spatial bounds of all bus shapes. |
– – y |
° |
Float interval within [-90, 90] |
Range of latitudes to download weather data for. If not defined, it defaults to the spatial bounds of all bus shapes. |
– – dx |
° |
Larger than 0.25 |
Grid resolution for longitude |
– – dy |
° |
Larger than 0.25 |
Grid resolution for latitude |
– – time |
Time interval within [‘1979’, ‘2018’] (with valid pandas date time strings) |
Time span to download weather data for. If not defined, it defaults to the time interval spanned by the snapshots. |
|
– – features |
String or list of strings with valid cutout features (‘inlfux’, ‘wind’). |
When freshly building a cutout, retrieve data only for those features. If not defined, it defaults to all available features. |
renewable#
onwind#
renewable:
onwind:
cutout: europe-2013-era5
resource:
method: wind
turbine: Vestas_V112_3MW
capacity_per_sqkm: 3 # ScholzPhd Tab 4.3.1: 10MW/km^2 and assuming 30% fraction of the already restricted
# area is available for installation of wind generators due to competing land use and likely public
# acceptance issues.
# correction_factor: 0.93
corine:
# Scholz, Y. (2012). Renewable energy based electricity supply at low costs
# development of the REMix model and application for Europe. ( p.42 / p.28)
grid_codes: [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32]
distance: 1000
distance_grid_codes: [1, 2, 3, 4, 5, 6]
natura: true
excluder_resolution: 100
potential: simple # or conservative
clip_p_max_pu: 1.e-2
Unit |
Values |
Description |
|
|---|---|---|---|
cutout |
– |
Should be a folder listed in the configuration |
Specifies the directory where the relevant weather data ist stored. |
resource |
|||
– method |
– |
Must be ‘wind’ |
A superordinate technology type. |
– turbine |
– |
One of turbine types included in atlite |
Specifies the turbine type and its characteristic power curve. |
capacity_per_sqkm |
\(MW/km^2\) |
float |
Allowable density of wind turbine placement. |
corine |
|||
– grid_codes |
– |
Any subset of the CORINE Land Cover code list |
Specifies areas according to CORINE Land Cover codes which are generally eligible for wind turbine placement. |
– distance |
m |
float |
Distance to keep from areas specified in |
– distance_grid_codes |
– |
Any subset of the CORINE Land Cover code list |
Specifies areas according to CORINE Land Cover codes to which wind turbines must maintain a distance specified in the setting |
natura |
bool |
{true, false} |
Switch to exclude Natura 2000 natural protection areas. Area is excluded if |
potential |
– |
One of {‘simple’, ‘conservative’} |
Method to compute the maximal installable potential for a node; confer Rule build_renewable_profiles |
clip_p_max_pu |
p.u. |
float |
To avoid too small values in the renewables` per-unit availability time series values below this threshold are set to zero. |
correction_factor |
– |
float |
Correction factor for capacity factor time series. |
excluder_resolution |
m |
float |
Resolution on which to perform geographical elibility analysis. |
offwind-ac#
offwind-ac:
cutout: europe-2013-era5
resource:
method: wind
turbine: NREL_ReferenceTurbine_5MW_offshore
capacity_per_sqkm: 2 # ScholzPhd Tab 4.3.1: 10MW/km^2 and assuming 20% fraction of the already restricted
# area is available for installation of wind generators due to competing land use and likely public
# acceptance issues.
correction_factor: 0.8855
# proxy for wake losses
# from 10.1016/j.energy.2018.08.153
# until done more rigorously in #153
corine: [44, 255]
natura: true
ship_threshold: 400
max_depth: 50
max_shore_distance: 30000
excluder_resolution: 200
potential: simple # or conservative
clip_p_max_pu: 1.e-2
Unit |
Values |
Description |
|
|---|---|---|---|
cutout |
– |
Should be a folder listed in the configuration |
Specifies the directory where the relevant weather data ist stored. |
resource |
|||
– method |
– |
Must be ‘wind’ |
A superordinate technology type. |
– turbine |
– |
One of turbine types included in atlite |
Specifies the turbine type and its characteristic power curve. |
capacity_per_sqkm |
\(MW/km^2\) |
float |
Allowable density of wind turbine placement. |
correction_factor |
– |
float |
Correction factor for capacity factor time series. |
excluder_resolution |
m |
float |
Resolution on which to perform geographical elibility analysis. |
corine |
– |
Any realistic subset of the CORINE Land Cover code list |
Specifies areas according to CORINE Land Cover codes which are generally eligible for AC-connected offshore wind turbine placement. |
natura |
bool |
{true, false} |
Switch to exclude Natura 2000 natural protection areas. Area is excluded if |
ship_threshold |
– |
float |
Ship density threshold from which areas are excluded. |
max_depth |
m |
float |
Maximum sea water depth at which wind turbines can be build. Maritime areas with deeper waters are excluded in the process of calculating the AC-connected offshore wind potential. |
min_shore_distance |
m |
float |
Minimum distance to the shore below which wind turbines cannot be build. Such areas close to the shore are excluded in the process of calculating the AC-connected offshore wind potential. |
max_shore_distance |
m |
float |
Maximum distance to the shore above which wind turbines cannot be build. Such areas close to the shore are excluded in the process of calculating the AC-connected offshore wind potential. |
potential |
– |
One of {‘simple’, ‘conservative’} |
Method to compute the maximal installable potential for a node; confer Rule build_renewable_profiles |
clip_p_max_pu |
p.u. |
float |
To avoid too small values in the renewables` per-unit availability time series values below this threshold are set to zero. |
offwind-dc#
offwind-dc:
cutout: europe-2013-era5
resource:
method: wind
turbine: NREL_ReferenceTurbine_5MW_offshore
capacity_per_sqkm: 2 # ScholzPhd Tab 4.3.1: 10MW/km^2 and assuming 20% fraction of the already restricted
# area is available for installation of wind generators due to competing land use and likely public
# acceptance issues.
correction_factor: 0.8855
# proxy for wake losses
# from 10.1016/j.energy.2018.08.153
# until done more rigorously in #153
corine: [44, 255]
natura: true
ship_threshold: 400
max_depth: 50
min_shore_distance: 30000
excluder_resolution: 200
potential: simple # or conservative
clip_p_max_pu: 1.e-2
Unit |
Values |
Description |
|
|---|---|---|---|
cutout |
– |
Should be a folder listed in the configuration |
Specifies the directory where the relevant weather data ist stored. |
resource |
|||
– method |
– |
Must be ‘wind’ |
A superordinate technology type. |
– turbine |
– |
One of turbine types included in atlite |
Specifies the turbine type and its characteristic power curve. |
capacity_per_sqkm |
\(MW/km^2\) |
float |
Allowable density of wind turbine placement. |
correction_factor |
– |
float |
Correction factor for capacity factor time series. |
excluder_resolution |
m |
float |
Resolution on which to perform geographical elibility analysis. |
corine |
– |
Any realistic subset of the CORINE Land Cover code list |
Specifies areas according to CORINE Land Cover codes which are generally eligible for AC-connected offshore wind turbine placement. |
natura |
bool |
{true, false} |
Switch to exclude Natura 2000 natural protection areas. Area is excluded if |
ship_threshold |
– |
float |
Ship density threshold from which areas are excluded. |
max_depth |
m |
float |
Maximum sea water depth at which wind turbines can be build. Maritime areas with deeper waters are excluded in the process of calculating the AC-connected offshore wind potential. |
min_shore_distance |
m |
float |
Minimum distance to the shore below which wind turbines cannot be build. |
max_shore_distance |
m |
float |
Maximum distance to the shore above which wind turbines cannot be build. |
potential |
– |
One of {‘simple’, ‘conservative’} |
Method to compute the maximal installable potential for a node; confer Rule build_renewable_profiles |
clip_p_max_pu |
p.u. |
float |
To avoid too small values in the renewables` per-unit availability time series values below this threshold are set to zero. |
solar#
solar:
cutout: europe-2013-sarah
resource:
method: pv
panel: CSi
orientation:
slope: 35.
azimuth: 180.
capacity_per_sqkm: 1.7 # ScholzPhd Tab 4.3.1: 170 MW/km^2 and assuming 1% of the area can be used for solar PV panels
# Correction factor determined by comparing uncorrected area-weighted full-load hours to those
# published in Supplementary Data to
# Pietzcker, Robert Carl, et al. "Using the sun to decarbonize the power
# sector -- The economic potential of photovoltaics and concentrating solar
# power." Applied Energy 135 (2014): 704-720.
# This correction factor of 0.854337 may be in order if using reanalysis data.
# for discussion refer to https://github.com/PyPSA/pypsa-eur/pull/304
# correction_factor: 0.854337
corine: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 26, 31, 32]
natura: true
excluder_resolution: 100
potential: simple # or conservative
clip_p_max_pu: 1.e-2
Unit |
Values |
Description |
|
|---|---|---|---|
cutout |
– |
Should be a folder listed in the configuration |
Specifies the directory where the relevant weather data ist stored that is specified at |
resource |
|||
– method |
– |
Must be ‘pv’ |
A superordinate technology type. |
– panel |
– |
One of {‘Csi’, ‘CdTe’, ‘KANENA’} as defined in atlite |
Specifies the solar panel technology and its characteristic attributes. |
– orientation |
|||
– – slope |
° |
Realistically any angle in [0., 90.] |
Specifies the tilt angle (or slope) of the solar panel. A slope of zero corresponds to the face of the panel aiming directly overhead. A positive tilt angle steers the panel towards the equator. |
– – azimuth |
° |
Any angle in [0., 360.] |
Specifies the azimuth orientation of the solar panel. South corresponds to 180.°. |
capacity_per_sqkm |
\(MW/km^2\) |
float |
Allowable density of solar panel placement. |
correction_factor |
– |
float |
A correction factor for the capacity factor (availability) time series. |
corine |
– |
Any subset of the CORINE Land Cover code list |
Specifies areas according to CORINE Land Cover codes which are generally eligible for solar panel placement. |
natura |
bool |
{true, false} |
Switch to exclude Natura 2000 natural protection areas. Area is excluded if |
potential |
– |
One of {‘simple’, ‘conservative’} |
Method to compute the maximal installable potential for a node; confer Rule build_renewable_profiles |
clip_p_max_pu |
p.u. |
float |
To avoid too small values in the renewables` per-unit availability time series values below this threshold are set to zero. |
excluder_resolution |
m |
float |
Resolution on which to perform geographical elibility analysis. |
hydro#
hydro:
cutout: europe-2013-era5
carriers: [ror, PHS, hydro]
PHS_max_hours: 6
hydro_max_hours: "energy_capacity_totals_by_country" # one of energy_capacity_totals_by_country, estimate_by_large_installations or a float
clip_min_inflow: 1.0
Unit |
Values |
Description |
|
|---|---|---|---|
cutout |
– |
Must be ‘europe-2013-era5’ |
Specifies the directory where the relevant weather data ist stored. |
carriers |
– |
Any subset of {‘ror’, ‘PHS’, ‘hydro’} |
Specifies the types of hydro power plants to build per-unit availability time series for. ‘ror’ stands for run-of-river plants, ‘PHS’ represents pumped-hydro storage, and ‘hydro’ stands for hydroelectric dams. |
PHS_max_hours |
h |
float |
Maximum state of charge capacity of the pumped-hydro storage (PHS) in terms of hours at full output capacity |
hydro_max_hours |
h |
Any of {float, ‘energy_capacity_totals_by_country’, ‘estimate_by_large_installations’} |
Maximum state of charge capacity of the pumped-hydro storage (PHS) in terms of hours at full output capacity |
clip_min_inflow |
MW |
float |
To avoid too small values in the inflow time series, values below this threshold are set to zero. |
conventional#
Define additional generator attribute for conventional carrier types. If a scalar value is given it is applied to all generators. However if a string starting with “data/” is given, the value is interpreted as a path to a csv file with country specific values. Then, the values are read in and applied to all generators of the given carrier in the given country. Note that the value(s) overwrite the existing values.
conventional:
nuclear:
p_max_pu: "data/nuclear_p_max_pu.csv" # float of file name
Unit |
Values |
Description |
|
|---|---|---|---|
{name} |
– |
string |
For any carrier/technology overwrite attributes as listed below. |
– {attribute} |
– |
string or float |
For any attribute, can specify a float or reference to a file path to a CSV file giving floats for each country (2-letter code). |
lines#
lines:
types:
220.: "Al/St 240/40 2-bundle 220.0"
300.: "Al/St 240/40 3-bundle 300.0"
380.: "Al/St 240/40 4-bundle 380.0"
s_max_pu: 0.7
s_nom_max: .inf
length_factor: 1.25
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
Unit |
Values |
Description |
|
|---|---|---|---|
types |
– |
Values should specify a line type in PyPSA. Keys should specify the corresponding voltage level (e.g. 220., 300. and 380. kV) |
Specifies line types to assume for the different voltage levels of the ENTSO-E grid extraction. Should normally handle voltage levels 220, 300, and 380 kV |
s_max_pu |
– |
Value in [0.,1.] |
Correction factor for line capacities ( |
s_nom_max |
MW |
float |
Global upper limit for the maximum capacity of each extendable line. |
length_factor |
– |
float |
Correction factor to account for the fact that buses are not connected by lines through air-line distance. |
under_construction |
– |
One of {‘zero’: set capacity to zero, ‘remove’: remove completely, ‘keep’: keep with full capacity} |
Specifies how to handle lines which are currently under construction. |
links#
links:
p_max_pu: 1.0
p_nom_max: .inf
include_tyndp: true
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
Unit |
Values |
Description |
|
|---|---|---|---|
p_max_pu |
– |
Value in [0.,1.] |
Correction factor for link capacities |
p_nom_max |
MW |
float |
Global upper limit for the maximum capacity of each extendable DC link. |
include_tyndp |
bool |
{‘true’, ‘false’} |
Specifies whether to add HVDC link projects from the TYNDP 2018 which are at least in permitting. |
under_construction |
– |
One of {‘zero’: set capacity to zero, ‘remove’: remove completely, ‘keep’: keep with full capacity} |
Specifies how to handle lines which are currently under construction. |
transformers#
transformers:
x: 0.1
s_nom: 2000.
type: ''
Unit |
Values |
Description |
|
|---|---|---|---|
x |
p.u. |
float |
Series reactance (per unit, using |
s_nom |
MVA |
float |
Limit of apparent power which can pass through branch. Overwritten if |
type |
– |
Specifies transformer types to assume for the transformers of the ENTSO-E grid extraction. |
load#
load:
power_statistics: true # only for files from <2019; set false in order to get ENTSOE transparency data
interpolate_limit: 3 # data gaps up until this size are interpolated linearly
time_shift_for_large_gaps: 1w # data gaps up until this size are copied by copying from
manual_adjustments: true # false
scaling_factor: 1.0
Unit |
Values |
Description |
|
|---|---|---|---|
power_statistics |
bool |
{true, false} |
Whether to load the electricity consumption data of the ENTSOE power statistics (only for files from 2019 and before) or from the ENTSOE transparency data (only has load data from 2015 onwards). |
interpolate_limit |
hours |
integer |
Maximum gap size (consecutive nans) which interpolated linearly. |
time_shift_for_large_gaps |
string |
string |
Periods which are used for copying time-slices in order to fill large gaps of nans. Have to be valid |
manual_adjustments |
bool |
{true, false} |
Whether to adjust the load data manually according to the function in |
scaling_factor |
– |
float |
Global correction factor for the load time series. |
costs#
costs:
year: 2030
version: v0.5.0
rooftop_share: 0.14 # based on the potentials, assuming (0.1 kW/m2 and 10 m2/person)
fill_values:
FOM: 0
VOM: 0
efficiency: 1
fuel: 0
investment: 0
lifetime: 25
"CO2 intensity": 0
"discount rate": 0.07
# Marginal and capital costs can be overwritten
# capital_cost:
# onwind: 500
marginal_cost:
solar: 0.01
onwind: 0.015
offwind: 0.015
hydro: 0.
H2: 0.
electrolysis: 0.
fuel cell: 0.
battery: 0.
battery inverter: 0.
emission_prices: # in currency per tonne emission, only used with the option Ep
co2: 0.
Unit |
Values |
Description |
|
|---|---|---|---|
year |
– |
YYYY; e.g. ‘2030’ |
Year for which to retrieve cost assumptions of |
version |
– |
vX.X.X; e.g. ‘v0.5.0’ |
Version of |
rooftop_share |
– |
float |
Share of rooftop PV when calculating capital cost of solar (joint rooftop and utility-scale PV). |
fill_values |
– |
float |
Default values if not specified for a technology in |
capital_cost |
EUR/MW |
Keys should be in the ‘technology’ column of |
For the given technologies, assumptions about their capital investment costs are set to the corresponding value. Optional; overwrites cost assumptions from |
marginal_cost |
EUR/MWh |
Keys should be in the ‘technology’ column of |
For the given technologies, assumptions about their marginal operating costs are set to the corresponding value. Optional; overwrites cost assumptions from |
emission_prices |
Specify exogenous prices for emission types listed in |
||
– co2 |
EUR/t |
float |
Exogenous price of carbon-dioxide added to the marginal costs of fossil-fuelled generators according to their carbon intensity. Added through the keyword |
clustering#
clustering:
simplify_network:
to_substations: false # network is simplified to nodes with positive or negative power injection (i.e. substations or offwind connections)
algorithm: kmeans # choose from: [hac, kmeans]
feature: solar+onwind-time # only for hac. choose from: [solar+onwind-time, solar+onwind-cap, solar-time, solar-cap, solar+offwind-cap] etc.
exclude_carriers: []
remove_stubs: true
remove_stubs_across_borders: true
cluster_network:
algorithm: kmeans
feature: solar+onwind-time
exclude_carriers: []
aggregation_strategies:
generators:
p_nom_max: sum # use "min" for more conservative assumptions
p_nom_min: sum
p_min_pu: mean
marginal_cost: mean
committable: any
ramp_limit_up: max
ramp_limit_down: max
efficiency: mean
Unit |
Values |
Description |
|
|---|---|---|---|
simplify_network |
|||
– to_substations |
bool |
{‘true’,’false’} |
Aggregates all nodes without power injection (positive or negative, i.e. demand or generation) to electrically closest ones |
– algorithm |
str |
One of {‘kmeans’, ‘hac’, ‘modularity‘} |
|
– feature |
str |
Str in the format ‘carrier1+carrier2+…+carrierN-X’, where CarrierI can be from {‘solar’, ‘onwind’, ‘offwind’, ‘ror’} and X is one of {‘cap’, ‘time’}. |
|
– exclude_carriers |
list |
List of Str like [ ‘solar’, ‘onwind’] or empy list [] |
List of carriers which will not be aggregated. If empty, all carriers will be aggregated. |
– remove stubs |
bool |
true/false |
Controls whether radial parts of the network should be recursively aggregated. Defaults to true. |
– remove_stubs_across_borders |
bool |
true/false |
Controls whether radial parts of the network should be recursively aggregated across borders. Defaults to true. |
cluster_network |
|||
– algorithm |
str |
One of {‘kmeans’, ‘hac’} |
|
– feature |
str |
Str in the format ‘carrier1+carrier2+…+carrierN-X’, where CarrierI can be from {‘solar’, ‘onwind’, ‘offwind’, ‘ror’} and X is one of {‘cap’, ‘time’}. |
|
– exclude_carriers |
list |
List of Str like [ ‘solar’, ‘onwind’] or empy list [] |
List of carriers which will not be aggregated. If empty, all carriers will be aggregated. |
aggregation_strategies |
|||
– generators |
|||
– – {key} |
str |
{key} can be any of the component of the generator (str). It’s value can be any that can be converted to pandas.Series using getattr(). For example one of {min, max, sum}. |
Aggregates the component according to the given strategy. For example, if sum, then all values within each cluster are summed to represent the new generator. |
– buses |
|||
– – {key} |
str |
{key} can be any of the component of the bus (str). It’s value can be any that can be converted to pandas.Series using getattr(). For example one of {min, max, sum}. |
Aggregates the component according to the given strategy. For example, if sum, then all values within each cluster are summed to represent the new bus. |
energy#
Note
Only used for sector-coupling studies.
Warning
More comprehensive documentation for this segment will be released soon.
energy:
energy_totals_year: 2011
base_emissions_year: 1990
eurostat_report_year: 2016
emissions: CO2 # "CO2" or "All greenhouse gases - (CO2 equivalent)"
biomass#
Note
Only used for sector-coupling studies.
Warning
More comprehensive documentation for this segment will be released soon.
biomass:
year: 2030
scenario: ENS_Med
classes:
solid biomass:
- Agricultural waste
- Fuelwood residues
- Secondary Forestry residues - woodchips
- Sawdust
- Residues from landscape care
- Municipal waste
not included:
- Sugar from sugar beet
- Rape seed
- "Sunflower, soya seed "
- Bioethanol barley, wheat, grain maize, oats, other cereals and rye
- Miscanthus, switchgrass, RCG
- Willow
- Poplar
- FuelwoodRW
- C&P_RW
biogas:
- Manure solid, liquid
- Sludge
solar_thermal#
Note
Only used for sector-coupling studies.
Warning
More comprehensive documentation for this segment will be released soon.
solar_thermal:
clearsky_model: simple # should be "simple" or "enhanced"?
orientation:
slope: 45.
azimuth: 180.
# only relevant for foresight = myopic or perfect
existing_capacities#
Note
Only used for sector-coupling studies.
Warning
More comprehensive documentation for this segment will be released soon.
existing_capacities:
grouping_years_power: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020, 2025, 2030]
grouping_years_heat: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] # these should not extend 2020
threshold_capacity: 10
conventional_carriers:
- lignite
- coal
- oil
- uranium
exit_year: # assuming phase out at the end of the year
sector#
Note
Only used for sector-coupling studies.
Warning
More comprehensive documentation for this segment will be released soon.
sector:
district_heating:
potential: 0.6 # maximum fraction of urban demand which can be supplied by district heating
# increase of today's district heating demand to potential maximum district heating share
# progress = 0 means today's district heating share, progress = 1 means maximum fraction of urban demand is supplied by district heating
progress:
2020: 0.0
2030: 0.3
2040: 0.6
2050: 1.0
district_heating_loss: 0.15
cluster_heat_buses: false # cluster residential and service heat buses to one to save memory
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
transport_heating_deadband_upper: 20.
transport_heating_deadband_lower: 15.
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
ICE_upper_degree_factor: 1.6
EV_lower_degree_factor: 0.98
EV_upper_degree_factor: 0.63
bev_dsm: true #turns on EV battery
bev_availability: 0.5 #How many cars do smart charging
bev_energy: 0.05 #average battery size in MWh
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
bev_charge_rate: 0.011 #3-phase charger with 11 kW
bev_avail_max: 0.95
bev_avail_mean: 0.8
v2g: true #allows feed-in to grid from EV battery
#what is not EV or FCEV is oil-fuelled ICE
land_transport_fuel_cell_share:
2020: 0
2030: 0.05
2040: 0.1
2050: 0.15
land_transport_electric_share:
2020: 0
2030: 0.25
2040: 0.6
2050: 0.85
land_transport_ice_share:
2020: 1
2030: 0.7
2040: 0.3
2050: 0
transport_fuel_cell_efficiency: 0.5
transport_internal_combustion_efficiency: 0.3
agriculture_machinery_electric_share: 0
agriculture_machinery_oil_share: 1
agriculture_machinery_fuel_efficiency: 0.7 # fuel oil per use
agriculture_machinery_electric_efficiency: 0.3 # electricity per use
MWh_MeOH_per_MWh_H2: 0.8787 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64.
MWh_MeOH_per_tCO2: 4.0321 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64.
MWh_MeOH_per_MWh_e: 3.6907 # in LHV, source: DECHEMA (2017): Low carbon energy and feedstock for the European chemical industry , pg. 64.
shipping_hydrogen_liquefaction: false # whether to consider liquefaction costs for shipping H2 demands
shipping_hydrogen_share:
2020: 0
2030: 0
2040: 0
2050: 0
shipping_methanol_share:
2020: 0
2030: 0.3
2040: 0.7
2050: 1
shipping_oil_share:
2020: 1
2030: 0.7
2040: 0.3
2050: 0
shipping_methanol_efficiency: 0.46 # 10-15% higher https://www.iea-amf.org/app/webroot/files/file/Annex%20Reports/AMF_Annex_56.pdf, https://users.ugent.be/~lsileghe/documents/extended_abstract.pdf
shipping_oil_efficiency: 0.40 #For conversion of fuel oil to propulsion in 2011
aviation_demand_factor: 1. # relative aviation demand compared to today
HVC_demand_factor: 1. # relative HVC demand compared to today
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
heat_pump_sink_T: 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
# conservatively high to cover hot water and space heating in poorly-insulated buildings
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
# this can represent e.g. building renovation, building demolition, or if
# the factor is negative: increasing floor area, increased thermal comfort, population growth
reduce_space_heat_exogenously_factor: # per unit reduction in space heat demand
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
2020: 0.10 # this results in a space heat demand reduction of 10%
2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
2030: 0.09
2035: 0.11
2040: 0.16
2045: 0.21
2050: 0.29
retrofitting: # co-optimises building renovation to reduce space heat demand
retro_endogen: false # co-optimise space heat savings
cost_factor: 1.0 # weight costs for building renovation
interest_rate: 0.04 # for investment in building components
annualise_cost: true # annualise the investment costs
tax_weighting: false # weight costs depending on taxes in countries
construction_index: true # weight costs depending on labour/material costs per country
tes: true
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
decentral: 3
central: 180
boilers: true
oil_boilers: false
biomass_boiler: true
chp: true
micro_chp: false
solar_thermal: true
solar_cf_correction: 0.788457 # = >>> 1/1.2683
marginal_cost_storage: 0. #1e-4
methanation: true
helmeth: true
coal_cc: false
dac: true
co2_vent: false
allam_cycle: false
SMR: true
SMR_cc: false
regional_co2_sequestration_potential:
enable: false # enable regionally resolved geological co2 storage potential
attribute: 'conservative estimate Mt'
include_onshore: false # include onshore sequestration potentials
min_size: 3 # Gt, sites with lower potential will be excluded
max_size: 25 # Gt, max sequestration potential for any one site, TODO research suitable value
years_of_storage: 25 # years until potential exhausted at optimised annual rate
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
co2_sequestration_cost: 10 #EUR/tCO2 for sequestration of CO2
co2_spatial: false
co2network: false
cc_fraction: 0.9 # default fraction of CO2 captured with post-combustion capture
hydrogen_underground_storage: true
hydrogen_underground_storage_locations:
# - onshore # more than 50 km from sea
- nearshore # within 50 km of sea
# - offshore
ammonia: false # can be false (no NH3 carrier), true (copperplated NH3), "regional" (regionalised NH3 without network)
min_part_load_fischer_tropsch: 0.9 # p_min_pu
min_part_load_methanolisation: 0.5 # p_min_pu
use_fischer_tropsch_waste_heat: true
use_fuel_cell_waste_heat: true
use_electrolysis_waste_heat: false
electricity_distribution_grid: true
electricity_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
electricity_grid_connection: true # only applies to onshore wind and utility PV
H2_network: true
gas_network: false
H2_retrofit: false # if set to True existing gas pipes can be retrofitted to H2 pipes
# according to hydrogen backbone strategy (April, 2020) p.15
# https://gasforclimate2050.eu/wp-content/uploads/2020/07/2020_European-Hydrogen-Backbone_Report.pdf
# 60% of original natural gas capacity could be used in cost-optimal case as H2 capacity
H2_retrofit_capacity_per_CH4: 0.6 # ratio for H2 capacity per original CH4 capacity of retrofitted pipelines
gas_network_connectivity_upgrade: 1 # https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
gas_distribution_grid: true
gas_distribution_grid_cost_factor: 1.0 #multiplies cost in data/costs.csv
biomass_spatial: false # regionally resolve biomass (e.g. potentials)
biomass_transport: false # allow transport of solid biomass between nodes
conventional_generation: # generator : carrier
OCGT: gas
biomass_to_liquid: false
biosng: false
industry#
Note
Only used for sector-coupling studies.
Warning
More comprehensive documentation for this segment will be released soon.
industry:
St_primary_fraction: # fraction of steel produced via primary route versus secondary route (scrap+EAF); today fraction is 0.6
2020: 0.6
2025: 0.55
2030: 0.5
2035: 0.45
2040: 0.4
2045: 0.35
2050: 0.3
DRI_fraction: # fraction of the primary route converted to DRI + EAF
2020: 0
2025: 0
2030: 0.05
2035: 0.2
2040: 0.4
2045: 0.7
2050: 1
H2_DRI: 1.7 #H2 consumption in Direct Reduced Iron (DRI), MWh_H2,LHV/ton_Steel from 51kgH2/tSt in Vogl et al (2018) doi:10.1016/j.jclepro.2018.08.279
elec_DRI: 0.322 #electricity consumption in Direct Reduced Iron (DRI) shaft, MWh/tSt HYBRIT brochure https://ssabwebsitecdn.azureedge.net/-/media/hybrit/files/hybrit_brochure.pdf
Al_primary_fraction: # fraction of aluminium produced via the primary route versus scrap; today fraction is 0.4
2020: 0.4
2025: 0.375
2030: 0.35
2035: 0.325
2040: 0.3
2045: 0.25
2050: 0.2
MWh_NH3_per_tNH3: 5.166 # LHV
MWh_CH4_per_tNH3_SMR: 10.8 # 2012's demand from https://ec.europa.eu/docsroom/documents/4165/attachments/1/translations/en/renditions/pdf
MWh_elec_per_tNH3_SMR: 0.7 # same source, assuming 94-6% split methane-elec of total energy demand 11.5 MWh/tNH3
MWh_H2_per_tNH3_electrolysis: 6.5 # from https://doi.org/10.1016/j.joule.2018.04.017, around 0.197 tH2/tHN3 (>3/17 since some H2 lost and used for energy)
MWh_elec_per_tNH3_electrolysis: 1.17 # from https://doi.org/10.1016/j.joule.2018.04.017 Table 13 (air separation and HB)
MWh_NH3_per_MWh_H2_cracker: 1.46 # https://github.com/euronion/trace/blob/44a5ff8401762edbef80eff9cfe5a47c8d3c8be4/data/efficiencies.csv
NH3_process_emissions: 24.5 # in MtCO2/a from SMR for H2 production for NH3 from UNFCCC for 2015 for EU28
petrochemical_process_emissions: 25.5 # in MtCO2/a for petrochemical and other from UNFCCC for 2015 for EU28
HVC_primary_fraction: 1. # fraction of today's HVC produced via primary route
HVC_mechanical_recycling_fraction: 0. # fraction of today's HVC produced via mechanical recycling
HVC_chemical_recycling_fraction: 0. # fraction of today's HVC produced via chemical recycling
HVC_production_today: 52. # MtHVC/a from DECHEMA (2017), Figure 16, page 107; includes ethylene, propylene and BTX
MWh_elec_per_tHVC_mechanical_recycling: 0.547 # from SI of https://doi.org/10.1016/j.resconrec.2020.105010, Table S5, for HDPE, PP, PS, PET. LDPE would be 0.756.
MWh_elec_per_tHVC_chemical_recycling: 6.9 # Material Economics (2019), page 125; based on pyrolysis and electric steam cracking
chlorine_production_today: 9.58 # MtCl/a from DECHEMA (2017), Table 7, page 43
MWh_elec_per_tCl: 3.6 # DECHEMA (2017), Table 6, page 43
MWh_H2_per_tCl: -0.9372 # DECHEMA (2017), page 43; negative since hydrogen produced in chloralkali process
methanol_production_today: 1.5 # MtMeOH/a from DECHEMA (2017), page 62
MWh_elec_per_tMeOH: 0.167 # DECHEMA (2017), Table 14, page 65
MWh_CH4_per_tMeOH: 10.25 # DECHEMA (2017), Table 14, page 65
hotmaps_locate_missing: false
reference_year: 2015
# references:
# DECHEMA (2017): https://dechema.de/dechema_media/Downloads/Positionspapiere/Technology_study_Low_carbon_energy_and_feedstock_for_the_European_chemical_industry-p-20002750.pdf
# Material Economics (2019): https://materialeconomics.com/latest-updates/industrial-transformation-2050
solving#
solving:
#tmpdir: "path/to/tmp"
options:
formulation: kirchhoff
clip_p_max_pu: 1.e-2
load_shedding: false
noisy_costs: true
skip_iterations: true
track_iterations: false
min_iterations: 4
max_iterations: 6
seed: 123
solver:
name: gurobi
options: gurobi-default
solver_options:
highs-default:
# refer to https://ergo-code.github.io/HiGHS/options/definitions.html#solver
threads: 4
solver: "ipm"
run_crossover: "off"
small_matrix_value: 1e-6
large_matrix_value: 1e9
primal_feasibility_tolerance: 1e-5
dual_feasibility_tolerance: 1e-5
ipm_optimality_tolerance: 1e-4
parallel: "on"
random_seed: 123
gurobi-default:
threads: 4
method: 2 # barrier
crossover: 0
BarConvTol: 1.e-6
Seed: 123
AggFill: 0
PreDual: 0
GURO_PAR_BARDENSETHRESH: 200
seed: 10 # Consistent seed for all plattforms
gurobi-numeric-focus:
name: gurobi
NumericFocus: 3 # Favour numeric stability over speed
method: 2 # barrier
crossover: 0 # do not use crossover
BarHomogeneous: 1 # Use homogeneous barrier if standard does not converge
BarConvTol: 1.e-5
FeasibilityTol: 1.e-4
OptimalityTol: 1.e-4
ObjScale: -0.5
threads: 8
Seed: 123
gurobi-fallback: # Use gurobi defaults
name: gurobi
crossover: 0
method: 2 # barrier
BarHomogeneous: 1 # Use homogeneous barrier if standard does not converge
BarConvTol: 1.e-5
FeasibilityTol: 1.e-5
OptimalityTol: 1.e-5
Seed: 123
threads: 8
cplex-default:
threads: 4
lpmethod: 4 # barrier
solutiontype: 2 # non basic solution, ie no crossover
barrier_convergetol: 1.e-5
feasopt_tolerance: 1.e-6
cbc-default: {} # Used in CI
glpk-default: {} # Used in CI
mem: 30000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
Unit |
Values |
Description |
|
|---|---|---|---|
options |
|||
– formulation |
– |
Any of {‘angles’, ‘kirchhoff’, ‘cycles’, ‘ptdf’} |
Specifies which variant of linearized power flow formulations to use in the optimisation problem. Recommended is ‘kirchhoff’. Explained in this article. |
– load_shedding |
bool |
{‘true’,’false’} |
Add generators with a prohibitively high marginal cost to simulate load shedding and avoid problem infeasibilities. |
– noisy_costs |
bool |
{‘true’,’false’} |
Add random noise to marginal cost of generators by \(\mathcal{U}(0.009,0,011)\) and capital cost of lines and links by \(\mathcal{U}(0.09,0,11)\). |
– min_iterations |
– |
int |
Minimum number of solving iterations in between which resistance and reactence ( |
– max_iterations |
– |
int |
Maximum number of solving iterations in between which resistance and reactence ( |
– nhours |
– |
int |
Specifies the \(n\) first snapshots to take into account. Must be less than the total number of snapshots. Rather recommended only for debugging. |
– clip_p_max_pu |
p.u. |
float |
To avoid too small values in the renewables` per-unit availability time series values below this threshold are set to zero. |
– skip_iterations |
bool |
{‘true’,’false’} |
Skip iterating, do not update impedances of branches. Defaults to true. |
– track_iterations |
bool |
{‘true’,’false’} |
Flag whether to store the intermediate branch capacities and objective function values are recorded for each iteration in |
– seed |
– |
int |
Random seed for increased deterministic behaviour. |
solver |
|||
– name |
– |
One of {‘gurobi’, ‘cplex’, ‘cbc’, ‘glpk’, ‘ipopt’}; potentially more possible |
Solver to use for optimisation problems in the workflow; e.g. clustering and linear optimal power flow. |
– options |
– |
Key listed under |
Link to specific parameter settings. |
solver_options |
dict |
Dictionaries with solver-specific parameter settings. |
|
mem |
MB |
int |
Estimated maximum memory requirement for solving networks. |
Unit |
Values |
Description |
|
|---|---|---|---|
options |
|||
– formulation |
– |
Any of {‘angles’, ‘kirchhoff’, ‘cycles’, ‘ptdf’} |
Specifies which variant of linearized power flow formulations to use in the optimisation problem. Recommended is ‘kirchhoff’. Explained in this article. |
– load_shedding |
bool |
{‘true’,’false’} |
Add generators with a prohibitively high marginal cost to simulate load shedding and avoid problem infeasibilities. |
– noisy_costs |
bool |
{‘true’,’false’} |
Add random noise to marginal cost of generators by \(\mathcal{U}(0.009,0,011)\) and capital cost of lines and links by \(\mathcal{U}(0.09,0,11)\). |
– min_iterations |
– |
int |
Minimum number of solving iterations in between which resistance and reactence ( |
– max_iterations |
– |
int |
Maximum number of solving iterations in between which resistance and reactence ( |
– nhours |
– |
int |
Specifies the \(n\) first snapshots to take into account. Must be less than the total number of snapshots. Rather recommended only for debugging. |
– clip_p_max_pu |
p.u. |
float |
To avoid too small values in the renewables` per-unit availability time series values below this threshold are set to zero. |
– skip_iterations |
bool |
{‘true’,’false’} |
Skip iterating, do not update impedances of branches. Defaults to true. |
– track_iterations |
bool |
{‘true’,’false’} |
Flag whether to store the intermediate branch capacities and objective function values are recorded for each iteration in |
– seed |
– |
int |
Random seed for increased deterministic behaviour. |
solver |
|||
– name |
– |
One of {‘gurobi’, ‘cplex’, ‘cbc’, ‘glpk’, ‘ipopt’}; potentially more possible |
Solver to use for optimisation problems in the workflow; e.g. clustering and linear optimal power flow. |
– options |
– |
Key listed under |
Link to specific parameter settings. |
solver_options |
dict |
Dictionaries with solver-specific parameter settings. |
|
mem |
MB |
int |
Estimated maximum memory requirement for solving networks. |
plotting#
Warning
More comprehensive documentation for this segment will be released soon.
plotting:
map:
boundaries: [-11, 30, 34, 71]
color_geomap:
ocean: white
land: white
eu_node_location:
x: -5.5
y: 46.
costs_max: 1000
costs_threshold: 1
energy_max: 20000
energy_min: -20000
energy_threshold: 50.
vre_techs:
- onwind
- offwind-ac
- offwind-dc
- solar
- ror
renewable_storage_techs:
- PHS
- hydro
conv_techs:
- OCGT
- CCGT
- Nuclear
- Coal
storage_techs:
- hydro+PHS
- battery
- H2
load_carriers:
- AC load
AC_carriers:
- AC line
- AC transformer
link_carriers:
- DC line
- Converter AC-DC
heat_links:
- heat pump
- resistive heater
- CHP heat
- CHP electric
- gas boiler
- central heat pump
- central resistive heater
- central CHP heat
- central CHP electric
- central gas boiler
heat_generators:
- gas boiler
- central gas boiler
- solar thermal collector
- central solar thermal collector
nice_names:
OCGT: "Open-Cycle Gas"
CCGT: "Combined-Cycle Gas"
offwind-ac: "Offshore Wind (AC)"
offwind-dc: "Offshore Wind (DC)"
onwind: "Onshore Wind"
solar: "Solar"
PHS: "Pumped Hydro Storage"
hydro: "Reservoir & Dam"
battery: "Battery Storage"
H2: "Hydrogen Storage"
lines: "Transmission Lines"
ror: "Run of River"
tech_colors:
# wind
onwind: "#235ebc"
onshore wind: "#235ebc"
offwind: "#6895dd"
offshore wind: "#6895dd"
offwind-ac: "#6895dd"
offshore wind (AC): "#6895dd"
offshore wind ac: "#6895dd"
offwind-dc: "#74c6f2"
offshore wind (DC): "#74c6f2"
offshore wind dc: "#74c6f2"
# water
hydro: '#298c81'
hydro reservoir: '#298c81'
ror: '#3dbfb0'
run of river: '#3dbfb0'
hydroelectricity: '#298c81'
PHS: '#51dbcc'
hydro+PHS: "#08ad97"
wave: '#a7d4cf'
# solar
solar: "#f9d002"
solar PV: "#f9d002"
solar thermal: '#ffbf2b'
solar rooftop: '#ffea80'
# gas
OCGT: '#e0986c'
OCGT marginal: '#e0986c'
OCGT-heat: '#e0986c'
gas boiler: '#db6a25'
gas boilers: '#db6a25'
gas boiler marginal: '#db6a25'
gas: '#e05b09'
fossil gas: '#e05b09'
natural gas: '#e05b09'
CCGT: '#a85522'
CCGT marginal: '#a85522'
allam: '#B98F76'
gas for industry co2 to atmosphere: '#692e0a'
gas for industry co2 to stored: '#8a3400'
gas for industry: '#853403'
gas for industry CC: '#692e0a'
gas pipeline: '#ebbca0'
gas pipeline new: '#a87c62'
# oil
oil: '#c9c9c9'
oil boiler: '#adadad'
agriculture machinery oil: '#949494'
shipping oil: "#808080"
land transport oil: '#afafaf'
# nuclear
Nuclear: '#ff8c00'
Nuclear marginal: '#ff8c00'
nuclear: '#ff8c00'
uranium: '#ff8c00'
# coal
Coal: '#545454'
coal: '#545454'
Coal marginal: '#545454'
solid: '#545454'
Lignite: '#826837'
lignite: '#826837'
Lignite marginal: '#826837'
# biomass
biogas: '#e3d37d'
biomass: '#baa741'
solid biomass: '#baa741'
solid biomass transport: '#baa741'
solid biomass for industry: '#7a6d26'
solid biomass for industry CC: '#47411c'
solid biomass for industry co2 from atmosphere: '#736412'
solid biomass for industry co2 to stored: '#47411c'
biomass boiler: '#8A9A5B'
biomass to liquid: '#32CD32'
BioSNG: '#123456'
# power transmission
lines: '#6c9459'
transmission lines: '#6c9459'
electricity distribution grid: '#97ad8c'
# electricity demand
Electric load: '#110d63'
electric demand: '#110d63'
electricity: '#110d63'
industry electricity: '#2d2a66'
industry new electricity: '#2d2a66'
agriculture electricity: '#494778'
# battery + EVs
battery: '#ace37f'
battery storage: '#ace37f'
home battery: '#80c944'
home battery storage: '#80c944'
BEV charger: '#baf238'
V2G: '#e5ffa8'
land transport EV: '#baf238'
Li ion: '#baf238'
# hot water storage
water tanks: '#e69487'
hot water storage: '#e69487'
hot water charging: '#e69487'
hot water discharging: '#e69487'
# heat demand
Heat load: '#cc1f1f'
heat: '#cc1f1f'
heat demand: '#cc1f1f'
rural heat: '#ff5c5c'
central heat: '#cc1f1f'
decentral heat: '#750606'
low-temperature heat for industry: '#8f2727'
process heat: '#ff0000'
agriculture heat: '#d9a5a5'
# heat supply
heat pumps: '#2fb537'
heat pump: '#2fb537'
air heat pump: '#36eb41'
ground heat pump: '#2fb537'
Ambient: '#98eb9d'
CHP: '#8a5751'
CHP CC: '#634643'
CHP heat: '#8a5751'
CHP electric: '#8a5751'
district heating: '#e8beac'
resistive heater: '#d8f9b8'
retrofitting: '#8487e8'
building retrofitting: '#8487e8'
# hydrogen
H2 for industry: "#f073da"
H2 for shipping: "#ebaee0"
H2: '#bf13a0'
hydrogen: '#bf13a0'
SMR: '#870c71'
SMR CC: '#4f1745'
H2 liquefaction: '#d647bd'
hydrogen storage: '#bf13a0'
H2 storage: '#bf13a0'
H2 Store: '#bf13a0'
land transport fuel cell: '#6b3161'
H2 pipeline: '#f081dc'
H2 pipeline retrofitted: '#ba99b5'
H2 Fuel Cell: '#c251ae'
H2 Electrolysis: '#ff29d9'
# ammonia
NH3: '#46caf0'
ammonia: '#46caf0'
ammonia store: '#00ace0'
ammonia cracker: '#87d0e6'
Haber-Bosch: '#076987'
# syngas
Sabatier: '#9850ad'
methanation: '#c44ce6'
methane: '#c44ce6'
helmeth: '#e899ff'
# synfuels
Fischer-Tropsch: '#25c49a'
liquid: '#25c49a'
kerosene for aviation: '#a1ffe6'
naphtha for industry: '#57ebc4'
methanolisation: '#83d6d5'
methanol: '#468c8b'
shipping methanol: '#468c8b'
# co2
CC: '#f29dae'
CCS: '#f29dae'
CO2 sequestration: '#f29dae'
DAC: '#ff5270'
co2 stored: '#f2385a'
co2: '#f29dae'
co2 vent: '#ffd4dc'
CO2 pipeline: '#f5627f'
# emissions
process emissions CC: '#000000'
process emissions: '#222222'
process emissions to stored: '#444444'
process emissions to atmosphere: '#888888'
oil emissions: '#aaaaaa'
shipping oil emissions: "#555555"
shipping methanol emissions: '#666666'
land transport oil emissions: '#777777'
agriculture machinery oil emissions: '#333333'
# other
shipping: '#03a2ff'
power-to-heat: '#2fb537'
power-to-gas: '#c44ce6'
power-to-H2: '#ff29d9'
power-to-liquid: '#25c49a'
gas-to-power/heat: '#ee8340'
waste: '#e3d37d'
other: '#000000'
geothermal: '#ba91b1'
AC-AC: "#70af1d"
AC line: "#70af1d"
links: "#8a1caf"
HVDC links: "#8a1caf"
DC-DC: "#8a1caf"
DC link: "#8a1caf"
Unit |
Values |
Description |
|
|---|---|---|---|
map |
|||
– boundaries |
° |
[x1,x2,y1,y2] |
Boundaries of the map plots in degrees latitude (y) and longitude (x) |
costs_max |
bn Euro |
float |
Upper y-axis limit in cost bar plots. |
costs_threshold |
bn Euro |
float |
Threshold below which technologies will not be shown in cost bar plots. |
energy_max |
TWh |
float |
Upper y-axis limit in energy bar plots. |
energy_min |
TWh |
float |
Lower y-axis limit in energy bar plots. |
energy_threshold |
TWh |
float |
Threshold below which technologies will not be shown in energy bar plots. |
tech_colors |
– |
carrier -> HEX colour code |
Mapping from network |
nice_names |
– |
str -> str |
Mapping from network |