Wildcards#

It is easy to run PyPSA-Eur for multiple scenarios using the wildcards feature of snakemake. Wildcards allow to generalise a rule to produce all files that follow a regular expression pattern which e.g. defines one particular scenario. One can think of a wildcard as a parameter that shows up in the input/output file names of the Snakefile and thereby determines which rules to run, what data to retrieve and what files to produce.

Note

Detailed explanations of how wildcards work in snakemake can be found in the relevant section of the documentation.

The {cutout} wildcard#

The {cutout} wildcard facilitates running the rule build_cutout for all cutout configurations specified under atlite: cutouts:. These cutouts will be stored in a folder specified by {cutout}.

The {technology} wildcard#

The {technology} wildcard specifies for which renewable energy technology to produce availability time series and potentials using the rule build_renewable_profiles. It can take the values onwind, offwind-ac, offwind-dc, and solar but not hydro (since hydroelectric plant profiles are created by a different rule).

The {simpl} wildcard#

The {simpl} wildcard specifies number of buses a detailed network model should be pre-clustered to in the rule simplify_network (before cluster_network).

The {clusters} wildcard#

The {clusters} wildcard specifies the number of buses a detailed network model should be reduced to in the rule cluster_network. The number of clusters must be lower than the total number of nodes and higher than the number of countries. However, a country counts twice if it has two asynchronous subnetworks (e.g. Denmark or Italy).

If an m is placed behind the number of clusters (e.g. 100m), generators are only moved to the clustered buses but not aggregated by carrier; i.e. the clustered bus may have more than one e.g. wind generator.

The {ll} wildcard#

The {ll} wildcard specifies what limits on line expansion are set for the optimisation model. It is handled in the rule prepare_network.

The wildcard, in general, consists of two parts:

  1. The first part can be v (for setting a limit on line volume) or c (for setting a limit on line cost)

  2. The second part can be opt or a float bigger than one (e.g. 1.25).

    1. If opt is chosen line expansion is optimised according to its capital cost (where the choice v only considers overhead costs for HVDC transmission lines, while c uses more accurate costs distinguishing between overhead and underwater sections and including inverter pairs).

    2. v1.25 will limit the total volume of line expansion to 25 % of currently installed capacities weighted by individual line lengths; investment costs are neglected.

    3. c1.25 will allow to build a transmission network that costs no more than 25 % more than the current system.

The {opts} wildcard#

The {opts} wildcard is used for electricity-only studies. It triggers optional constraints, which are activated in either prepare_network or the solve_network step. It may hold multiple triggers separated by -, i.e. Co2L-3H contains the Co2L trigger and the 3H switch. There are currently:

Trigger

Description

Definition

Status

nH; i.e. 2H-6H

Resample the time-resolution by averaging over every n snapshots

prepare_network: average_every_nhours() and its caller)

In active use

nSEG; e.g. 4380SEG

Apply time series segmentation with tsam package to n adjacent snapshots of varying lengths based on capacity factors of varying renewables, hydro inflow and load.

prepare_network: apply_time_segmentation()

In active use

Co2L

Add an overall absolute carbon-dioxide emissions limit configured in electricity: co2limit. If a float is appended an overall emission limit relative to the emission level given in electricity: co2base is added (e.g. Co2L0.05 limits emissisions to 5% of what is given in electricity: co2base)

prepare_network: add_co2limit() and its caller

In active use

Ep

Add cost for a carbon-dioxide price configured in costs: emission_prices: co2 to marginal_cost of generators (other emission types listed in network.carriers possible as well)

prepare_network: add_emission_prices() and its caller

In active use

Ept

Add monthly cost for a carbon-dioxide price based on historical values built by the rule build_monthly_prices

In active use

CCL

Add minimum and maximum levels of generator nominal capacity per carrier for individual countries. These can be specified in the file linked at electricity: agg_p_nom_limits in the configuration. File defaults to data/agg_p_nom_minmax.csv.

solve_network

In active use

EQ

Require each country or node to on average produce a minimal share of its total consumption itself. Example: EQ0.5c demands each country to produce on average at least 50% of its consumption; EQ0.5 demands each node to produce on average at least 50% of its consumption.

solve_network

In active use

ATK

Require each node to be autarkic. Example: ATK removes all lines and links. ATKc removes all cross-border lines and links.

prepare_network

In active use

BAU

Add a per-carrier minimal overall capacity; i.e. at least 40GW of OCGT in Europe; configured in electricity: BAU_mincapacities

solve_network: add_opts_constraints()

Untested

SAFE

Add a capacity reserve margin of a certain fraction above the peak demand to which renewable generators and storage do not contribute. Ignores network.

solve_network add_opts_constraints()

Untested

carrier+{c|p|m}factor

Alter the capital cost (c), installable potential (p) or marginal costs (m) of a carrier by a factor. Example: solar+c0.5 reduces the capital cost of solar to 50% of original values.

prepare_network

In active use

CH4L

Add an overall absolute gas limit. If configured in electricity: gaslimit it is given in MWh thermal, if a float is appended, the overall gaslimit is assumed to be given in TWh thermal (e.g. CH4L200 limits gas dispatch to 200 TWh termal)

prepare_network: add_gaslimit()

In active use

The {sector_opts} wildcard#

Warning

More comprehensive documentation for this wildcard will be added soon. 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

The {sector_opts} wildcard is only used for sector-coupling studies.

Trigger

Description

Definition

Status

nH

i.e. 2H-6H

Resample the time-resolution by averaging over every n snapshots, prepare_network: average_every_nhours() and its caller)

In active use

Co2L

Add an overall absolute carbon-dioxide emissions limit configured in electricity: co2limit. If a float is appended an overall emission limit relative to the emission level given in electricity: co2base is added (e.g. Co2L0.05 limits emissisions to 5% of what is given in electricity: co2base)

prepare_network: add_co2limit() and its caller

In active use

carrier+{c|p|m}factor

Alter the capital cost (c), installable potential (p) or marginal costs (m) of a carrier by a factor. Example: solar+c0.5 reduces the capital cost of solar to 50% of original values.

prepare_network

In active use

T

Add land transport sector

In active use

H

Add heating sector

In active use

B

Add biomass

In active use

I

Add industry sector

In active use

A

Add agriculture sector

In active use

dist``+``n

Add distribution grid with investment costs of n times costs in resources/costs_{cost_year}.csv

In active use

seq``+``n

Sets the CO2 sequestration potential to n Mt CO2 per year

In active use

The {scope} wildcard#

Takes values residential, urban, total.

The {planning_horizons} wildcard#

Warning

More comprehensive documentation for this wildcard will be added soon.

The {planning_horizons} wildcard is only used for sector-coupling studies. It takes years as values, e.g. 2020, 2030, 2040, 2050.