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: focus_weights: 'DE': 0.6 'FR': 0.2.

co2_budget

Dictionary with planning horizons as keys.

CO2 budget as a fraction of 1990 emissions. Overwritten if CO2Lx or cb are set in {sector_opts} wildcard

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:

_images/scenarios.png
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

cf. The {simpl} wildcard

List of {simpl} wildcards to run.

clusters

cf. The {clusters} wildcard

List of {clusters} wildcards to run.

ll

cf. The {ll} wildcard

List of {ll} wildcards to run.

opts

cf. The {opts} wildcard

List of {opts} wildcards to run.

sector_opts

cf. The {sector_opts} wildcard

List of {sector_opts} wildcards to run.

planning_horizons

cf. The {planning_horizons} wildcard

List of {planning_horizon} wildcards to run.

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 left, right, or both sides both or neither side None.

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_databundle or whether to keep a custom databundle located in the corresponding folder.

retrieve_sector_databundle

bool

{true, false}

Switch to retrieve sector databundle from zenodo via the rule retrieve_sector_databundle or whether to keep a custom databundle located in the corresponding folder.

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 build_cutout.

retrieve_irena

bool

{true, false}

Switch to enable the retrieval of existing_capacities from IRENASTAT with retrieve_irena.

retrieve_cutout

bool

{true, false}

Switch to enable the retrieval of cutouts from zenodo with retrieve_cutout.

build_natura_raster

bool

{true, false}

Switch to enable the creation of the raster natura.tiff via the rule build_natura_raster.

retrieve_natura_raster

bool

{true, false}

Switch to enable the retrieval of natura.tiff from zenodo with retrieve_natura_raster.

custom_busmap

bool

{true, false}

Switch to enable the use of custom busmaps in rule cluster_network. If activated the rule looks for provided busmaps at data/custom_busmap_elec_s{simpl}_{clusters}.csv which should have the same format as resources/busmap_elec_s{simpl}_{clusters}.csv, i.e. the index should contain the buses of networks/elec_s{simpl}.nc.

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 {opts} wildcard.

agg_p_nom_limits

file

path

Reference to .csv file specifying per carrier generator nominal capacity constraints for individual countries if 'CCL' is in {opts} wildcard. Defaults to data/agg_p_nom_minmax.csv.

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 p_nom. Cf. PyPSA documentation.

– H2

h

float

Maximum state of charge capacity of the hydrogen storage in terms of hours at full output capacity p_nom. Cf. PyPSA documentation.

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 conventional_carriers list, the lower limit of the capacity expansion is set to 0.

– 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 Store.

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 resources/powerplants.csv. If an included carrier is also listed in extendable_carriers, the capacity is taken as a lower bound.

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 <region>-<year>-<source> (e.g. europe-2013-era5).

Name of the cutout netcdf file. The user may specify multiple cutouts under configuration atlite: cutouts:. Reference is used in configuration renewable: {technology}: cutout:. The cutout base may be used to automatically calculate temporal and spatial bounds of the network.

– – 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 atlite: cutouts: (e.g. ‘europe-2013-era5’) or reference an existing folder in the directory cutouts. Source module must be ERA5.

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

– 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 distance.

natura

bool

{true, false}

Switch to exclude Natura 2000 natural protection areas. Area is excluded if true.

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 atlite: cutouts: (e.g. ‘europe-2013-era5’) or reference an existing folder in the directory cutouts. Source module must be ERA5.

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 true.

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 atlite: cutouts: (e.g. ‘europe-2013-era5’) or reference an existing folder in the directory cutouts. Source module must be ERA5.

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 true.

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 atlite: cutouts: (e.g. ‘europe-2013-era5’) or reference an existing folder in the directory cutouts. Source module can be ERA5 or SARAH-2.

Specifies the directory where the relevant weather data ist stored that is specified at atlite/cutouts configuration. Both sarah and era5 work.

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 true.

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 p_nom. Cf. PyPSA documentation.

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 p_nom or heuristically determined. Cf. PyPSA documentation.

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) to approximate \(N-1\) security and reserve capacity for reactive power flows

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.

transformers#

transformers:
  x: 0.1
  s_nom: 2000.
  type: ''

Unit

Values

Description

x

p.u.

float

Series reactance (per unit, using s_nom as base power of the transformer. Overwritten if type is specified.

s_nom

MVA

float

Limit of apparent power which can pass through branch. Overwritten if type is specified.

type

A transformer type in PyPSA.

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 pandas period strings.

manual_adjustments

bool

{true, false}

Whether to adjust the load data manually according to the function in manual_adjustment().

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 resources/costs.csv.

version

vX.X.X; e.g. ‘v0.5.0’

Version of technology-data repository to use.

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 resources/costs.csv.

capital_cost

EUR/MW

Keys should be in the ‘technology’ column of resources/costs.csv. Values can be any float.

For the given technologies, assumptions about their capital investment costs are set to the corresponding value. Optional; overwrites cost assumptions from resources/costs.csv.

marginal_cost

EUR/MWh

Keys should be in the ‘technology’ column of resources/costs.csv. Values can be any float.

For the given technologies, assumptions about their marginal operating costs are set to the corresponding value. Optional; overwrites cost assumptions from resources/costs.csv.

emission_prices

Specify exogenous prices for emission types listed in network.carriers to marginal costs.

– 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 Ep in the {opts} wildcard only in the rule prepare_network`.

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 (x/r) are updated for branches according to s_nom_opt of the previous run.

– max_iterations

int

Maximum number of solving iterations in between which resistance and reactence (x/r) are updated for branches according to s_nom_opt of the previous run.

– 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 network.lines['s_nom_opt_X'] (where X labels the iteration)

– 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 solver_options.

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 (x/r) are updated for branches according to s_nom_opt of the previous run.

– max_iterations

int

Maximum number of solving iterations in between which resistance and reactence (x/r) are updated for branches according to s_nom_opt of the previous run.

– 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 network.lines['s_nom_opt_X'] (where X labels the iteration)

– 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 solver_options.

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 carrier to a colour (HEX colour code).

nice_names

str -> str

Mapping from network carrier to a more readable name.