Simplifying Electricity Networks#
The simplification snakemake
rules prepare approximations of the network model, for which it is computationally viable to co-optimize generation, storage and transmission capacities.
simplify_network
transforms the transmission grid to a 380 kV only equivalent network, whilecluster_network
uses a k-means based clustering technique to partition the network into a given number of zones and then reduce the network to a representation with one bus per zone.
The simplification and clustering steps are described in detail in the paper
Jonas Hörsch and Tom Brown. The role of spatial scale in joint optimisations of generation and transmission for European highly renewable scenarios), 14th International Conference on the European Energy Market, 2017. arXiv:1705.07617, doi:10.1109/EEM.2017.7982024.
After simplification and clustering of the network, further electricity network components may be appended in the rule add_electricity
and the network is prepared for solving in prepare_network
.
Rule simplify_network
#
Lifts electrical transmission network to a single 380 kV voltage layer, removes dead-ends of the network, and reduces multi-hop HVDC connections to a single link.
Relevant Settings#
clustering:
simplify_network:
cluster_network:
aggregation_strategies:
links:
p_max_pu:
See also
Documentation of the configuration file config/config.yaml
at
electricity, renewable,
conventional, links
Inputs#
resources/regions_onshore.geojson
: confer busregionsresources/regions_offshore.geojson
: confer busregionsnetworks/base.nc
Outputs#
resources/regions_onshore_base.geojson
:resources/regions_offshore_base.geojson
:resources/busmap_base_s.csv
: Mapping of buses fromnetworks/base.nc
tonetworks/base_s.nc
;networks/base.nc
:
Description#
The rule simplify_network
does up to three things:
Create an equivalent transmission network in which all voltage levels are mapped to the 380 kV level by the function
simplify_network(...)
.DC only sub-networks that are connected at only two buses to the AC network are reduced to a single representative link in the function
simplify_links(...)
.Stub lines and links, i.e. dead-ends of the network, are sequentially removed from the network in the function
remove_stubs(...)
.
Rule cluster_network
#
Creates networks clustered to {cluster}
number of zones with aggregated
buses and transmission corridors.
Relevant Settings#
clustering:
cluster_network:
aggregation_strategies:
focus_weights:
solving:
solver:
name:
lines:
length_factor:
See also
Documentation of the configuration file config/config.yaml
at
Top-level configuration, renewable, solving, conventional
Inputs#
resources/regions_onshore_base.geojson
: confer Rule simplify_networkresources/regions_offshore_base.geojson
: confer Rule simplify_networkresources/busmap_base_s.csv
: confer Rule simplify_networknetworks/base.nc
: confer Rule simplify_networkdata/custom_busmap_base_s_{clusters}_{base_network}.csv
: optional input
Outputs#
resources/regions_onshore_base_s_{clusters}.geojson
:resources/regions_offshore_base_s_{clusters}.geojson
:resources/busmap_base_s_{clusters}.csv
: Mapping of buses fromnetworks/base.nc
tonetworks/base_s_{clusters}.nc
;resources/linemap_base_s_{clusters}.csv
: Mapping of lines fromnetworks/base.nc
tonetworks/base_s_{clusters}.nc
;networks/base_s_{clusters}.nc
:
Description#
Note
Is it possible to run the model without the simplify_network
rule?
No, the network clustering methods in the PyPSA module pypsa.clustering.spatial do not work reliably with multiple voltage levels and transformers.
Exemplary unsolved network clustered to 512 nodes:
Exemplary unsolved network clustered to 256 nodes:
Exemplary unsolved network clustered to 128 nodes:
Exemplary unsolved network clustered to 37 nodes:
Rule add_electricity
#
Adds existing electrical generators, hydro-electric plants as well as greenfield and battery and hydrogen storage to the clustered network.
Relevant Settings#
costs:
year: version: dicountrate: emission_prices:
electricity:
max_hours: marginal_cost: capital_cost: conventional_carriers: co2limit:
extendable_carriers: estimate_renewable_capacities:
load:
scaling_factor:
renewable:
hydro:
carriers: hydro_max_hours: hydro_capital_cost:
lines:
length_factor:
links:
length_factor:
See also
Documentation of the configuration file config/config.yaml
at costs,
electricity, load, renewable, conventional
Inputs#
resources/costs.csv
: The database of cost assumptions for all included technologies for specific years from various sources; e.g. discount rate, lifetime, investment (CAPEX), fixed operation and maintenance (FOM), variable operation and maintenance (VOM), fuel costs, efficiency, carbon-dioxide intensity.data/hydro_capacities.csv
: Hydropower plant store/discharge power capacities, energy storage capacity, and average hourly inflow by country.resources/electricity_demand_base_s.nc
Hourly nodal electricity demand profiles.resources/regions_onshore_base_s_{clusters}.geojson
: confer busregionsresources/nuts3_shapes.geojson
: confer Rule build_shapesresources/powerplants_s_{clusters}.csv
: confer Rule build_powerplantsresources/profile_{clusters}_{}.nc
: all technologies inconfig["renewables"].keys()
, confer renewableprofiles.networks/base_s_{clusters}.nc
Outputs#
networks/base_s_{clusters}_elec.nc
:
Description#
The rule add_electricity
ties all the different data inputs from the
preceding rules together into a detailed PyPSA network that is stored in
networks/base_s_{clusters}_elec.nc
. It includes:
today’s transmission topology and transfer capacities (optionally including lines which are under construction according to the config settings
lines: under_construction
andlinks: under_construction
),today’s thermal and hydro power generation capacities (for the technologies listed in the config setting
electricity: conventional_carriers
), andtoday’s load time-series (upsampled in a top-down approach according to population and gross domestic product)
It further adds extendable generators
with zero capacity for
photovoltaic, onshore and AC- as well as DC-connected offshore wind installations with today’s locational, hourly wind and solar capacity factors (but no current capacities),
additional open- and combined-cycle gas turbines (if
OCGT
and/orCCGT
is listed in the config settingelectricity: extendable_carriers
)
Furthermore, it attaches additional extendable components to the clustered network with zero initial capacity:
StorageUnits
of carrier ‘H2’ and/or ‘battery’. If this option is chosen, every bus is given an extendableStorageUnit
of the corresponding carrier. The energy and power capacities are linked through a parameter that specifies the energy capacity as maximum hours at full dispatch power and is configured inelectricity: max_hours:
. This linkage leads to one investment variable per storage unit. The defaultmax_hours
lead to long-term hydrogen and short-term battery storage units.Stores
of carrier ‘H2’ and/or ‘battery’ in combination withLinks
. If this option is chosen, the script adds extra buses with corresponding carrier where energyStores
are attached and which are connected to the corresponding power buses via two links, one each for charging and discharging. This leads to three investment variables for the energy capacity, charging and discharging capacity of the storage unit.
Rule prepare_network
#
Prepare PyPSA network for solving according to The {opts} wildcard and ll, such as.
adding an annual limit of carbon-dioxide emissions,
adding an exogenous price per tonne emissions of carbon-dioxide (or other kinds),
setting an N-1 security margin factor for transmission line capacities,
specifying an expansion limit on the cost of transmission expansion,
specifying an expansion limit on the volume of transmission expansion, and
reducing the temporal resolution by averaging over multiple hours or segmenting time series into chunks of varying lengths using
tsam
.
Relevant Settings#
costs:
year:
version:
fill_values:
emission_prices:
marginal_cost:
capital_cost:
electricity:
co2limit:
max_hours:
See also
Documentation of the configuration file config/config.yaml
at
costs, electricity
Inputs#
resources/costs.csv
: The database of cost assumptions for all included technologies for specific years from various sources; e.g. discount rate, lifetime, investment (CAPEX), fixed operation and maintenance (FOM), variable operation and maintenance (VOM), fuel costs, efficiency, carbon-dioxide intensity.networks/base_s_{clusters}.nc
: confer Rule cluster_network
Outputs#
networks/base_s_{clusters}_elec_l{ll}_{opts}.nc
: Complete PyPSA network that will be handed to thesolve_network
rule.
Description#
Tip
The rule prepare_elec_networks
runs
for all scenario
s in the configuration file
the rule prepare_network
.