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, while

  • cluster_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

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 busregions

  • resources/regions_offshore.geojson: confer busregions

  • networks/base.nc

Outputs#

Description#

The rule simplify_network does up to three things:

  1. Create an equivalent transmission network in which all voltage levels are mapped to the 380 kV level by the function simplify_network(...).

  2. 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(...).

  3. 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#

Outputs#

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:

img/base_s_512.png

Exemplary unsolved network clustered to 256 nodes:

img/base_s_256.png

Exemplary unsolved network clustered to 128 nodes:

img/base_s_128.png

Exemplary unsolved network clustered to 37 nodes:

img/base_s_37.png

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 busregions

  • resources/nuts3_shapes.geojson: confer Rule build_shapes

  • resources/powerplants_s_{clusters}.csv: confer Rule build_powerplants

  • resources/profile_{clusters}_{}.nc: all technologies in config["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 and links: under_construction),

  • today’s thermal and hydro power generation capacities (for the technologies listed in the config setting electricity: conventional_carriers), and

  • today’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/or CCGT is listed in the config setting electricity: 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 extendable StorageUnit 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 in electricity: max_hours:. This linkage leads to one investment variable per storage unit. The default max_hours lead to long-term hydrogen and short-term battery storage units.

  • Stores of carrier ‘H2’ and/or ‘battery’ in combination with Links. If this option is chosen, the script adds extra buses with corresponding carrier where energy Stores 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 the solve_network rule.

Description#

Tip

The rule prepare_elec_networks runs for all scenario s in the configuration file the rule prepare_network.