Wildcards¶
It is easy to run PyPSA-Earth 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.
Detailed explanations of how wildcards work in snakemake can be found in the
relevant section of the documentation.
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.
If a flex is placed behind the number of clusters (e.g. 100flex),
the number of clusters will be the minimum between the desired value of clusters
and the actual number of buses.
The wildcard value all specifies that no clustering is executed and the whole buses are used.
The wildcard value min specifies that the network is clustered to the smallest network possible
accounting for the topology of the network (e.g. not fully meshed networks, isolated areas, etc.).
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), or
`l` (for a line-specific limit on line expansion).
2. The second part can be
`opt` or a float bigger than one (e.g. 1.25).
(a) 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).
(b) `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.
(c) `c1.25` will allow to build a transmission network that
costs no more than 25 % more than the current system.
(d) `l1.25` will allow to build a transmission network where
each line is expanded to no more than 25% of its capacity.
The {opts} wildcard¶
The {opts} wildcard 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 |
An experimental option to 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 |
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 or maximal overall capacity, i.e. at least 40GW of OCGT in Europe, or at maximum 80GW of OCGT in Europe, configured in electricity: BAU_mincapacities, or in electricity: BAU_maxcapacities. |
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 |
RES |
Add an overall relative share of renewable generation to total load (e.g. RES0.5 enforces renewables to fulfil a 50% share of total load ). |
nan | In active use |
The {country} wildcard¶
The rules make_summary and plot_summary (generating summaries of all or a subselection
of the solved networks) as well as plot_p_nom_map (for plotting the cumulative
generation potentials for renewable technologies) can be narrowed to
individual countries using the {country} wildcard.
If country=all, then the rule acts on the network for all countries
defined in config.yaml. If otherwise country=DE or another 2-letter
country code, then the network is narrowed to buses of this country
for the rule. For example to get a summary of the energy generated
in Germany (in the solution for Europe) use:
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 wildcard can moreover be used to create technology specific figures and summaries.
For instance {technology} can be used to plot regionally disaggregated potentials
with the rule plot_p_nom_max.
The {attr} wildcard¶
The {attr} wildcard specifies which attribute is used for size
representations of network components on a map plot produced by the rule
plot_network. While it might be extended in the future, {attr}
currently only supports plotting of p_nom.
The {ext} wildcard¶
The {ext} wildcard specifies the file type of the figures the
rule plot_network, plot_summary, and plot_p_nom_max produce.
Typical examples are pdf and png. The list of supported file
formats depends on the used backend. To query the supported file types on your system, issue: