From 013b705ee471014f066e9715273dd0503f48804e Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Fri, 13 Sep 2024 15:37:01 +0200 Subject: [PATCH] Clustering: build renewable profiles and add all assets after clustering (#1201) * Cluster first: build renewable profiles and add all assets after clustering * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * correction: pass landfall_lengths through functions * assign landfall_lenghts correctly * remove parameter add_land_use_constraint * fix network_dict * calculate distance to shoreline, remove underwater_fraction * adjust simplification parameter to exclude Crete from offshore wind connections * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove unused geth2015 hydro capacities * removing remaining traces of {simpl} wildcard * add release notes and update workflow graphics * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: lisazeyen --- .gitignore | 2 + Snakefile | 1 - config/config.default.yaml | 22 +- config/examples/config.entsoe-all.yaml | 2 - config/examples/config.perfect.yaml | 2 - doc/configtables/clustering.csv | 8 +- doc/configtables/electricity.csv | 2 +- doc/configtables/enable.csv | 2 +- doc/configtables/links.csv | 1 + doc/configtables/load.csv | 3 + doc/configtables/offwind-ac.csv | 1 + doc/configtables/offwind-dc.csv | 1 + doc/configtables/scenario.csv | 1 - doc/configuration.rst | 2 +- doc/img/intro-workflow.png | Bin 124775 -> 445946 bytes doc/introduction.rst | 4 +- doc/preparation.rst | 19 +- doc/release_notes.rst | 59 +- doc/simplification.rst | 11 +- doc/tutorial.rst | 221 +-- doc/tutorial_sector.rst | 1289 +++++++++-------- doc/wildcards.rst | 14 - rules/build_electricity.smk | 322 ++-- rules/build_sector.smk | 318 ++-- rules/collect.smk | 27 +- rules/common.smk | 6 +- rules/postprocess.smk | 64 +- rules/solve_electricity.smk | 22 +- rules/solve_myopic.smk | 50 +- rules/solve_overnight.smk | 14 +- rules/solve_perfect.smk | 53 +- rules/validate.smk | 18 +- scripts/add_brownfield.py | 14 - scripts/add_electricity.py | 570 +++++--- scripts/add_existing_baseyear.py | 86 +- scripts/add_extra_components.py | 253 ---- scripts/add_transmission_projects_and_dlr.py | 106 ++ scripts/build_biomass_potentials.py | 1 - .../run.py | 1 - scripts/build_clustered_population_layouts.py | 6 +- scripts/build_cop_profiles/run.py | 1 - scripts/build_daily_heat_demand.py | 5 +- scripts/build_district_heat_share.py | 1 - scripts/build_egs_potentials.py | 1 - scripts/build_electricity_demand_base.py | 127 ++ .../build_existing_heating_distribution.py | 5 +- scripts/build_gas_input_locations.py | 1 - scripts/build_gdp_pop_non_nuts3.py | 6 +- scripts/build_hac_features.py | 47 + scripts/build_hourly_heat_demand.py | 5 +- scripts/build_industrial_distribution_key.py | 7 +- ...build_industrial_energy_demand_per_node.py | 7 +- ...industrial_energy_demand_per_node_today.py | 7 +- .../build_industrial_production_per_node.py | 10 +- scripts/build_line_rating.py | 55 +- ...build_population_weighted_energy_totals.py | 1 - scripts/build_powerplants.py | 4 +- scripts/build_renewable_profiles.py | 271 +--- scripts/build_retro_cost.py | 1 - scripts/build_salt_cavern_potentials.py | 4 +- scripts/build_sequestration_potentials.py | 4 +- scripts/build_shipping_demand.py | 6 +- scripts/build_solar_thermal_profiles.py | 10 +- scripts/build_temperature_profiles.py | 7 +- scripts/build_transport_demand.py | 6 +- scripts/cluster_gas_network.py | 2 +- scripts/cluster_network.py | 441 ++---- scripts/determine_availability_matrix.py | 194 +++ .../determine_availability_matrix_MD_UA.py | 14 +- scripts/make_summary.py | 3 +- scripts/make_summary_perfect.py | 3 +- scripts/plot_gas_network.py | 1 - scripts/plot_hydrogen_network.py | 1 - scripts/plot_power_network.py | 1 - scripts/plot_power_network_perfect.py | 1 - scripts/plot_statistics.py | 1 - scripts/plot_validation_cross_border_flows.py | 1 - scripts/plot_validation_electricity_prices.py | 1 - .../plot_validation_electricity_production.py | 1 - scripts/prepare_network.py | 9 +- scripts/prepare_perfect_foresight.py | 1 - scripts/prepare_sector_network.py | 77 +- scripts/simplify_network.py | 384 +---- scripts/solve_network.py | 106 +- scripts/solve_operations_network.py | 1 - scripts/time_aggregation.py | 9 +- test.sh | 2 +- 87 files changed, 2657 insertions(+), 2794 deletions(-) delete mode 100644 scripts/add_extra_components.py create mode 100644 scripts/add_transmission_projects_and_dlr.py create mode 100644 scripts/build_electricity_demand_base.py create mode 100644 scripts/build_hac_features.py create mode 100644 scripts/determine_availability_matrix.py diff --git a/.gitignore b/.gitignore index 21062dd3..27a2fb18 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,5 @@ d1gam3xoknrgr2.cloudfront.net/ *.ipynb merger-todos.md + +*.html diff --git a/Snakefile b/Snakefile index eb99437b..90a44c9d 100644 --- a/Snakefile +++ b/Snakefile @@ -39,7 +39,6 @@ localrules: wildcard_constraints: - simpl="[a-zA-Z0-9]*", clusters="[0-9]+(m|c)?|all", ll=r"(v|c)([0-9\.]+|opt)", opts=r"[-+a-zA-Z0-9\.]*", diff --git a/config/config.default.yaml b/config/config.default.yaml index 063f768e..a98a0af7 100644 --- a/config/config.default.yaml +++ b/config/config.default.yaml @@ -37,8 +37,6 @@ foresight: overnight # docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#scenario # Wildcard docs in https://pypsa-eur.readthedocs.io/en/latest/wildcards.html scenario: - simpl: - - '' ll: - vopt clusters: @@ -188,6 +186,7 @@ renewable: max_shore_distance: 30000 excluder_resolution: 200 clip_p_max_pu: 1.e-2 + landfall_length: 10 offwind-dc: cutout: europe-2013-sarah3-era5 resource: @@ -205,6 +204,7 @@ renewable: min_shore_distance: 30000 excluder_resolution: 200 clip_p_max_pu: 1.e-2 + landfall_length: 10 offwind-float: cutout: europe-2013-sarah3-era5 resource: @@ -225,6 +225,7 @@ renewable: min_depth: 60 max_depth: 1000 clip_p_max_pu: 1.e-2 + landfall_length: 10 solar: cutout: europe-2013-sarah3-era5 resource: @@ -301,6 +302,7 @@ links: p_max_pu: 1.0 p_nom_max: .inf max_extension: 30000 #MW + length_factor: 1.25 under_construction: 'keep' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity for lines in grid extract # docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#transmission_projects @@ -335,6 +337,9 @@ load: scaling_factor: 1.0 fixed_year: false # false or year (e.g. 2013) supplement_synthetic: true + distribution_key: + gdp: 0.6 + population: 0.4 # docs # TODO: PyPSA-Eur merge issue in prepare_sector_network.py @@ -849,16 +854,15 @@ clustering: focus_weights: false simplify_network: to_substations: false - algorithm: kmeans # choose from: [hac, kmeans] - feature: solar+onwind-time - exclude_carriers: [] remove_stubs: true - remove_stubs_across_borders: true + remove_stubs_across_borders: false cluster_network: algorithm: kmeans - feature: solar+onwind-time - exclude_carriers: [] - consider_efficiency_classes: false + hac_features: + - wnd100m + - influx_direct + exclude_carriers: [] + consider_efficiency_classes: false aggregation_strategies: generators: committable: any diff --git a/config/examples/config.entsoe-all.yaml b/config/examples/config.entsoe-all.yaml index 9f52094d..3c275ae7 100644 --- a/config/examples/config.entsoe-all.yaml +++ b/config/examples/config.entsoe-all.yaml @@ -10,8 +10,6 @@ run: shared_cutouts: true scenario: - simpl: - - '' ll: - vopt clusters: diff --git a/config/examples/config.perfect.yaml b/config/examples/config.perfect.yaml index 7bfdbdd2..811ecbb8 100644 --- a/config/examples/config.perfect.yaml +++ b/config/examples/config.perfect.yaml @@ -10,8 +10,6 @@ foresight: perfect # docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#scenario # Wildcard docs in https://pypsa-eur.readthedocs.io/en/latest/wildcards.html scenario: - simpl: - - '' ll: - v1.0 clusters: diff --git a/doc/configtables/clustering.csv b/doc/configtables/clustering.csv index 65411738..42e45793 100644 --- a/doc/configtables/clustering.csv +++ b/doc/configtables/clustering.csv @@ -2,16 +2,14 @@ focus_weights,,,Optionally specify the focus weights for the clustering of countries. For instance: `DE: 0.8` will distribute 80% of all nodes to Germany and 20% to the rest of the countries. 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." --- consider_efficiency_classes,bool,"{'true','false'}","Aggregated each carriers into the top 10-quantile (high), the bottom 90-quantile (low), and everything in between (medium)." +-- hac_features,list,"List of meteorological variables contained in the weather data cutout that should be considered for hierarchical clustering.", +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." +consider_efficiency_classes,bool,"{'true','false'}","Aggregated each carriers into the top 10-quantile (high), the bottom 90-quantile (low), and everything in between (medium)." 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." diff --git a/doc/configtables/electricity.csv b/doc/configtables/electricity.csv index f1676187..5fe20967 100644 --- a/doc/configtables/electricity.csv +++ b/doc/configtables/electricity.csv @@ -27,7 +27,7 @@ custom_powerplants,--,"use `pandas.query `_." build_cutout,bool,"{true, false}","Switch to enable the building of cutouts via the rule :mod:`build_cutout`." retrieve_cutout,bool,"{true, false}","Switch to enable the retrieval of cutouts from zenodo with :mod:`retrieve_cutout`." -custom_busmap,bool,"{true, false}","Switch to enable the use of custom busmaps in rule :mod:`cluster_network`. If activated the rule looks for provided busmaps at ``data/busmaps/elec_s{simpl}_{clusters}_{base_network}.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``. {base_network} is the name of the selected base_network in electricity, e.g. ``gridkit``, ``osm-prebuilt``, or ``osm-raw``." +custom_busmap,bool,"{true, false}","Switch to enable the use of custom busmaps in rule :mod:`cluster_network`. If activated the rule looks for provided busmaps at ``data/busmaps/base_s_{clusters}_{base_network}.csv`` which should have the same format as ``resources/busmap_base_s_{clusters}.csv``, i.e. the index should contain the buses of ``networks/base_s.nc``. {base_network} is the name of the selected base_network in electricity, e.g. ``gridkit``, ``osm-prebuilt``, or ``osm-raw``." drop_leap_day,bool,"{true, false}","Switch to drop February 29 from all time-dependent data in leap years" diff --git a/doc/configtables/links.csv b/doc/configtables/links.csv index 9dedc36a..56342c7d 100644 --- a/doc/configtables/links.csv +++ b/doc/configtables/links.csv @@ -2,4 +2,5 @@ p_max_pu,--,"Value in [0.,1.]","Correction factor for link capacities ``p_nom``." p_nom_max,MW,"float","Global upper limit for the maximum capacity of each extendable DC link." max_extension,MW,"float","Upper limit for the extended capacity of each extendable DC link." +length_factor,--,float,"Correction factor to account for the fact that buses are *not* connected by links 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." diff --git a/doc/configtables/load.csv b/doc/configtables/load.csv index 9ebfea32..293772fa 100644 --- a/doc/configtables/load.csv +++ b/doc/configtables/load.csv @@ -5,3 +5,6 @@ manual_adjustments,bool,"{true, false}","Whether to adjust the load data manuall scaling_factor,--,float,"Global correction factor for the load time series." fixed_year,--,Year or False,"To specify a fixed year for the load time series that deviates from the snapshots' year" supplement_synthetic,bool,"{true, false}","Whether to supplement missing data for selected time period should be supplemented by synthetic data from https://zenodo.org/records/10820928." +distribution_key,--,--,"Distribution key for spatially disaggregating the per-country electricity demand data." +-- gdp,float,"[0, 1]","Weighting factor for the GDP data in the distribution key." +-- population,float,"[0, 1]","Weighting factor for the population data in the distribution key." diff --git a/doc/configtables/offwind-ac.csv b/doc/configtables/offwind-ac.csv index c9c7c843..7dc8a443 100644 --- a/doc/configtables/offwind-ac.csv +++ b/doc/configtables/offwind-ac.csv @@ -15,3 +15,4 @@ max_depth,m,float,"Maximum sea water depth at which wind turbines can be build. 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." 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." +landfall_length,km,float,"Fixed length of the cable connection that is onshorelandfall in km. If 'centroid', the length is calculated as the distance to centroid of the onshore bus." diff --git a/doc/configtables/offwind-dc.csv b/doc/configtables/offwind-dc.csv index 86bf0cdc..c78e0624 100644 --- a/doc/configtables/offwind-dc.csv +++ b/doc/configtables/offwind-dc.csv @@ -15,3 +15,4 @@ max_depth,m,float,"Maximum sea water depth at which wind turbines can be build. 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." 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." +landfall_length,km,float,"Fixed length of the cable connection that is onshorelandfall in km. If 'centroid', the length is calculated as the distance to centroid of the onshore bus." diff --git a/doc/configtables/scenario.csv b/doc/configtables/scenario.csv index d456be80..a4e662d8 100644 --- a/doc/configtables/scenario.csv +++ b/doc/configtables/scenario.csv @@ -1,5 +1,4 @@ ,Unit,Values,Description -simpl,--,cf. :ref:`simpl`,"List of ``{simpl}`` wildcards to run." clusters,--,cf. :ref:`clusters`,"List of ``{clusters}`` wildcards to run." ll,--,cf. :ref:`ll`,"List of ``{ll}`` wildcards to run." opts,--,cf. :ref:`opts`,"List of ``{opts}`` wildcards to run." diff --git a/doc/configuration.rst b/doc/configuration.rst index e140261a..38adf1c4 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -87,7 +87,7 @@ facilitate running multiple scenarios through a single command 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 +``results/networks/base_s_{clusters}_elec_l{ll}_{opts}.nc`` for **all combinations** of the provided wildcard values as defined by Python's `itertools.product(...) `__ function diff --git a/doc/img/intro-workflow.png b/doc/img/intro-workflow.png index 87cec61f99f19fbfaeb220346b08e0130bb3172d..e75e75e864d585f6540c60f9f5a0c4931b2e1855 100644 GIT binary patch literal 445946 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 $Xm1wl@7vNwZ|jQFMm3M;5TRTJp;k-i%OXqC^S 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 z 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

P?PuclKkk#}Gpp;ZX5v=wuCyeCOq+BS8gc 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 QJtz-(y85}Sb4q9e0Os8m$^ZZW diff --git a/doc/introduction.rst b/doc/introduction.rst index d0f7386d..0d0bd413 100644 --- a/doc/introduction.rst +++ b/doc/introduction.rst @@ -35,7 +35,7 @@ For instance, an invocation to .. code:: bash - .../pypsa-eur % snakemake -call results/networks/elec_s_128_ec_lvopt_.nc + .../pypsa-eur % snakemake -call results/networks/base_s_128_elec_lvopt_.nc follows this dependency graph @@ -50,7 +50,7 @@ preceding rules which another rule takes as input data. .. note:: The dependency graph was generated using - ``snakemake --dag results/networks/elec_s_128_ec_lvopt_.nc -F | sed -n "/digraph/,/}/p" | dot -Tpng -o doc/img/intro-workflow.png`` + ``snakemake --dag results/networks/base_s_128_elec_lvopt_.nc -F | sed -n "/digraph/,/}/p" | dot -Tpng -o doc/img/intro-workflow.png`` For the use of ``snakemake``, it makes sense to familiarize yourself quickly with the `basic tutorial diff --git a/doc/preparation.rst b/doc/preparation.rst index 8de4af42..ebae97d1 100644 --- a/doc/preparation.rst +++ b/doc/preparation.rst @@ -27,11 +27,12 @@ Then the process continues by calculating conventional power plant capacities, p - :mod:`build_powerplants` for today's thermal power plant capacities using `powerplantmatching `__ allocating these to the closest substation for each powerplant, - :mod:`build_ship_raster` for building shipping traffic density, +- :mod:`determine_availability_matrix` for the land eligibility analysis of each cutout grid cell for PV, onshore and offshore wind, - :mod:`build_renewable_profiles` for the hourly capacity factors and installation potentials constrained by land-use in each substation's Voronoi cell for PV, onshore and offshore wind, and - :mod:`build_hydro_profile` for the hourly per-unit hydro power availability time series. The central rule :mod:`add_electricity` then ties all the different data inputs -together into a detailed PyPSA network stored in ``networks/elec.nc``. +together into a detailed PyPSA network stored in ``networks/base_s_{clusters}_elec.nc``. .. _cutout: @@ -115,6 +116,15 @@ Rule ``determine_availability_matrix_MD_UA`` .. automodule:: determine_availability_matrix_MD_UA + +.. _renewableprofiles: + +Rule ``determine_availability_matrix`` +====================================== + +.. automodule:: determine_availability_matrix + + .. _renewableprofiles: Rule ``build_renewable_profiles`` @@ -129,10 +139,3 @@ Rule ``build_hydro_profile`` =============================== .. automodule:: build_hydro_profile - -.. _electricity: - -Rule ``add_electricity`` -============================= - -.. automodule:: add_electricity diff --git a/doc/release_notes.rst b/doc/release_notes.rst index 0e3bb751..501bb5d8 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -8,7 +8,8 @@ Release Notes ########################################## -.. Upcoming Release +Upcoming Release +================ PyPSA-Eur 0.13.0 (13th September 2024) ====================================== @@ -115,6 +116,62 @@ PyPSA-Eur 0.13.0 (13th September 2024) * The sources of nearly all data files are now listed in the documentation. (https://github.com/PyPSA/pypsa-eur/pull/1284) +* Rearranged workflow to cluster the electricity network before calculating + renewable profiles and adding further electricity system components. + + - Moved rules ``simplify_network`` and ``cluster_network`` before + ``add_electricity`` and ``build_renewable_profiles``. + + - Split rule ``build_renewable_profiles`` into two separate rules, + ``determine_availability_matrix`` for land eligibility analysis and + ``build_renewable_profiles``, which now only computes the profiles and total + potentials from the pre-computed availability matrix. + + - Removed variables ``weight``, ``underwater_fraction``, and ``potential`` from the + output of ``build_renewable_profiles`` as it is no longer needed. + + - HAC-clustering is now based on wind speeds and irradiation time series + rather than capacity factors of wind and solar power plants. + + - Added new rule ``build_hac_features`` that aggregates cutout weather data to + base regions in preparation for ``cluster_network``. + + - Removed ``{simpl}`` wildcard and all associated code of the ``m`` suffix of + the ``{cluster}`` wildcard. This means that the option to pre-cluster the + network in ``simplify_network`` was removed. It will be superseded by + clustering renewable profiles and potentials within clustered regions by + resource classes soon. + + - Added new rule ``add_transmission_projects_and_dlr`` which adds the outputs + from ``build_line_rating`` and ``build_transmission_projects`` to the output + of ``base_network``. + + - The rule ``add_extra_components`` was integrated into ``add_electricity`` + + - Added new rule ``build_electricity_demand_base`` to determine the load + distribution of the substations in the base network (which was previously + done in ``add_electricity``). This time series is used as weights for + kmeans-clustering in ``cluster_network`` and is later added to the network in + ``add_electricity`` in aggregated form. + + - The weights of the kmeans clustering algorithm are now exclusively based on + the load distribution. Previously, they also included the distribution of + thermal capacity. + + - Since the networks no longer start with the whole electricity system added + pre-clustering, the files have been renamed from ``elec...nc`` to + ``base...nc`` to identify them as derivatives of ``base.nc``. + + - The scripts ``simplify_network.py`` and ``cluster_network.py`` were + simplified to become less nested and profited from the removed need to deal + with cost data. + + - New configuration options to calculate connection costs of offshore wind + plants. Offshore connection costs are now calculated based on the underwater + distance to the shoreline plus a configurable ``landfall_length`` which + defaults to 10 km. Previously the distance to the region's centroid was + used, which is not practical when the regions are already aggregated. + PyPSA-Eur 0.12.0 (30th August 2024) =================================== diff --git a/doc/simplification.rst b/doc/simplification.rst index cb048461..f313e7cb 100644 --- a/doc/simplification.rst +++ b/doc/simplification.rst @@ -9,7 +9,7 @@ Simplifying Electricity Networks ########################################## -The simplification ``snakemake`` rules prepare **approximations** of the full model, for which it is computationally viable to co-optimize generation, storage and transmission capacities. +The simplification ``snakemake`` rules prepare **approximations** of the network model, for which it is computationally viable to co-optimize generation, storage and transmission capacities. - :mod:`simplify_network` transforms the transmission grid to a 380 kV only equivalent network, while - :mod:`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. @@ -18,7 +18,7 @@ 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, additional components may be appended in the rule :mod:`add_extra_components` and the network is prepared for solving in :mod:`prepare_network`. +After simplification and clustering of the network, further electricity network components may be appended in the rule :mod:`add_electricity` and the network is prepared for solving in :mod:`prepare_network`. .. _simplify: @@ -34,13 +34,12 @@ Rule ``cluster_network`` .. automodule:: cluster_network -.. _extra_components: +.. _electricity: -Rule ``add_extra_components`` +Rule ``add_electricity`` ============================= -.. automodule:: add_extra_components - +.. automodule:: add_electricity .. _prepare: diff --git a/doc/tutorial.rst b/doc/tutorial.rst index f514491e..41daa372 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -32,7 +32,7 @@ configuration, execute .. code:: bash :class: full-width - snakemake -call results/test-elec/networks/elec_s_6_ec_lcopt_.nc --configfile config/test/config.electricity.yaml + snakemake -call results/test-elec/networks/base_s_6_elec_lcopt_.nc --configfile config/test/config.electricity.yaml This configuration is set to download a reduced cutout via the rule :mod:`retrieve_cutout`. For more information on the data dependencies of PyPSA-Eur, continue reading :ref:`data`. @@ -114,9 +114,9 @@ clustered down to 6 buses and every 24 hours aggregated to one snapshot. The com .. code:: bash - snakemake -call results/test-elec/networks/elec_s_6_ec_lcopt_.nc --configfile config/test/config.electricity.yaml + snakemake -call results/test-elec/networks/base_s_6_elec_lcopt_.nc --configfile config/test/config.electricity.yaml -orders ``snakemake`` to run the rule :mod:`solve_network` that produces the solved network and stores it in ``results/networks`` with the name ``elec_s_6_ec_lcopt_.nc``: +orders ``snakemake`` to run the rule :mod:`solve_network` that produces the solved network and stores it in ``results/networks`` with the name ``base_s_6_elec_lcopt_.nc``: .. literalinclude:: ../rules/solve_electricity.smk :start-at: rule solve_network: @@ -132,98 +132,129 @@ This triggers a workflow of multiple preceding jobs that depend on each rule's i graph[bgcolor=white, margin=0]; node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=2]; edge[penwidth=2, color=grey]; - 0[label = "solve_network", color = "0.16 0.6 0.85", style="rounded"]; - 1[label = "prepare_network\nll: copt\nopts: ", color = "0.40 0.6 0.85", style="rounded"]; - 2[label = "add_extra_components", color = "0.03 0.6 0.85", style="rounded"]; - 3[label = "cluster_network\nclusters: 6", color = "0.26 0.6 0.85", style="rounded"]; - 4[label = "simplify_network\nsimpl: ", color = "0.17 0.6 0.85", style="rounded"]; - 5[label = "add_electricity", color = "0.39 0.6 0.85", style="rounded"]; - 6[label = "build_renewable_profiles\ntechnology: solar", color = "0.13 0.6 0.85", style="rounded"]; - 7[label = "base_network", color = "0.01 0.6 0.85", style="rounded"]; - 8[label = "retrieve_osm_prebuilt", color = "0.27 0.6 0.85", style="rounded"]; - 9[label = "build_shapes", color = "0.18 0.6 0.85", style="rounded"]; - 10[label = "retrieve_naturalearth_countries", color = "0.41 0.6 0.85", style="rounded"]; - 11[label = "retrieve_eez", color = "0.14 0.6 0.85", style="rounded"]; - 12[label = "retrieve_databundle", color = "0.38 0.6 0.85", style="rounded"]; - 13[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.51 0.6 0.85", style="rounded"]; - 14[label = "build_renewable_profiles\ntechnology: solar-hsat", color = "0.13 0.6 0.85", style="rounded"]; - 15[label = "build_renewable_profiles\ntechnology: onwind", color = "0.13 0.6 0.85", style="rounded"]; - 16[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.13 0.6 0.85", style="rounded"]; - 17[label = "build_ship_raster", color = "0.16 0.6 0.85", style="rounded"]; - 18[label = "retrieve_ship_raster", color = "0.53 0.6 0.85", style="rounded"]; - 19[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.13 0.6 0.85", style="rounded"]; - 20[label = "build_renewable_profiles\ntechnology: offwind-float", color = "0.13 0.6 0.85", style="rounded"]; - 21[label = "build_line_rating", color = "0.46 0.6 0.85", style="rounded"]; - 22[label = "build_transmission_projects", color = "0.29 0.6 0.85", style="rounded"]; - 23[label = "retrieve_cost_data\nyear: 2030", color = "0.11 0.6 0.85", style="rounded"]; - 24[label = "build_powerplants", color = "0.18 0.6 0.85", style="rounded"]; - 25[label = "build_electricity_demand", color = "0.30 0.6 0.85", style="rounded"]; - 26[label = "retrieve_electricity_demand", color = "0.13 0.6 0.85", style="rounded"]; - 27[label = "retrieve_synthetic_electricity_demand", color = "0.43 0.6 0.85", style="rounded"]; + 0[label = "solve_network", color = "0.19 0.6 0.85", style="rounded"]; + 1[label = "prepare_network\nll: copt\nopts: ", color = "0.24 0.6 0.85", style="rounded"]; + 2[label = "add_electricity", color = "0.35 0.6 0.85", style="rounded"]; + 3[label = "build_renewable_profiles", color = "0.15 0.6 0.85", style="rounded"]; + 4[label = "determine_availability_matrix\ntechnology: solar", color = "0.39 0.6 0.85", style="rounded"]; + 5[label = "retrieve_databundle", color = "0.65 0.6 0.85", style="rounded"]; + 6[label = "build_shapes", color = "0.45 0.6 0.85", style="rounded"]; + 7[label = "retrieve_naturalearth_countries", color = "0.03 0.6 0.85", style="rounded"]; + 8[label = "retrieve_eez", color = "0.17 0.6 0.85", style="rounded"]; + 9[label = "cluster_network\nclusters: 6", color = "0.38 0.6 0.85", style="rounded"]; + 10[label = "simplify_network", color = "0.14 0.6 0.85", style="rounded"]; + 11[label = "add_transmission_projects_and_dlr", color = "0.61 0.6 0.85", style="rounded"]; + 12[label = "base_network", color = "0.36 0.6 0.85", style="rounded"]; + 13[label = "retrieve_osm_prebuilt", color = "0.22 0.6 0.85", style="rounded"]; + 14[label = "build_line_rating", color = "0.50 0.6 0.85", style="rounded"]; + 15[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.02 0.6 0.85", style="rounded"]; + 16[label = "build_transmission_projects", color = "0.08 0.6 0.85", style="rounded"]; + 17[label = "build_electricity_demand_base", color = "0.11 0.6 0.85", style="rounded"]; + 18[label = "build_electricity_demand", color = "0.60 0.6 0.85", style="rounded"]; + 19[label = "retrieve_electricity_demand", color = "0.60 0.6 0.85", style="rounded"]; + 20[label = "retrieve_synthetic_electricity_demand", color = "0.32 0.6 0.85", style="rounded"]; + 21[label = "build_renewable_profiles", color = "0.15 0.6 0.85", style="rounded"]; + 22[label = "determine_availability_matrix\ntechnology: solar-hsat", color = "0.39 0.6 0.85", style="rounded"]; + 23[label = "build_renewable_profiles", color = "0.15 0.6 0.85", style="rounded"]; + 24[label = "determine_availability_matrix\ntechnology: onwind", color = "0.39 0.6 0.85", style="rounded"]; + 25[label = "build_renewable_profiles", color = "0.15 0.6 0.85", style="rounded"]; + 26[label = "determine_availability_matrix\ntechnology: offwind-ac", color = "0.39 0.6 0.85", style="rounded"]; + 27[label = "build_ship_raster", color = "0.12 0.6 0.85", style="rounded"]; + 28[label = "retrieve_ship_raster", color = "0.44 0.6 0.85", style="rounded"]; + 29[label = "build_renewable_profiles", color = "0.15 0.6 0.85", style="rounded"]; + 30[label = "determine_availability_matrix\ntechnology: offwind-dc", color = "0.39 0.6 0.85", style="rounded"]; + 31[label = "build_renewable_profiles", color = "0.15 0.6 0.85", style="rounded"]; + 32[label = "determine_availability_matrix\ntechnology: offwind-float", color = "0.39 0.6 0.85", style="rounded"]; + 33[label = "retrieve_cost_data\nyear: 2030", color = "0.01 0.6 0.85", style="rounded"]; + 34[label = "build_powerplants", color = "0.52 0.6 0.85", style="rounded"]; 1 -> 0 2 -> 1 - 23 -> 1 + 33 -> 1 3 -> 2 + 21 -> 2 23 -> 2 + 25 -> 2 + 29 -> 2 + 31 -> 2 + 9 -> 2 + 33 -> 2 + 34 -> 2 + 17 -> 2 4 -> 3 - 23 -> 3 + 6 -> 3 + 9 -> 3 + 15 -> 3 5 -> 4 - 23 -> 4 - 7 -> 4 - 6 -> 5 - 14 -> 5 - 15 -> 5 - 16 -> 5 - 19 -> 5 - 20 -> 5 - 7 -> 5 - 21 -> 5 - 22 -> 5 - 23 -> 5 - 24 -> 5 - 25 -> 5 - 9 -> 5 + 6 -> 4 + 9 -> 4 + 15 -> 4 7 -> 6 - 12 -> 6 - 9 -> 6 - 13 -> 6 - 8 -> 7 - 9 -> 7 + 8 -> 6 + 5 -> 6 10 -> 9 - 11 -> 9 - 12 -> 9 - 7 -> 14 + 17 -> 9 + 11 -> 10 + 12 -> 10 + 12 -> 11 + 14 -> 11 + 16 -> 11 + 13 -> 12 + 6 -> 12 12 -> 14 - 9 -> 14 - 13 -> 14 - 7 -> 15 - 12 -> 15 - 9 -> 15 - 13 -> 15 - 7 -> 16 + 15 -> 14 12 -> 16 - 17 -> 16 - 9 -> 16 - 13 -> 16 + 6 -> 16 + 10 -> 17 + 6 -> 17 18 -> 17 - 13 -> 17 - 7 -> 19 - 12 -> 19 - 17 -> 19 - 9 -> 19 - 13 -> 19 - 7 -> 20 - 12 -> 20 - 17 -> 20 - 9 -> 20 - 13 -> 20 - 7 -> 21 - 13 -> 21 - 7 -> 22 + 19 -> 18 + 20 -> 18 + 22 -> 21 + 6 -> 21 + 9 -> 21 + 15 -> 21 + 5 -> 22 + 6 -> 22 9 -> 22 - 7 -> 24 + 15 -> 22 + 24 -> 23 + 6 -> 23 + 9 -> 23 + 15 -> 23 + 5 -> 24 + 6 -> 24 + 9 -> 24 + 15 -> 24 26 -> 25 - 27 -> 25 + 6 -> 25 + 9 -> 25 + 15 -> 25 + 5 -> 26 + 27 -> 26 + 6 -> 26 + 9 -> 26 + 15 -> 26 + 28 -> 27 + 15 -> 27 + 30 -> 29 + 6 -> 29 + 9 -> 29 + 15 -> 29 + 5 -> 30 + 27 -> 30 + 6 -> 30 + 9 -> 30 + 15 -> 30 + 32 -> 31 + 6 -> 31 + 9 -> 31 + 15 -> 31 + 5 -> 32 + 27 -> 32 + 6 -> 32 + 9 -> 32 + 15 -> 32 + 9 -> 34 } | @@ -237,9 +268,10 @@ In the terminal, this will show up as a list of jobs to be run: job count ------------------------------------- ------- add_electricity 1 - add_extra_components 1 + add_transmission_projects_and_dlr 1 base_network 1 build_electricity_demand 1 + build_electricity_demand_base 1 build_line_rating 1 build_powerplants 1 build_renewable_profiles 6 @@ -247,6 +279,7 @@ In the terminal, this will show up as a list of jobs to be run: build_ship_raster 1 build_transmission_projects 1 cluster_network 1 + determine_availability_matrix 6 prepare_network 1 retrieve_cost_data 1 retrieve_cutout 1 @@ -259,7 +292,7 @@ In the terminal, this will show up as a list of jobs to be run: retrieve_synthetic_electricity_demand 1 simplify_network 1 solve_network 1 - total 28 + total 35 ``snakemake`` then runs these jobs in the correct order. @@ -269,13 +302,12 @@ A job (here ``simplify_network``) will display its attributes and normally some .. code:: bash rule simplify_network: - input: resources/test/networks/elec.nc, resources/test/costs_2030.csv, resources/test/regions_onshore.geojson, resources/test/regions_offshore.geojson - output: resources/test/networks/elec_s.nc, resources/test/regions_onshore_elec_s.geojson, resources/test/regions_offshore_elec_s.geojson, resources/test/busmap_elec_s.csv - log: logs/test/simplify_network/elec_s.log - jobid: 4 - benchmark: benchmarks/test/simplify_network/elec_s + input: resources/test/networks/base_extended.nc, resources/test/regions_onshore.geojson, resources/test/regions_offshore.geojson + output: resources/test/networks/base_s.nc, resources/test/regions_onshore_base_s.geojson, resources/test/regions_offshore_base_s.geojson, resources/test/busmap_base_s.csv + log: logs/test/simplify_network.log + jobid: 10 + benchmark: benchmarks/test/simplify_network_b reason: Forced execution - wildcards: simpl= resources: tmpdir=, mem_mb=12000, mem_mib=11445 Once the whole worktree is finished, it should state so in the terminal. @@ -291,10 +323,9 @@ You can produce any output file occurring in the ``Snakefile`` by running For example, you can explore the evolution of the PyPSA networks by running #. ``snakemake resources/networks/base.nc -call --configfile config/test/config.electricity.yaml`` -#. ``snakemake resources/networks/elec.nc -call --configfile config/test/config.electricity.yaml`` -#. ``snakemake resources/networks/elec_s.nc -call --configfile config/test/config.electricity.yaml`` -#. ``snakemake resources/networks/elec_s_6.nc -call --configfile config/test/config.electricity.yaml`` -#. ``snakemake resources/networks/elec_s_6_ec_lcopt_.nc -call --configfile config/test/config.electricity.yaml`` +#. ``snakemake resources/networks/base_s.nc -call --configfile config/test/config.electricity.yaml`` +#. ``snakemake resources/networks/base_s_6.nc -call --configfile config/test/config.electricity.yaml`` +#. ``snakemake resources/networks/base_s_6_elec_lcopt_.nc -call --configfile config/test/config.electricity.yaml`` To run all combinations of wildcard values provided in the ``config/config.yaml`` under ``scenario:``, you can use the collection rule ``solve_elec_networks``. @@ -332,6 +363,6 @@ Jupyter Notebooks). import pypsa - n = pypsa.Network("results/networks/elec_s_6_ec_lcopt_.nc") + n = pypsa.Network("results/networks/base_s_6_elec_lcopt_.nc") For inspiration, read the `examples section in the PyPSA documentation `__. diff --git a/doc/tutorial_sector.rst b/doc/tutorial_sector.rst index a369356f..3455f8f0 100644 --- a/doc/tutorial_sector.rst +++ b/doc/tutorial_sector.rst @@ -69,7 +69,7 @@ which were already included in the electricity-only tutorial: job count ------------------------------------------------ ------- add_electricity 1 - add_extra_components 1 + add_transmission_projects_and_dlr 1 all 1 base_network 1 build_ammonia_production 1 @@ -80,6 +80,7 @@ which were already included in the electricity-only tutorial: build_daily_heat_demand 1 build_district_heat_share 1 build_electricity_demand 1 + build_electricity_demand_base 1 build_energy_totals 1 build_gas_input_locations 1 build_gas_network 1 @@ -102,13 +103,13 @@ which were already included in the electricity-only tutorial: build_shapes 1 build_ship_raster 1 build_shipping_demand 1 - build_simplified_population_layouts 1 build_solar_thermal_profiles 1 build_temperature_profiles 1 build_transmission_projects 1 build_transport_demand 1 cluster_gas_network 1 cluster_network 1 + determine_availability_matrix 6 make_summary 1 plot_gas_network 1 plot_hydrogen_network 1 @@ -127,16 +128,19 @@ which were already included in the electricity-only tutorial: retrieve_gas_infrastructure_data 1 retrieve_gem_europe_gas_tracker 1 retrieve_gem_steel_plant_tracker 1 + retrieve_hotmaps_industrial_sites 1 + retrieve_jrc_enspreso_biomass 1 retrieve_jrc_idees 1 retrieve_naturalearth_countries 1 retrieve_osm_prebuilt 1 retrieve_ship_raster 1 retrieve_synthetic_electricity_demand 1 + retrieve_usgs_ammonia_production 1 retrieve_worldbank_urban_population 1 simplify_network 1 solve_sector_network 1 time_aggregation 1 - total 74 + total 83 This covers the retrieval of additional raw data from online resources and preprocessing data about the transport, industry, and heating sectors as well as @@ -155,266 +159,299 @@ successfully. graph[bgcolor=white, margin=0]; node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=2]; edge[penwidth=2, color=grey]; - 0[label = "all", color = "0.22 0.6 0.85", style="rounded"]; - 1[label = "plot_summary", color = "0.11 0.6 0.85", style="rounded"]; - 2[label = "make_summary", color = "0.30 0.6 0.85", style="rounded"]; - 3[label = "solve_sector_network", color = "0.42 0.6 0.85", style="rounded"]; + 0[label = "all", color = "0.41 0.6 0.85", style="rounded"]; + 1[label = "plot_summary", color = "0.60 0.6 0.85", style="rounded"]; + 2[label = "make_summary", color = "0.62 0.6 0.85", style="rounded"]; + 3[label = "solve_sector_network", color = "0.62 0.6 0.85", style="rounded"]; 4[label = "prepare_sector_network\nsector_opts: ", color = "0.45 0.6 0.85", style="rounded"]; - 5[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.44 0.6 0.85", style="rounded"]; - 6[label = "base_network", color = "0.26 0.6 0.85", style="rounded"]; - 7[label = "retrieve_osm_prebuilt", color = "0.01 0.6 0.85", style="rounded"]; - 8[label = "build_shapes", color = "0.50 0.6 0.85", style="rounded"]; - 9[label = "retrieve_naturalearth_countries", color = "0.09 0.6 0.85", style="rounded"]; - 10[label = "retrieve_eez", color = "0.52 0.6 0.85", style="rounded"]; - 11[label = "retrieve_databundle", color = "0.00 0.6 0.85", style="rounded"]; - 12[label = "build_ship_raster", color = "0.29 0.6 0.85", style="rounded"]; - 13[label = "retrieve_ship_raster", color = "0.13 0.6 0.85", style="rounded"]; - 14[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.06 0.6 0.85", style="rounded"]; - 15[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.44 0.6 0.85", style="rounded"]; - 16[label = "build_renewable_profiles\ntechnology: offwind-float", color = "0.44 0.6 0.85", style="rounded"]; - 17[label = "cluster_gas_network", color = "0.48 0.6 0.85", style="rounded"]; - 18[label = "build_gas_network", color = "0.59 0.6 0.85", style="rounded"]; - 19[label = "retrieve_gas_infrastructure_data", color = "0.14 0.6 0.85", style="rounded"]; - 20[label = "cluster_network\nclusters: 5", color = "0.08 0.6 0.85", style="rounded"]; - 21[label = "simplify_network\nsimpl: ", color = "0.25 0.6 0.85", style="rounded"]; - 22[label = "add_electricity", color = "0.46 0.6 0.85", style="rounded"]; - 23[label = "build_renewable_profiles\ntechnology: solar", color = "0.44 0.6 0.85", style="rounded"]; - 24[label = "build_renewable_profiles\ntechnology: solar-hsat", color = "0.44 0.6 0.85", style="rounded"]; - 25[label = "build_renewable_profiles\ntechnology: onwind", color = "0.44 0.6 0.85", style="rounded"]; - 26[label = "build_transmission_projects", color = "0.63 0.6 0.85", style="rounded"]; - 27[label = "retrieve_cost_data\nyear: 2030", color = "0.05 0.6 0.85", style="rounded"]; - 28[label = "build_powerplants", color = "0.43 0.6 0.85", style="rounded"]; - 29[label = "build_electricity_demand", color = "0.39 0.6 0.85", style="rounded"]; - 30[label = "retrieve_electricity_demand", color = "0.62 0.6 0.85", style="rounded"]; - 31[label = "retrieve_synthetic_electricity_demand", color = "0.31 0.6 0.85", style="rounded"]; - 32[label = "build_gas_input_locations", color = "0.45 0.6 0.85", style="rounded"]; - 33[label = "retrieve_gem_europe_gas_tracker", color = "0.33 0.6 0.85", style="rounded"]; - 34[label = "time_aggregation", color = "0.60 0.6 0.85", style="rounded"]; - 35[label = "prepare_network\nll: v1.5\nopts: ", color = "0.23 0.6 0.85", style="rounded"]; - 36[label = "add_extra_components", color = "0.36 0.6 0.85", style="rounded"]; - 37[label = "build_hourly_heat_demand", color = "0.15 0.6 0.85", style="rounded"]; - 38[label = "build_daily_heat_demand", color = "0.57 0.6 0.85", style="rounded"]; - 39[label = "build_population_layouts", color = "0.47 0.6 0.85", style="rounded"]; - 40[label = "retrieve_worldbank_urban_population", color = "0.19 0.6 0.85", style="rounded"]; - 41[label = "build_solar_thermal_profiles", color = "0.11 0.6 0.85", style="rounded"]; - 42[label = "retrieve_eurostat_data", color = "0.04 0.6 0.85", style="rounded"]; - 43[label = "build_population_weighted_energy_totals\nkind: energy", color = "0.04 0.6 0.85", style="rounded"]; - 44[label = "build_energy_totals", color = "0.30 0.6 0.85", style="rounded"]; - 45[label = "retrieve_jrc_idees", color = "0.02 0.6 0.85", style="rounded"]; - 46[label = "retrieve_eurostat_household_data", color = "0.49 0.6 0.85", style="rounded"]; - 47[label = "build_clustered_population_layouts", color = "0.19 0.6 0.85", style="rounded"]; - 48[label = "build_population_weighted_energy_totals\nkind: heat", color = "0.04 0.6 0.85", style="rounded"]; - 49[label = "build_heat_totals", color = "0.08 0.6 0.85", style="rounded"]; - 50[label = "build_shipping_demand", color = "0.52 0.6 0.85", style="rounded"]; - 51[label = "build_transport_demand", color = "0.16 0.6 0.85", style="rounded"]; - 52[label = "build_temperature_profiles", color = "0.58 0.6 0.85", style="rounded"]; - 53[label = "build_biomass_potentials\nplanning_horizons: 2030", color = "0.55 0.6 0.85", style="rounded"]; - 54[label = "build_salt_cavern_potentials", color = "0.28 0.6 0.85", style="rounded"]; - 55[label = "build_simplified_population_layouts", color = "0.14 0.6 0.85", style="rounded"]; - 56[label = "build_industrial_energy_demand_per_node", color = "0.24 0.6 0.85", style="rounded"]; - 57[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2030", color = "0.60 0.6 0.85", style="rounded"]; - 58[label = "build_industry_sector_ratios", color = "0.26 0.6 0.85", style="rounded"]; - 59[label = "build_ammonia_production", color = "0.16 0.6 0.85", style="rounded"]; - 60[label = "build_industrial_energy_demand_per_country_today", color = "0.18 0.6 0.85", style="rounded"]; - 61[label = "build_industrial_production_per_country", color = "0.61 0.6 0.85", style="rounded"]; - 62[label = "build_industrial_production_per_node", color = "0.65 0.6 0.85", style="rounded"]; - 63[label = "build_industrial_distribution_key", color = "0.31 0.6 0.85", style="rounded"]; - 64[label = "retrieve_gem_steel_plant_tracker", color = "0.27 0.6 0.85", style="rounded"]; - 65[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2030", color = "0.09 0.6 0.85", style="rounded"]; - 66[label = "build_industrial_energy_demand_per_node_today", color = "0.40 0.6 0.85", style="rounded"]; - 67[label = "build_district_heat_share\nplanning_horizons: 2030", color = "0.07 0.6 0.85", style="rounded"]; - 68[label = "build_cop_profiles", color = "0.38 0.6 0.85", style="rounded"]; - 69[label = "build_central_heating_temperature_profiles", color = "0.55 0.6 0.85", style="rounded"]; - 70[label = "plot_power_network_clustered", color = "0.20 0.6 0.85", style="rounded"]; - 71[label = "plot_power_network", color = "0.53 0.6 0.85", style="rounded"]; - 72[label = "plot_hydrogen_network", color = "0.64 0.6 0.85", style="rounded"]; - 73[label = "plot_gas_network", color = "0.28 0.6 0.85", style="rounded"]; + 5[label = "build_renewable_profiles", color = "0.20 0.6 0.85", style="rounded"]; + 6[label = "determine_availability_matrix\ntechnology: offwind-ac", color = "0.24 0.6 0.85", style="rounded"]; + 7[label = "retrieve_databundle", color = "0.58 0.6 0.85", style="rounded"]; + 8[label = "build_ship_raster", color = "0.51 0.6 0.85", style="rounded"]; + 9[label = "retrieve_ship_raster", color = "0.03 0.6 0.85", style="rounded"]; + 10[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.32 0.6 0.85", style="rounded"]; + 11[label = "build_shapes", color = "0.11 0.6 0.85", style="rounded"]; + 12[label = "retrieve_naturalearth_countries", color = "0.63 0.6 0.85", style="rounded"]; + 13[label = "retrieve_eez", color = "0.00 0.6 0.85", style="rounded"]; + 14[label = "cluster_network\nclusters: 5", color = "0.64 0.6 0.85", style="rounded"]; + 15[label = "simplify_network", color = "0.21 0.6 0.85", style="rounded"]; + 16[label = "add_transmission_projects_and_dlr", color = "0.17 0.6 0.85", style="rounded"]; + 17[label = "base_network", color = "0.53 0.6 0.85", style="rounded"]; + 18[label = "retrieve_osm_prebuilt", color = "0.21 0.6 0.85", style="rounded"]; + 19[label = "build_transmission_projects", color = "0.02 0.6 0.85", style="rounded"]; + 20[label = "build_electricity_demand_base", color = "0.44 0.6 0.85", style="rounded"]; + 21[label = "build_electricity_demand", color = "0.16 0.6 0.85", style="rounded"]; + 22[label = "retrieve_electricity_demand", color = "0.06 0.6 0.85", style="rounded"]; + 23[label = "retrieve_synthetic_electricity_demand", color = "0.09 0.6 0.85", style="rounded"]; + 24[label = "build_renewable_profiles", color = "0.20 0.6 0.85", style="rounded"]; + 25[label = "determine_availability_matrix\ntechnology: offwind-dc", color = "0.24 0.6 0.85", style="rounded"]; + 26[label = "build_renewable_profiles", color = "0.20 0.6 0.85", style="rounded"]; + 27[label = "determine_availability_matrix\ntechnology: offwind-float", color = "0.24 0.6 0.85", style="rounded"]; + 28[label = "cluster_gas_network", color = "0.39 0.6 0.85", style="rounded"]; + 29[label = "build_gas_network", color = "0.29 0.6 0.85", style="rounded"]; + 30[label = "retrieve_gas_infrastructure_data", color = "0.25 0.6 0.85", style="rounded"]; + 31[label = "build_gas_input_locations", color = "0.58 0.6 0.85", style="rounded"]; + 32[label = "retrieve_gem_europe_gas_tracker", color = "0.05 0.6 0.85", style="rounded"]; + 33[label = "time_aggregation", color = "0.66 0.6 0.85", style="rounded"]; + 34[label = "prepare_network\nll: v1.5\nopts: ", color = "0.55 0.6 0.85", style="rounded"]; + 35[label = "add_electricity", color = "0.36 0.6 0.85", style="rounded"]; + 36[label = "build_renewable_profiles", color = "0.20 0.6 0.85", style="rounded"]; + 37[label = "determine_availability_matrix\ntechnology: solar", color = "0.24 0.6 0.85", style="rounded"]; + 38[label = "build_renewable_profiles", color = "0.20 0.6 0.85", style="rounded"]; + 39[label = "determine_availability_matrix\ntechnology: solar-hsat", color = "0.24 0.6 0.85", style="rounded"]; + 40[label = "build_renewable_profiles", color = "0.20 0.6 0.85", style="rounded"]; + 41[label = "determine_availability_matrix\ntechnology: onwind", color = "0.24 0.6 0.85", style="rounded"]; + 42[label = "retrieve_cost_data\nyear: 2030", color = "0.55 0.6 0.85", style="rounded"]; + 43[label = "build_powerplants", color = "0.18 0.6 0.85", style="rounded"]; + 44[label = "build_hourly_heat_demand", color = "0.29 0.6 0.85", style="rounded"]; + 45[label = "build_daily_heat_demand", color = "0.40 0.6 0.85", style="rounded"]; + 46[label = "build_population_layouts", color = "0.27 0.6 0.85", style="rounded"]; + 47[label = "retrieve_worldbank_urban_population", color = "0.30 0.6 0.85", style="rounded"]; + 48[label = "build_solar_thermal_profiles", color = "0.27 0.6 0.85", style="rounded"]; + 49[label = "retrieve_eurostat_data", color = "0.13 0.6 0.85", style="rounded"]; + 50[label = "build_population_weighted_energy_totals\nkind: energy", color = "0.24 0.6 0.85", style="rounded"]; + 51[label = "build_energy_totals", color = "0.26 0.6 0.85", style="rounded"]; + 52[label = "retrieve_jrc_idees", color = "0.48 0.6 0.85", style="rounded"]; + 53[label = "retrieve_eurostat_household_data", color = "0.12 0.6 0.85", style="rounded"]; + 54[label = "build_clustered_population_layouts", color = "0.35 0.6 0.85", style="rounded"]; + 55[label = "build_population_weighted_energy_totals\nkind: heat", color = "0.24 0.6 0.85", style="rounded"]; + 56[label = "build_heat_totals", color = "0.01 0.6 0.85", style="rounded"]; + 57[label = "build_shipping_demand", color = "0.60 0.6 0.85", style="rounded"]; + 58[label = "build_transport_demand", color = "0.50 0.6 0.85", style="rounded"]; + 59[label = "build_temperature_profiles", color = "0.54 0.6 0.85", style="rounded"]; + 60[label = "build_biomass_potentials\nplanning_horizons: 2030", color = "0.45 0.6 0.85", style="rounded"]; + 61[label = "retrieve_jrc_enspreso_biomass", color = "0.07 0.6 0.85", style="rounded"]; + 62[label = "build_salt_cavern_potentials", color = "0.18 0.6 0.85", style="rounded"]; + 63[label = "build_industrial_energy_demand_per_node", color = "0.65 0.6 0.85", style="rounded"]; + 64[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2030", color = "0.64 0.6 0.85", style="rounded"]; + 65[label = "build_industry_sector_ratios", color = "0.51 0.6 0.85", style="rounded"]; + 66[label = "build_ammonia_production", color = "0.15 0.6 0.85", style="rounded"]; + 67[label = "retrieve_usgs_ammonia_production", color = "0.38 0.6 0.85", style="rounded"]; + 68[label = "build_industrial_energy_demand_per_country_today", color = "0.65 0.6 0.85", style="rounded"]; + 69[label = "build_industrial_production_per_country", color = "0.11 0.6 0.85", style="rounded"]; + 70[label = "build_industrial_production_per_node", color = "0.07 0.6 0.85", style="rounded"]; + 71[label = "build_industrial_distribution_key", color = "0.48 0.6 0.85", style="rounded"]; + 72[label = "retrieve_hotmaps_industrial_sites", color = "0.20 0.6 0.85", style="rounded"]; + 73[label = "retrieve_gem_steel_plant_tracker", color = "0.10 0.6 0.85", style="rounded"]; + 74[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2030", color = "0.34 0.6 0.85", style="rounded"]; + 75[label = "build_industrial_energy_demand_per_node_today", color = "0.28 0.6 0.85", style="rounded"]; + 76[label = "build_district_heat_share\nplanning_horizons: 2030", color = "0.57 0.6 0.85", style="rounded"]; + 77[label = "build_cop_profiles", color = "0.02 0.6 0.85", style="rounded"]; + 78[label = "build_central_heating_temperature_profiles", color = "0.15 0.6 0.85", style="rounded"]; + 79[label = "plot_power_network_clustered", color = "0.43 0.6 0.85", style="rounded"]; + 80[label = "plot_power_network", color = "0.05 0.6 0.85", style="rounded"]; + 81[label = "plot_hydrogen_network", color = "0.52 0.6 0.85", style="rounded"]; + 82[label = "plot_gas_network", color = "0.46 0.6 0.85", style="rounded"]; 1 -> 0 2 -> 1 - 42 -> 1 - 11 -> 1 + 49 -> 1 + 7 -> 1 3 -> 2 - 27 -> 2 - 70 -> 2 - 71 -> 2 - 72 -> 2 - 73 -> 2 + 42 -> 2 + 79 -> 2 + 80 -> 2 + 81 -> 2 + 82 -> 2 4 -> 3 5 -> 4 - 15 -> 4 - 16 -> 4 - 17 -> 4 - 32 -> 4 + 24 -> 4 + 26 -> 4 + 28 -> 4 + 31 -> 4 + 33 -> 4 34 -> 4 - 35 -> 4 - 42 -> 4 - 43 -> 4 - 48 -> 4 + 49 -> 4 50 -> 4 - 51 -> 4 - 44 -> 4 - 11 -> 4 - 53 -> 4 - 27 -> 4 - 54 -> 4 - 21 -> 4 - 20 -> 4 - 47 -> 4 55 -> 4 - 56 -> 4 - 37 -> 4 - 67 -> 4 - 52 -> 4 - 68 -> 4 - 41 -> 4 + 57 -> 4 + 58 -> 4 + 51 -> 4 + 7 -> 4 + 60 -> 4 + 42 -> 4 + 62 -> 4 + 15 -> 4 + 14 -> 4 + 54 -> 4 + 63 -> 4 + 44 -> 4 + 70 -> 4 + 76 -> 4 + 59 -> 4 + 77 -> 4 + 48 -> 4 6 -> 5 11 -> 5 - 12 -> 5 - 8 -> 5 14 -> 5 + 10 -> 5 7 -> 6 8 -> 6 + 11 -> 6 + 14 -> 6 + 10 -> 6 9 -> 8 10 -> 8 - 11 -> 8 - 13 -> 12 - 14 -> 12 - 6 -> 15 - 11 -> 15 - 12 -> 15 - 8 -> 15 - 14 -> 15 - 6 -> 16 - 11 -> 16 - 12 -> 16 - 8 -> 16 - 14 -> 16 + 12 -> 11 + 13 -> 11 + 7 -> 11 + 15 -> 14 + 20 -> 14 + 16 -> 15 + 17 -> 15 + 17 -> 16 + 19 -> 16 18 -> 17 - 20 -> 17 - 19 -> 18 + 11 -> 17 + 17 -> 19 + 11 -> 19 + 15 -> 20 + 11 -> 20 21 -> 20 - 27 -> 20 22 -> 21 - 27 -> 21 - 6 -> 21 - 23 -> 22 - 24 -> 22 - 25 -> 22 - 5 -> 22 - 15 -> 22 - 16 -> 22 - 6 -> 22 - 26 -> 22 - 27 -> 22 - 28 -> 22 - 29 -> 22 - 8 -> 22 - 6 -> 23 - 11 -> 23 - 8 -> 23 - 14 -> 23 - 6 -> 24 + 23 -> 21 + 25 -> 24 11 -> 24 - 8 -> 24 14 -> 24 - 6 -> 25 - 11 -> 25 + 10 -> 24 + 7 -> 25 8 -> 25 + 11 -> 25 14 -> 25 - 6 -> 26 - 8 -> 26 - 6 -> 28 + 10 -> 25 + 27 -> 26 + 11 -> 26 + 14 -> 26 + 10 -> 26 + 7 -> 27 + 8 -> 27 + 11 -> 27 + 14 -> 27 + 10 -> 27 + 29 -> 28 + 14 -> 28 30 -> 29 - 31 -> 29 - 33 -> 32 - 19 -> 32 - 20 -> 32 + 32 -> 31 + 30 -> 31 + 14 -> 31 + 34 -> 33 + 44 -> 33 + 48 -> 33 35 -> 34 - 37 -> 34 - 41 -> 34 + 42 -> 34 36 -> 35 - 27 -> 35 - 20 -> 36 - 27 -> 36 - 38 -> 37 + 38 -> 35 + 40 -> 35 + 5 -> 35 + 24 -> 35 + 26 -> 35 + 14 -> 35 + 42 -> 35 + 43 -> 35 + 20 -> 35 + 37 -> 36 + 11 -> 36 + 14 -> 36 + 10 -> 36 + 7 -> 37 + 11 -> 37 + 14 -> 37 + 10 -> 37 39 -> 38 - 20 -> 38 + 11 -> 38 14 -> 38 - 8 -> 39 - 40 -> 39 + 10 -> 38 + 7 -> 39 + 11 -> 39 14 -> 39 - 39 -> 41 - 20 -> 41 + 10 -> 39 + 41 -> 40 + 11 -> 40 + 14 -> 40 + 10 -> 40 + 7 -> 41 + 11 -> 41 14 -> 41 - 44 -> 43 - 47 -> 43 - 8 -> 44 - 11 -> 44 + 10 -> 41 + 14 -> 43 45 -> 44 - 42 -> 44 - 46 -> 44 - 39 -> 47 - 20 -> 47 - 14 -> 47 - 49 -> 48 - 47 -> 48 - 44 -> 49 - 8 -> 50 - 20 -> 50 - 44 -> 50 - 47 -> 51 - 43 -> 51 - 44 -> 51 + 46 -> 45 + 14 -> 45 + 10 -> 45 + 11 -> 46 + 47 -> 46 + 10 -> 46 + 46 -> 48 + 14 -> 48 + 10 -> 48 + 51 -> 50 + 54 -> 50 11 -> 51 + 7 -> 51 52 -> 51 - 39 -> 52 - 20 -> 52 - 14 -> 52 - 42 -> 53 - 11 -> 53 - 20 -> 53 - 8 -> 53 - 11 -> 54 - 20 -> 54 - 39 -> 55 - 21 -> 55 - 14 -> 55 - 57 -> 56 - 62 -> 56 - 66 -> 56 - 58 -> 57 - 60 -> 57 - 61 -> 57 + 49 -> 51 + 53 -> 51 + 46 -> 54 + 14 -> 54 + 10 -> 54 + 56 -> 55 + 54 -> 55 + 51 -> 56 + 11 -> 57 + 14 -> 57 + 51 -> 57 + 54 -> 58 + 50 -> 58 + 51 -> 58 + 7 -> 58 59 -> 58 - 45 -> 58 - 44 -> 60 - 45 -> 60 + 46 -> 59 + 14 -> 59 + 10 -> 59 61 -> 60 - 59 -> 61 - 45 -> 61 - 42 -> 61 - 63 -> 62 - 65 -> 62 - 20 -> 63 - 47 -> 63 + 49 -> 60 + 7 -> 60 + 14 -> 60 + 11 -> 60 + 7 -> 62 + 14 -> 62 64 -> 63 - 61 -> 65 - 63 -> 66 - 60 -> 66 - 44 -> 67 - 47 -> 67 - 69 -> 68 + 70 -> 63 + 75 -> 63 + 65 -> 64 + 68 -> 64 + 69 -> 64 + 66 -> 65 + 52 -> 65 + 67 -> 66 + 51 -> 68 52 -> 68 - 20 -> 68 + 69 -> 68 + 66 -> 69 52 -> 69 - 20 -> 69 - 20 -> 70 - 3 -> 71 - 20 -> 71 - 3 -> 72 - 20 -> 72 - 3 -> 73 - 20 -> 73 + 49 -> 69 + 71 -> 70 + 74 -> 70 + 14 -> 71 + 54 -> 71 + 72 -> 71 + 73 -> 71 + 69 -> 74 + 71 -> 75 + 68 -> 75 + 51 -> 76 + 54 -> 76 + 78 -> 77 + 59 -> 77 + 14 -> 77 + 59 -> 78 + 14 -> 78 + 14 -> 79 + 3 -> 80 + 14 -> 80 + 3 -> 81 + 14 -> 81 + 3 -> 82 + 14 -> 82 } | @@ -474,430 +511,462 @@ workflow: graph[bgcolor=white, margin=0]; node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=2]; edge[penwidth=2, color=grey]; - 0[label = "all", color = "0.65 0.6 0.85", style="rounded"]; + 0[label = "all", color = "0.58 0.6 0.85", style="rounded"]; 1[label = "plot_summary", color = "0.14 0.6 0.85", style="rounded"]; - 2[label = "make_summary", color = "0.38 0.6 0.85", style="rounded"]; - 3[label = "solve_sector_network_myopic", color = "0.19 0.6 0.85", style="rounded"]; - 4[label = "add_existing_baseyear", color = "0.32 0.6 0.85", style="rounded"]; - 5[label = "prepare_sector_network\nsector_opts: ", color = "0.36 0.6 0.85", style="rounded"]; - 6[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.57 0.6 0.85", style="rounded"]; - 7[label = "base_network", color = "0.24 0.6 0.85", style="rounded"]; - 8[label = "build_shapes", color = "0.51 0.6 0.85", style="rounded"]; - 9[label = "retrieve_databundle", color = "0.31 0.6 0.85", style="rounded"]; - 10[label = "build_ship_raster", color = "0.23 0.6 0.85", style="rounded"]; - 11[label = "retrieve_ship_raster", color = "0.58 0.6 0.85", style="rounded"]; - 12[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.21 0.6 0.85", style="rounded"]; - 13[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.57 0.6 0.85", style="rounded"]; - 14[label = "build_renewable_profiles\ntechnology: offwind-float", color = "0.57 0.6 0.85", style="rounded"]; - 15[label = "cluster_gas_network", color = "0.06 0.6 0.85", style="rounded"]; - 16[label = "build_gas_network", color = "0.29 0.6 0.85", style="rounded"]; - 17[label = "retrieve_gas_infrastructure_data", color = "0.18 0.6 0.85", style="rounded"]; - 18[label = "cluster_network\nclusters: 5", color = "0.59 0.6 0.85", style="rounded"]; - 19[label = "simplify_network\nsimpl: ", color = "0.41 0.6 0.85", style="rounded"]; - 20[label = "add_electricity", color = "0.25 0.6 0.85", style="rounded"]; - 21[label = "build_renewable_profiles\ntechnology: solar", color = "0.57 0.6 0.85", style="rounded"]; - 22[label = "build_renewable_profiles\ntechnology: solar-hsat", color = "0.57 0.6 0.85", style="rounded"]; - 23[label = "build_renewable_profiles\ntechnology: onwind", color = "0.57 0.6 0.85", style="rounded"]; - 24[label = "retrieve_cost_data\nyear: 2030", color = "0.41 0.6 0.85", style="rounded"]; - 25[label = "build_powerplants", color = "0.36 0.6 0.85", style="rounded"]; - 26[label = "build_electricity_demand", color = "0.12 0.6 0.85", style="rounded"]; - 27[label = "retrieve_electricity_demand", color = "0.23 0.6 0.85", style="rounded"]; - 28[label = "retrieve_synthetic_electricity_demand", color = "0.35 0.6 0.85", style="rounded"]; - 29[label = "build_gas_input_locations", color = "0.10 0.6 0.85", style="rounded"]; - 30[label = "time_aggregation", color = "0.60 0.6 0.85", style="rounded"]; - 31[label = "prepare_network\nll: v1.5\nopts: ", color = "0.37 0.6 0.85", style="rounded"]; - 32[label = "add_extra_components", color = "0.10 0.6 0.85", style="rounded"]; - 33[label = "build_hourly_heat_demand", color = "0.11 0.6 0.85", style="rounded"]; - 34[label = "build_daily_heat_demand\nscope: total", color = "0.39 0.6 0.85", style="rounded"]; - 35[label = "build_population_layouts", color = "0.40 0.6 0.85", style="rounded"]; - 36[label = "build_solar_thermal_profiles\nscope: total", color = "0.20 0.6 0.85", style="rounded"]; - 37[label = "retrieve_eurostat_data", color = "0.45 0.6 0.85", style="rounded"]; - 38[label = "build_population_weighted_energy_totals\nkind: energy", color = "0.60 0.6 0.85", style="rounded"]; - 39[label = "build_energy_totals", color = "0.48 0.6 0.85", style="rounded"]; - 40[label = "retrieve_eurostat_household_data", color = "0.08 0.6 0.85", style="rounded"]; - 41[label = "build_clustered_population_layouts", color = "0.07 0.6 0.85", style="rounded"]; - 42[label = "build_population_weighted_energy_totals\nkind: heat", color = "0.60 0.6 0.85", style="rounded"]; - 43[label = "build_heat_totals", color = "0.52 0.6 0.85", style="rounded"]; - 44[label = "build_shipping_demand", color = "0.50 0.6 0.85", style="rounded"]; - 45[label = "build_transport_demand", color = "0.49 0.6 0.85", style="rounded"]; - 46[label = "build_temperature_profiles\nscope: total", color = "0.63 0.6 0.85", style="rounded"]; - 47[label = "build_biomass_potentials\nplanning_horizons: 2030", color = "0.56 0.6 0.85", style="rounded"]; - 48[label = "build_salt_cavern_potentials", color = "0.43 0.6 0.85", style="rounded"]; - 49[label = "build_simplified_population_layouts", color = "0.58 0.6 0.85", style="rounded"]; - 50[label = "build_industrial_energy_demand_per_node", color = "0.27 0.6 0.85", style="rounded"]; - 51[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2030", color = "0.26 0.6 0.85", style="rounded"]; - 52[label = "build_industry_sector_ratios", color = "0.46 0.6 0.85", style="rounded"]; - 53[label = "build_ammonia_production", color = "0.17 0.6 0.85", style="rounded"]; - 54[label = "build_industrial_energy_demand_per_country_today", color = "0.02 0.6 0.85", style="rounded"]; - 55[label = "build_industrial_production_per_country", color = "0.30 0.6 0.85", style="rounded"]; - 56[label = "build_industrial_production_per_node", color = "0.30 0.6 0.85", style="rounded"]; - 57[label = "build_industrial_distribution_key", color = "0.05 0.6 0.85", style="rounded"]; - 58[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2030", color = "0.01 0.6 0.85", style="rounded"]; - 59[label = "build_industrial_energy_demand_per_node_today", color = "0.14 0.6 0.85", style="rounded"]; - 60[label = "build_district_heat_share\nplanning_horizons: 2030", color = "0.56 0.6 0.85", style="rounded"]; - 61[label = "build_temperature_profiles\nscope: rural", color = "0.63 0.6 0.85", style="rounded"]; - 62[label = "build_temperature_profiles\nscope: urban", color = "0.63 0.6 0.85", style="rounded"]; - 63[label = "build_cop_profiles", color = "0.64 0.6 0.85", style="rounded"]; - 64[label = "build_solar_thermal_profiles\nscope: urban", color = "0.20 0.6 0.85", style="rounded"]; - 65[label = "build_solar_thermal_profiles\nscope: rural", color = "0.20 0.6 0.85", style="rounded"]; - 66[label = "build_existing_heating_distribution", color = "0.21 0.6 0.85", style="rounded"]; - 67[label = "solve_sector_network_myopic", color = "0.19 0.6 0.85", style="rounded"]; - 68[label = "add_brownfield", color = "0.27 0.6 0.85", style="rounded"]; - 69[label = "prepare_sector_network\nsector_opts: ", color = "0.36 0.6 0.85", style="rounded"]; - 70[label = "build_biomass_potentials\nplanning_horizons: 2040", color = "0.56 0.6 0.85", style="rounded"]; - 71[label = "retrieve_cost_data\nyear: 2040", color = "0.41 0.6 0.85", style="rounded"]; - 72[label = "build_industrial_energy_demand_per_node", color = "0.27 0.6 0.85", style="rounded"]; - 73[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2040", color = "0.26 0.6 0.85", style="rounded"]; - 74[label = "build_industrial_production_per_node", color = "0.30 0.6 0.85", style="rounded"]; - 75[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2040", color = "0.01 0.6 0.85", style="rounded"]; - 76[label = "build_district_heat_share\nplanning_horizons: 2040", color = "0.56 0.6 0.85", style="rounded"]; - 77[label = "solve_sector_network_myopic", color = "0.19 0.6 0.85", style="rounded"]; - 78[label = "add_brownfield", color = "0.27 0.6 0.85", style="rounded"]; - 79[label = "prepare_sector_network\nsector_opts: ", color = "0.36 0.6 0.85", style="rounded"]; - 80[label = "build_biomass_potentials\nplanning_horizons: 2050", color = "0.56 0.6 0.85", style="rounded"]; - 81[label = "retrieve_cost_data\nyear: 2050", color = "0.41 0.6 0.85", style="rounded"]; - 82[label = "build_industrial_energy_demand_per_node", color = "0.27 0.6 0.85", style="rounded"]; - 83[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2050", color = "0.26 0.6 0.85", style="rounded"]; - 84[label = "build_industrial_production_per_node", color = "0.30 0.6 0.85", style="rounded"]; - 85[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2050", color = "0.01 0.6 0.85", style="rounded"]; - 86[label = "build_district_heat_share\nplanning_horizons: 2050", color = "0.56 0.6 0.85", style="rounded"]; - 87[label = "plot_power_network_clustered", color = "0.03 0.6 0.85", style="rounded"]; - 88[label = "plot_power_network", color = "0.16 0.6 0.85", style="rounded"]; - 89[label = "plot_power_network", color = "0.16 0.6 0.85", style="rounded"]; - 90[label = "plot_power_network", color = "0.16 0.6 0.85", style="rounded"]; - 91[label = "plot_hydrogen_network", color = "0.54 0.6 0.85", style="rounded"]; - 92[label = "plot_hydrogen_network", color = "0.54 0.6 0.85", style="rounded"]; - 93[label = "plot_hydrogen_network", color = "0.54 0.6 0.85", style="rounded"]; + 2[label = "make_summary", color = "0.16 0.6 0.85", style="rounded"]; + 3[label = "solve_sector_network_myopic", color = "0.04 0.6 0.85", style="rounded"]; + 4[label = "add_existing_baseyear", color = "0.29 0.6 0.85", style="rounded"]; + 5[label = "prepare_sector_network\nsector_opts: ", color = "0.01 0.6 0.85", style="rounded"]; + 6[label = "build_renewable_profiles", color = "0.29 0.6 0.85", style="rounded"]; + 7[label = "determine_availability_matrix\ntechnology: offwind-ac", color = "0.48 0.6 0.85", style="rounded"]; + 8[label = "retrieve_databundle", color = "0.25 0.6 0.85", style="rounded"]; + 9[label = "build_ship_raster", color = "0.35 0.6 0.85", style="rounded"]; + 10[label = "retrieve_ship_raster", color = "0.36 0.6 0.85", style="rounded"]; + 11[label = "retrieve_cutout\ncutout: be-03-2013-era5", color = "0.37 0.6 0.85", style="rounded"]; + 12[label = "build_shapes", color = "0.64 0.6 0.85", style="rounded"]; + 13[label = "retrieve_naturalearth_countries", color = "0.39 0.6 0.85", style="rounded"]; + 14[label = "retrieve_eez", color = "0.43 0.6 0.85", style="rounded"]; + 15[label = "cluster_network\nclusters: 5", color = "0.36 0.6 0.85", style="rounded"]; + 16[label = "simplify_network", color = "0.13 0.6 0.85", style="rounded"]; + 17[label = "add_transmission_projects_and_dlr", color = "0.05 0.6 0.85", style="rounded"]; + 18[label = "base_network", color = "0.34 0.6 0.85", style="rounded"]; + 19[label = "retrieve_osm_prebuilt", color = "0.39 0.6 0.85", style="rounded"]; + 20[label = "build_transmission_projects", color = "0.17 0.6 0.85", style="rounded"]; + 21[label = "build_electricity_demand_base", color = "0.41 0.6 0.85", style="rounded"]; + 22[label = "build_electricity_demand", color = "0.26 0.6 0.85", style="rounded"]; + 23[label = "retrieve_electricity_demand", color = "0.32 0.6 0.85", style="rounded"]; + 24[label = "retrieve_synthetic_electricity_demand", color = "0.60 0.6 0.85", style="rounded"]; + 25[label = "build_renewable_profiles", color = "0.29 0.6 0.85", style="rounded"]; + 26[label = "determine_availability_matrix\ntechnology: offwind-dc", color = "0.48 0.6 0.85", style="rounded"]; + 27[label = "build_renewable_profiles", color = "0.29 0.6 0.85", style="rounded"]; + 28[label = "determine_availability_matrix\ntechnology: offwind-float", color = "0.48 0.6 0.85", style="rounded"]; + 29[label = "cluster_gas_network", color = "0.50 0.6 0.85", style="rounded"]; + 30[label = "build_gas_network", color = "0.12 0.6 0.85", style="rounded"]; + 31[label = "retrieve_gas_infrastructure_data", color = "0.09 0.6 0.85", style="rounded"]; + 32[label = "build_gas_input_locations", color = "0.06 0.6 0.85", style="rounded"]; + 33[label = "retrieve_gem_europe_gas_tracker", color = "0.11 0.6 0.85", style="rounded"]; + 34[label = "time_aggregation", color = "0.64 0.6 0.85", style="rounded"]; + 35[label = "prepare_network\nll: v1.5\nopts: ", color = "0.25 0.6 0.85", style="rounded"]; + 36[label = "add_electricity", color = "0.30 0.6 0.85", style="rounded"]; + 37[label = "build_renewable_profiles", color = "0.29 0.6 0.85", style="rounded"]; + 38[label = "determine_availability_matrix\ntechnology: solar", color = "0.48 0.6 0.85", style="rounded"]; + 39[label = "build_renewable_profiles", color = "0.29 0.6 0.85", style="rounded"]; + 40[label = "determine_availability_matrix\ntechnology: solar-hsat", color = "0.48 0.6 0.85", style="rounded"]; + 41[label = "build_renewable_profiles", color = "0.29 0.6 0.85", style="rounded"]; + 42[label = "determine_availability_matrix\ntechnology: onwind", color = "0.48 0.6 0.85", style="rounded"]; + 43[label = "retrieve_cost_data\nyear: 2030", color = "0.61 0.6 0.85", style="rounded"]; + 44[label = "build_powerplants", color = "0.51 0.6 0.85", style="rounded"]; + 45[label = "build_hourly_heat_demand", color = "0.07 0.6 0.85", style="rounded"]; + 46[label = "build_daily_heat_demand", color = "0.12 0.6 0.85", style="rounded"]; + 47[label = "build_population_layouts", color = "0.40 0.6 0.85", style="rounded"]; + 48[label = "retrieve_worldbank_urban_population", color = "0.65 0.6 0.85", style="rounded"]; + 49[label = "build_solar_thermal_profiles", color = "0.40 0.6 0.85", style="rounded"]; + 50[label = "retrieve_eurostat_data", color = "0.45 0.6 0.85", style="rounded"]; + 51[label = "build_population_weighted_energy_totals\nkind: energy", color = "0.02 0.6 0.85", style="rounded"]; + 52[label = "build_energy_totals", color = "0.23 0.6 0.85", style="rounded"]; + 53[label = "retrieve_jrc_idees", color = "0.35 0.6 0.85", style="rounded"]; + 54[label = "retrieve_eurostat_household_data", color = "0.19 0.6 0.85", style="rounded"]; + 55[label = "build_clustered_population_layouts", color = "0.24 0.6 0.85", style="rounded"]; + 56[label = "build_population_weighted_energy_totals\nkind: heat", color = "0.02 0.6 0.85", style="rounded"]; + 57[label = "build_heat_totals", color = "0.66 0.6 0.85", style="rounded"]; + 58[label = "build_shipping_demand", color = "0.59 0.6 0.85", style="rounded"]; + 59[label = "build_transport_demand", color = "0.19 0.6 0.85", style="rounded"]; + 60[label = "build_temperature_profiles", color = "0.27 0.6 0.85", style="rounded"]; + 61[label = "build_biomass_potentials\nplanning_horizons: 2030", color = "0.08 0.6 0.85", style="rounded"]; + 62[label = "retrieve_jrc_enspreso_biomass", color = "0.18 0.6 0.85", style="rounded"]; + 63[label = "build_salt_cavern_potentials", color = "0.57 0.6 0.85", style="rounded"]; + 64[label = "build_industrial_energy_demand_per_node", color = "0.13 0.6 0.85", style="rounded"]; + 65[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2030", color = "0.05 0.6 0.85", style="rounded"]; + 66[label = "build_industry_sector_ratios", color = "0.28 0.6 0.85", style="rounded"]; + 67[label = "build_ammonia_production", color = "0.22 0.6 0.85", style="rounded"]; + 68[label = "retrieve_usgs_ammonia_production", color = "0.49 0.6 0.85", style="rounded"]; + 69[label = "build_industrial_energy_demand_per_country_today", color = "0.20 0.6 0.85", style="rounded"]; + 70[label = "build_industrial_production_per_country", color = "0.18 0.6 0.85", style="rounded"]; + 71[label = "build_industrial_production_per_node", color = "0.32 0.6 0.85", style="rounded"]; + 72[label = "build_industrial_distribution_key", color = "0.55 0.6 0.85", style="rounded"]; + 73[label = "retrieve_hotmaps_industrial_sites", color = "0.16 0.6 0.85", style="rounded"]; + 74[label = "retrieve_gem_steel_plant_tracker", color = "0.47 0.6 0.85", style="rounded"]; + 75[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2030", color = "0.21 0.6 0.85", style="rounded"]; + 76[label = "build_industrial_energy_demand_per_node_today", color = "0.00 0.6 0.85", style="rounded"]; + 77[label = "build_district_heat_share\nplanning_horizons: 2030", color = "0.08 0.6 0.85", style="rounded"]; + 78[label = "build_cop_profiles", color = "0.44 0.6 0.85", style="rounded"]; + 79[label = "build_central_heating_temperature_profiles", color = "0.42 0.6 0.85", style="rounded"]; + 80[label = "build_existing_heating_distribution", color = "0.42 0.6 0.85", style="rounded"]; + 81[label = "solve_sector_network_myopic", color = "0.04 0.6 0.85", style="rounded"]; + 82[label = "add_brownfield", color = "0.37 0.6 0.85", style="rounded"]; + 83[label = "prepare_sector_network\nsector_opts: ", color = "0.01 0.6 0.85", style="rounded"]; + 84[label = "build_biomass_potentials\nplanning_horizons: 2040", color = "0.08 0.6 0.85", style="rounded"]; + 85[label = "retrieve_cost_data\nyear: 2040", color = "0.61 0.6 0.85", style="rounded"]; + 86[label = "build_industrial_energy_demand_per_node", color = "0.13 0.6 0.85", style="rounded"]; + 87[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2040", color = "0.05 0.6 0.85", style="rounded"]; + 88[label = "build_industrial_production_per_node", color = "0.32 0.6 0.85", style="rounded"]; + 89[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2040", color = "0.21 0.6 0.85", style="rounded"]; + 90[label = "build_district_heat_share\nplanning_horizons: 2040", color = "0.08 0.6 0.85", style="rounded"]; + 91[label = "solve_sector_network_myopic", color = "0.04 0.6 0.85", style="rounded"]; + 92[label = "add_brownfield", color = "0.37 0.6 0.85", style="rounded"]; + 93[label = "prepare_sector_network\nsector_opts: ", color = "0.01 0.6 0.85", style="rounded"]; + 94[label = "build_biomass_potentials\nplanning_horizons: 2050", color = "0.08 0.6 0.85", style="rounded"]; + 95[label = "retrieve_cost_data\nyear: 2050", color = "0.61 0.6 0.85", style="rounded"]; + 96[label = "build_industrial_energy_demand_per_node", color = "0.13 0.6 0.85", style="rounded"]; + 97[label = "build_industry_sector_ratios_intermediate\nplanning_horizons: 2050", color = "0.05 0.6 0.85", style="rounded"]; + 98[label = "build_industrial_production_per_node", color = "0.32 0.6 0.85", style="rounded"]; + 99[label = "build_industrial_production_per_country_tomorrow\nplanning_horizons: 2050", color = "0.21 0.6 0.85", style="rounded"]; + 100[label = "build_district_heat_share\nplanning_horizons: 2050", color = "0.08 0.6 0.85", style="rounded"]; + 101[label = "plot_power_network_clustered", color = "0.27 0.6 0.85", style="rounded"]; + 102[label = "plot_power_network", color = "0.54 0.6 0.85", style="rounded"]; + 103[label = "plot_power_network", color = "0.54 0.6 0.85", style="rounded"]; + 104[label = "plot_power_network", color = "0.54 0.6 0.85", style="rounded"]; + 105[label = "plot_hydrogen_network", color = "0.02 0.6 0.85", style="rounded"]; + 106[label = "plot_hydrogen_network", color = "0.02 0.6 0.85", style="rounded"]; + 107[label = "plot_hydrogen_network", color = "0.02 0.6 0.85", style="rounded"]; 1 -> 0 2 -> 1 - 37 -> 1 - 9 -> 1 + 50 -> 1 + 8 -> 1 3 -> 2 - 67 -> 2 - 77 -> 2 - 24 -> 2 - 87 -> 2 - 88 -> 2 - 89 -> 2 - 90 -> 2 + 81 -> 2 91 -> 2 - 92 -> 2 - 93 -> 2 + 43 -> 2 + 101 -> 2 + 102 -> 2 + 103 -> 2 + 104 -> 2 + 105 -> 2 + 106 -> 2 + 107 -> 2 4 -> 3 - 24 -> 3 + 43 -> 3 5 -> 4 - 25 -> 4 - 19 -> 4 - 18 -> 4 - 41 -> 4 - 24 -> 4 - 63 -> 4 - 66 -> 4 + 44 -> 4 + 16 -> 4 + 15 -> 4 + 55 -> 4 + 43 -> 4 + 78 -> 4 + 80 -> 4 + 52 -> 4 6 -> 5 - 13 -> 5 - 14 -> 5 - 15 -> 5 + 25 -> 5 + 27 -> 5 29 -> 5 - 30 -> 5 - 31 -> 5 - 37 -> 5 - 38 -> 5 - 42 -> 5 - 44 -> 5 - 45 -> 5 - 39 -> 5 - 9 -> 5 - 47 -> 5 - 24 -> 5 - 48 -> 5 - 19 -> 5 - 18 -> 5 - 41 -> 5 - 49 -> 5 + 32 -> 5 + 34 -> 5 + 35 -> 5 50 -> 5 - 33 -> 5 - 60 -> 5 - 46 -> 5 + 51 -> 5 + 56 -> 5 + 58 -> 5 + 59 -> 5 + 52 -> 5 + 8 -> 5 61 -> 5 - 62 -> 5 + 43 -> 5 63 -> 5 - 36 -> 5 + 16 -> 5 + 15 -> 5 + 55 -> 5 64 -> 5 - 65 -> 5 + 45 -> 5 + 71 -> 5 + 77 -> 5 + 60 -> 5 + 78 -> 5 + 49 -> 5 7 -> 6 - 9 -> 6 - 10 -> 6 - 8 -> 6 12 -> 6 + 15 -> 6 + 11 -> 6 8 -> 7 - 9 -> 8 - 11 -> 10 - 12 -> 10 - 7 -> 13 - 9 -> 13 - 10 -> 13 - 8 -> 13 - 12 -> 13 - 7 -> 14 - 9 -> 14 - 10 -> 14 - 8 -> 14 - 12 -> 14 + 9 -> 7 + 12 -> 7 + 15 -> 7 + 11 -> 7 + 10 -> 9 + 11 -> 9 + 13 -> 12 + 14 -> 12 + 8 -> 12 16 -> 15 - 18 -> 15 + 21 -> 15 17 -> 16 + 18 -> 16 + 18 -> 17 + 20 -> 17 19 -> 18 - 24 -> 18 - 20 -> 19 - 24 -> 19 - 7 -> 19 - 21 -> 20 - 22 -> 20 - 23 -> 20 - 6 -> 20 - 13 -> 20 - 14 -> 20 - 7 -> 20 - 24 -> 20 - 25 -> 20 - 26 -> 20 - 8 -> 20 - 7 -> 21 - 9 -> 21 - 8 -> 21 + 12 -> 18 + 18 -> 20 + 12 -> 20 + 16 -> 21 12 -> 21 - 7 -> 22 - 9 -> 22 - 8 -> 22 - 12 -> 22 - 7 -> 23 - 9 -> 23 - 8 -> 23 - 12 -> 23 - 7 -> 25 - 27 -> 26 - 28 -> 26 - 17 -> 29 - 18 -> 29 + 22 -> 21 + 23 -> 22 + 24 -> 22 + 26 -> 25 + 12 -> 25 + 15 -> 25 + 11 -> 25 + 8 -> 26 + 9 -> 26 + 12 -> 26 + 15 -> 26 + 11 -> 26 + 28 -> 27 + 12 -> 27 + 15 -> 27 + 11 -> 27 + 8 -> 28 + 9 -> 28 + 12 -> 28 + 15 -> 28 + 11 -> 28 + 30 -> 29 + 15 -> 29 31 -> 30 - 33 -> 30 - 36 -> 30 - 32 -> 31 - 24 -> 31 - 18 -> 32 - 24 -> 32 - 34 -> 33 + 33 -> 32 + 31 -> 32 + 15 -> 32 35 -> 34 - 18 -> 34 - 12 -> 34 - 8 -> 35 - 12 -> 35 - 35 -> 36 - 18 -> 36 - 12 -> 36 - 39 -> 38 - 41 -> 38 - 8 -> 39 - 9 -> 39 - 37 -> 39 + 45 -> 34 + 49 -> 34 + 36 -> 35 + 43 -> 35 + 37 -> 36 + 39 -> 36 + 41 -> 36 + 6 -> 36 + 25 -> 36 + 27 -> 36 + 15 -> 36 + 43 -> 36 + 44 -> 36 + 21 -> 36 + 38 -> 37 + 12 -> 37 + 15 -> 37 + 11 -> 37 + 8 -> 38 + 12 -> 38 + 15 -> 38 + 11 -> 38 40 -> 39 - 35 -> 41 - 18 -> 41 + 12 -> 39 + 15 -> 39 + 11 -> 39 + 8 -> 40 + 12 -> 40 + 15 -> 40 + 11 -> 40 + 42 -> 41 12 -> 41 - 43 -> 42 - 41 -> 42 - 39 -> 43 - 8 -> 44 - 18 -> 44 - 39 -> 44 - 41 -> 45 - 38 -> 45 - 39 -> 45 - 9 -> 45 + 15 -> 41 + 11 -> 41 + 8 -> 42 + 12 -> 42 + 15 -> 42 + 11 -> 42 + 15 -> 44 46 -> 45 - 35 -> 46 - 18 -> 46 - 12 -> 46 - 9 -> 47 - 18 -> 47 - 8 -> 47 - 9 -> 48 - 18 -> 48 - 35 -> 49 - 19 -> 49 - 12 -> 49 - 51 -> 50 - 56 -> 50 - 59 -> 50 + 47 -> 46 + 15 -> 46 + 11 -> 46 + 12 -> 47 + 48 -> 47 + 11 -> 47 + 47 -> 49 + 15 -> 49 + 11 -> 49 52 -> 51 - 54 -> 51 55 -> 51 + 12 -> 52 + 8 -> 52 53 -> 52 - 9 -> 52 - 9 -> 53 - 9 -> 54 - 55 -> 54 - 53 -> 55 - 9 -> 55 - 37 -> 55 + 50 -> 52 + 54 -> 52 + 47 -> 55 + 15 -> 55 + 11 -> 55 57 -> 56 - 58 -> 56 - 18 -> 57 - 41 -> 57 - 55 -> 58 - 57 -> 59 - 54 -> 59 - 39 -> 60 - 41 -> 60 - 35 -> 61 - 18 -> 61 + 55 -> 56 + 52 -> 57 + 12 -> 58 + 15 -> 58 + 52 -> 58 + 55 -> 59 + 51 -> 59 + 52 -> 59 + 8 -> 59 + 60 -> 59 + 47 -> 60 + 15 -> 60 + 11 -> 60 + 62 -> 61 + 50 -> 61 + 8 -> 61 + 15 -> 61 12 -> 61 - 35 -> 62 - 18 -> 62 - 12 -> 62 - 46 -> 63 - 61 -> 63 - 62 -> 63 - 35 -> 64 - 18 -> 64 - 12 -> 64 - 35 -> 65 - 18 -> 65 - 12 -> 65 - 41 -> 66 - 38 -> 66 - 60 -> 66 + 8 -> 63 + 15 -> 63 + 65 -> 64 + 71 -> 64 + 76 -> 64 + 66 -> 65 + 69 -> 65 + 70 -> 65 + 67 -> 66 + 53 -> 66 68 -> 67 - 71 -> 67 - 21 -> 68 - 22 -> 68 - 23 -> 68 - 6 -> 68 - 13 -> 68 - 14 -> 68 - 19 -> 68 - 18 -> 68 - 69 -> 68 - 3 -> 68 - 71 -> 68 - 63 -> 68 - 6 -> 69 - 13 -> 69 - 14 -> 69 - 15 -> 69 - 29 -> 69 - 30 -> 69 - 31 -> 69 - 37 -> 69 - 38 -> 69 - 42 -> 69 - 44 -> 69 - 45 -> 69 - 39 -> 69 - 9 -> 69 + 52 -> 69 + 53 -> 69 70 -> 69 - 71 -> 69 - 48 -> 69 - 19 -> 69 - 18 -> 69 - 41 -> 69 - 49 -> 69 - 72 -> 69 - 33 -> 69 - 76 -> 69 - 46 -> 69 - 61 -> 69 - 62 -> 69 - 63 -> 69 - 36 -> 69 - 64 -> 69 - 65 -> 69 - 9 -> 70 - 18 -> 70 - 8 -> 70 + 67 -> 70 + 53 -> 70 + 50 -> 70 + 72 -> 71 + 75 -> 71 + 15 -> 72 + 55 -> 72 73 -> 72 74 -> 72 - 59 -> 72 - 52 -> 73 - 54 -> 73 - 55 -> 73 - 57 -> 74 - 75 -> 74 - 55 -> 75 - 39 -> 76 - 41 -> 76 - 78 -> 77 - 81 -> 77 - 21 -> 78 - 22 -> 78 - 23 -> 78 - 6 -> 78 - 13 -> 78 - 14 -> 78 - 19 -> 78 - 18 -> 78 + 70 -> 75 + 72 -> 76 + 69 -> 76 + 52 -> 77 + 55 -> 77 79 -> 78 - 67 -> 78 - 81 -> 78 - 63 -> 78 - 6 -> 79 - 13 -> 79 - 14 -> 79 + 60 -> 78 + 15 -> 78 + 60 -> 79 15 -> 79 - 29 -> 79 - 30 -> 79 - 31 -> 79 - 37 -> 79 - 38 -> 79 - 42 -> 79 - 44 -> 79 - 45 -> 79 - 39 -> 79 - 9 -> 79 - 80 -> 79 - 81 -> 79 - 48 -> 79 - 19 -> 79 - 18 -> 79 - 41 -> 79 - 49 -> 79 - 82 -> 79 - 33 -> 79 - 86 -> 79 - 46 -> 79 - 61 -> 79 - 62 -> 79 - 63 -> 79 - 36 -> 79 - 64 -> 79 - 65 -> 79 - 9 -> 80 - 18 -> 80 - 8 -> 80 + 55 -> 80 + 51 -> 80 + 77 -> 80 + 82 -> 81 + 85 -> 81 + 37 -> 82 + 39 -> 82 + 41 -> 82 + 6 -> 82 + 25 -> 82 + 27 -> 82 + 16 -> 82 + 15 -> 82 83 -> 82 - 84 -> 82 - 59 -> 82 + 3 -> 82 + 85 -> 82 + 78 -> 82 + 6 -> 83 + 25 -> 83 + 27 -> 83 + 29 -> 83 + 32 -> 83 + 34 -> 83 + 35 -> 83 + 50 -> 83 + 51 -> 83 + 56 -> 83 + 58 -> 83 + 59 -> 83 52 -> 83 - 54 -> 83 + 8 -> 83 + 84 -> 83 + 85 -> 83 + 63 -> 83 + 16 -> 83 + 15 -> 83 55 -> 83 - 57 -> 84 - 85 -> 84 - 55 -> 85 - 39 -> 86 - 41 -> 86 - 18 -> 87 - 3 -> 88 - 18 -> 88 - 67 -> 89 - 18 -> 89 - 77 -> 90 - 18 -> 90 - 3 -> 91 - 18 -> 91 - 67 -> 92 - 18 -> 92 - 77 -> 93 - 18 -> 93 + 86 -> 83 + 45 -> 83 + 88 -> 83 + 90 -> 83 + 60 -> 83 + 78 -> 83 + 49 -> 83 + 62 -> 84 + 50 -> 84 + 8 -> 84 + 15 -> 84 + 12 -> 84 + 87 -> 86 + 88 -> 86 + 76 -> 86 + 66 -> 87 + 69 -> 87 + 70 -> 87 + 72 -> 88 + 89 -> 88 + 70 -> 89 + 52 -> 90 + 55 -> 90 + 92 -> 91 + 95 -> 91 + 37 -> 92 + 39 -> 92 + 41 -> 92 + 6 -> 92 + 25 -> 92 + 27 -> 92 + 16 -> 92 + 15 -> 92 + 93 -> 92 + 81 -> 92 + 95 -> 92 + 78 -> 92 + 6 -> 93 + 25 -> 93 + 27 -> 93 + 29 -> 93 + 32 -> 93 + 34 -> 93 + 35 -> 93 + 50 -> 93 + 51 -> 93 + 56 -> 93 + 58 -> 93 + 59 -> 93 + 52 -> 93 + 8 -> 93 + 94 -> 93 + 95 -> 93 + 63 -> 93 + 16 -> 93 + 15 -> 93 + 55 -> 93 + 96 -> 93 + 45 -> 93 + 98 -> 93 + 100 -> 93 + 60 -> 93 + 78 -> 93 + 49 -> 93 + 62 -> 94 + 50 -> 94 + 8 -> 94 + 15 -> 94 + 12 -> 94 + 97 -> 96 + 98 -> 96 + 76 -> 96 + 66 -> 97 + 69 -> 97 + 70 -> 97 + 72 -> 98 + 99 -> 98 + 70 -> 99 + 52 -> 100 + 55 -> 100 + 15 -> 101 + 3 -> 102 + 15 -> 102 + 81 -> 103 + 15 -> 103 + 91 -> 104 + 15 -> 104 + 3 -> 105 + 15 -> 105 + 81 -> 106 + 15 -> 106 + 91 -> 107 + 15 -> 107 } | diff --git a/doc/wildcards.rst b/doc/wildcards.rst index 9ddb7b0a..389b35d7 100644 --- a/doc/wildcards.rst +++ b/doc/wildcards.rst @@ -38,15 +38,6 @@ series and potentials using the rule :mod:`build_renewable_profiles`. It can take the values ``onwind``, ``offwind-ac``, ``offwind-dc``, ``offwind-float``, and ``solar`` but **not** ``hydro`` (since hydroelectric plant profiles are created by a different rule)`` -.. _simpl: - -The ``{simpl}`` wildcard -======================== - -The ``{simpl}`` wildcard specifies number of buses a detailed -network model should be pre-clustered to in the rule -:mod:`simplify_network` (before :mod:`cluster_network`). - .. _clusters: The ``{clusters}`` wildcard @@ -57,11 +48,6 @@ network model should be reduced to in the rule :mod:`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. - .. _ll: The ``{ll}`` wildcard diff --git a/rules/build_electricity.smk b/rules/build_electricity.smk index cbe8035a..be97270a 100755 --- a/rules/build_electricity.smk +++ b/rules/build_electricity.smk @@ -35,12 +35,14 @@ rule build_powerplants: everywhere_powerplants=config_provider("electricity", "everywhere_powerplants"), countries=config_provider("countries"), input: - base_network=resources("networks/base.nc"), + network=resources("networks/base_s_{clusters}.nc"), custom_powerplants="data/custom_powerplants.csv", output: - resources("powerplants.csv"), + resources("powerplants_s_{clusters}.csv"), log: - logs("build_powerplants.log"), + logs("build_powerplants_s_{clusters}.log"), + benchmark: + benchmarks("build_powerplants_s_{clusters}") threads: 1 resources: mem_mb=7000, @@ -169,6 +171,8 @@ rule build_ship_raster: rule determine_availability_matrix_MD_UA: + params: + renewable=config_provider("renewable"), input: copernicus="data/Copernicus_LC100_global_v3.0.1_2019-nrt_Discrete-Classification-map_EPSG-4326.tif", wdpa="data/WDPA.gpkg", @@ -186,18 +190,20 @@ rule determine_availability_matrix_MD_UA: country_shapes=resources("country_shapes.geojson"), offshore_shapes=resources("offshore_shapes.geojson"), regions=lambda w: ( - resources("regions_onshore.geojson") + resources("regions_onshore_base_s_{clusters}.geojson") if w.technology in ("onwind", "solar", "solar-hsat") - else resources("regions_offshore.geojson") + else resources("regions_offshore_base_s_{clusters}.geojson") ), cutout=lambda w: "cutouts/" + CDIR + config_provider("renewable", w.technology, "cutout")(w) + ".nc", output: - availability_matrix=resources("availability_matrix_MD-UA_{technology}.nc"), + availability_matrix=resources( + "availability_matrix_MD-UA_{clusters}_{technology}.nc" + ), log: - logs("determine_availability_matrix_MD_UA_{technology}.log"), + logs("determine_availability_matrix_MD_UA_{clusters}_{technology}.log"), threads: config["atlite"].get("nprocesses", 4) resources: mem_mb=config["atlite"].get("nprocesses", 4) * 5000, @@ -213,20 +219,17 @@ def input_ua_md_availability_matrix(w): if {"UA", "MD"}.intersection(countries): return { "availability_matrix_MD_UA": resources( - "availability_matrix_MD-UA_{technology}.nc" + "availability_matrix_MD-UA_{clusters}_{technology}.nc" ) } return {} -rule build_renewable_profiles: +rule determine_availability_matrix: params: - snapshots=config_provider("snapshots"), - drop_leap_day=config_provider("enable", "drop_leap_day"), renewable=config_provider("renewable"), input: unpack(input_ua_md_availability_matrix), - base_network=resources("networks/base.nc"), corine=ancient("data/bundle/corine/g250_clc06_V18_5.tif"), natura=lambda w: ( "data/bundle/natura/natura.tiff" @@ -256,20 +259,48 @@ rule build_renewable_profiles: country_shapes=resources("country_shapes.geojson"), offshore_shapes=resources("offshore_shapes.geojson"), regions=lambda w: ( - resources("regions_onshore.geojson") + resources("regions_onshore_base_s_{clusters}.geojson") if w.technology in ("onwind", "solar", "solar-hsat") - else resources("regions_offshore.geojson") + else resources("regions_offshore_base_s_{clusters}.geojson") ), cutout=lambda w: "cutouts/" + CDIR + config_provider("renewable", w.technology, "cutout")(w) + ".nc", output: - profile=resources("profile_{technology}.nc"), + resources("availability_matrix_{clusters}_{technology}.nc"), log: - logs("build_renewable_profile_{technology}.log"), + logs("determine_availability_matrix_{clusters}_{technology}.log"), benchmark: - benchmarks("build_renewable_profiles_{technology}") + benchmarks("determine_availability_matrix_{clusters}_{technology}") + threads: config["atlite"].get("nprocesses", 4) + resources: + mem_mb=config["atlite"].get("nprocesses", 4) * 5000, + conda: + "../envs/environment.yaml" + script: + "../scripts/determine_availability_matrix.py" + + +rule build_renewable_profiles: + params: + snapshots=config_provider("snapshots"), + drop_leap_day=config_provider("enable", "drop_leap_day"), + renewable=config_provider("renewable"), + input: + availability_matrix=resources("availability_matrix_{clusters}_{technology}.nc"), + offshore_shapes=resources("offshore_shapes.geojson"), + regions=resources("regions_onshore_base_s_{clusters}.geojson"), + cutout=lambda w: "cutouts/" + + CDIR + + config_provider("renewable", w.technology, "cutout")(w) + + ".nc", + output: + profile=resources("profile_{clusters}_{technology}.nc"), + log: + logs("build_renewable_profile_{clusters}_{technology}.log"), + benchmark: + benchmarks("build_renewable_profiles_{clusters}_{technology}") threads: config["atlite"].get("nprocesses", 4) resources: mem_mb=config["atlite"].get("nprocesses", 4) * 5000, @@ -337,7 +368,7 @@ rule build_line_rating: + config_provider("lines", "dynamic_line_rating", "cutout")(w) + ".nc", output: - output=resources("networks/line_rating.nc"), + output=resources("dlr.nc"), log: logs("build_line_rating.log"), benchmark: @@ -385,6 +416,44 @@ rule build_transmission_projects: "../scripts/build_transmission_projects.py" +rule add_transmission_projects_and_dlr: + params: + transmission_projects=config_provider("transmission_projects"), + dlr=config_provider("lines", "dynamic_line_rating"), + s_max_pu=config_provider("lines", "s_max_pu"), + input: + network=resources("networks/base.nc"), + dlr=lambda w: ( + resources("dlr.nc") + if config_provider("lines", "dynamic_line_rating", "activate")(w) + else [] + ), + transmission_projects=lambda w: ( + [ + resources("transmission_projects/new_buses.csv"), + resources("transmission_projects/new_lines.csv"), + resources("transmission_projects/new_links.csv"), + resources("transmission_projects/adjust_lines.csv"), + resources("transmission_projects/adjust_links.csv"), + ] + if config_provider("transmission_projects", "enable")(w) + else [] + ), + output: + network=resources("networks/base_extended.nc"), + log: + logs("add_transmission_projects_and_dlr.log"), + benchmark: + benchmarks("add_transmission_projects_and_dlr") + threads: 1 + resources: + mem_mb=4000, + conda: + "../envs/environment.yaml" + script: + "../scripts/add_transmission_projects_and_dlr.py" + + def input_profile_tech(w): return { f"profile_{tech}": resources(f"profile_{tech}.nc") @@ -414,8 +483,8 @@ rule build_gdp_pop_non_nuts3: params: countries=config_provider("countries"), input: - base_network=resources("networks/base.nc"), - regions=resources("regions_onshore.geojson"), + base_network=resources("networks/base_s.nc"), + regions=resources("regions_onshore_base_s.geojson"), gdp_non_nuts3="data/bundle/GDP_per_capita_PPP_1990_2015_v2.nc", pop_non_nuts3="data/bundle/ppp_2013_1km_Aggregated.tif", output: @@ -433,97 +502,76 @@ rule build_gdp_pop_non_nuts3: "../scripts/build_gdp_pop_non_nuts3.py" -rule add_electricity: +rule build_electricity_demand_base: params: - length_factor=config_provider("lines", "length_factor"), - scaling_factor=config_provider("load", "scaling_factor"), - countries=config_provider("countries"), - snapshots=config_provider("snapshots"), - renewable=config_provider("renewable"), - electricity=config_provider("electricity"), - conventional=config_provider("conventional"), - costs=config_provider("costs"), - foresight=config_provider("foresight"), - drop_leap_day=config_provider("enable", "drop_leap_day"), - transmission_projects=config_provider("transmission_projects"), + distribution_key=config_provider("load", "distribution_key"), input: - unpack(input_profile_tech), - unpack(input_conventional), unpack(input_gdp_pop_non_nuts3), - base_network=resources("networks/base.nc"), - line_rating=lambda w: ( - resources("networks/line_rating.nc") - if config_provider("lines", "dynamic_line_rating", "activate")(w) - else resources("networks/base.nc") - ), - transmission_projects=lambda w: ( - [ - resources("transmission_projects/new_buses.csv"), - resources("transmission_projects/new_lines.csv"), - resources("transmission_projects/new_links.csv"), - resources("transmission_projects/adjust_lines.csv"), - resources("transmission_projects/adjust_links.csv"), - ] - if config_provider("transmission_projects", "enable")(w) - else [] - ), - tech_costs=lambda w: resources( - f"costs_{config_provider('costs', 'year')(w)}.csv" - ), - regions=resources("regions_onshore.geojson"), - powerplants=resources("powerplants.csv"), - hydro_capacities=ancient("data/hydro_capacities.csv"), - unit_commitment="data/unit_commitment.csv", - fuel_price=lambda w: ( - resources("monthly_fuel_price.csv") - if config_provider("conventional", "dynamic_fuel_price")(w) - else [] - ), + base_network=resources("networks/base_s.nc"), + regions=resources("regions_onshore_base_s.geojson"), + nuts3=resources("nuts3_shapes.geojson"), load=resources("electricity_demand.csv"), - nuts3_shapes=resources("nuts3_shapes.geojson"), output: - resources("networks/elec.nc"), + resources("electricity_demand_base_s.nc"), log: - logs("add_electricity.log"), + logs("build_electricity_demand_base_s.log"), benchmark: - benchmarks("add_electricity") - threads: 1 + benchmarks("build_electricity_demand_base_s") + resources: + mem_mb=5000, + conda: + "../envs/environment.yaml" + script: + "../scripts/build_electricity_demand_base.py" + + +rule build_hac_features: + params: + snapshots=config_provider("snapshots"), + drop_leap_day=config_provider("enable", "drop_leap_day"), + features=config_provider("clustering", "cluster_network", "hac_features"), + input: + cutout=lambda w: "cutouts/" + + CDIR + + config_provider("atlite", "default_cutout")(w) + + ".nc", + regions=resources("regions_onshore_base_s.geojson"), + output: + resources("hac_features.nc"), + log: + logs("build_hac_features.log"), + benchmark: + benchmarks("build_hac_features") + threads: config["atlite"].get("nprocesses", 4) resources: mem_mb=10000, conda: "../envs/environment.yaml" script: - "../scripts/add_electricity.py" + "../scripts/build_hac_features.py" rule simplify_network: params: simplify_network=config_provider("clustering", "simplify_network"), + cluster_network=config_provider("clustering", "cluster_network"), aggregation_strategies=config_provider( "clustering", "aggregation_strategies", default={} ), - focus_weights=config_provider("clustering", "focus_weights", default=None), - renewable_carriers=config_provider("electricity", "renewable_carriers"), - max_hours=config_provider("electricity", "max_hours"), - length_factor=config_provider("lines", "length_factor"), p_max_pu=config_provider("links", "p_max_pu", default=1.0), - costs=config_provider("costs"), input: - network=resources("networks/elec.nc"), - tech_costs=lambda w: resources( - f"costs_{config_provider('costs', 'year')(w)}.csv" - ), + network=resources("networks/base_extended.nc"), regions_onshore=resources("regions_onshore.geojson"), regions_offshore=resources("regions_offshore.geojson"), output: - network=resources("networks/elec_s{simpl}.nc"), - regions_onshore=resources("regions_onshore_elec_s{simpl}.geojson"), - regions_offshore=resources("regions_offshore_elec_s{simpl}.geojson"), - busmap=resources("busmap_elec_s{simpl}.csv"), + network=resources("networks/base_s.nc"), + regions_onshore=resources("regions_onshore_base_s.geojson"), + regions_offshore=resources("regions_offshore_base_s.geojson"), + busmap=resources("busmap_base_s.csv"), log: - logs("simplify_network/elec_s{simpl}.log"), + logs("simplify_network.log"), benchmark: - benchmarks("simplify_network/elec_s{simpl}") + benchmarks("simplify_network_b") threads: 1 resources: mem_mb=12000, @@ -537,7 +585,7 @@ rule simplify_network: def input_cluster_network(w): if config_provider("enable", "custom_busmap", default=False)(w): base_network = config_provider("electricity", "base_network")(w) - custom_busmap = f"data/busmaps/elec_s{w.simpl}_{w.clusters}_{base_network}.csv" + custom_busmap = f"data/busmaps/base_s_{w.clusters}_{base_network}.csv" return {"custom_busmap": custom_busmap} return {"custom_busmap": []} @@ -556,26 +604,29 @@ rule cluster_network: ), max_hours=config_provider("electricity", "max_hours"), length_factor=config_provider("lines", "length_factor"), - costs=config_provider("costs"), input: unpack(input_cluster_network), - network=resources("networks/elec_s{simpl}.nc"), - regions_onshore=resources("regions_onshore_elec_s{simpl}.geojson"), - regions_offshore=resources("regions_offshore_elec_s{simpl}.geojson"), - busmap=ancient(resources("busmap_elec_s{simpl}.csv")), - tech_costs=lambda w: resources( - f"costs_{config_provider('costs', 'year')(w)}.csv" + network=resources("networks/base_s.nc"), + regions_onshore=resources("regions_onshore_base_s.geojson"), + regions_offshore=resources("regions_offshore_base_s.geojson"), + busmap=ancient(resources("busmap_base_s.csv")), + hac_features=lambda w: ( + resources("hac_features.nc") + if config_provider("clustering", "cluster_network", "algorithm")(w) + == "hac" + else [] ), + load=resources("electricity_demand_base_s.nc"), output: - network=resources("networks/elec_s{simpl}_{clusters}.nc"), - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), - regions_offshore=resources("regions_offshore_elec_s{simpl}_{clusters}.geojson"), - busmap=resources("busmap_elec_s{simpl}_{clusters}.csv"), - linemap=resources("linemap_elec_s{simpl}_{clusters}.csv"), + network=resources("networks/base_s_{clusters}.nc"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), + regions_offshore=resources("regions_offshore_base_s_{clusters}.geojson"), + busmap=resources("busmap_base_s_{clusters}.csv"), + linemap=resources("linemap_base_s_{clusters}.csv"), log: - logs("cluster_network/elec_s{simpl}_{clusters}.log"), + logs("cluster_network_base_s_{clusters}.log"), benchmark: - benchmarks("cluster_network/elec_s{simpl}_{clusters}") + benchmarks("cluster_network_base_s_{clusters}") threads: 1 resources: mem_mb=10000, @@ -585,29 +636,76 @@ rule cluster_network: "../scripts/cluster_network.py" -rule add_extra_components: +def input_profile_tech(w): + return { + f"profile_{tech}": resources( + "profile_{clusters}_" + tech + ".nc" + if tech != "hydro" + else f"profile_{tech}.nc" + ) + for tech in config_provider("electricity", "renewable_carriers")(w) + } + + +def input_conventional(w): + return { + f"conventional_{carrier}_{attr}": fn + for carrier, d in config_provider("conventional", default={None: {}})(w).items() + if carrier in config_provider("electricity", "conventional_carriers")(w) + for attr, fn in d.items() + if str(fn).startswith("data/") + } + + +rule add_electricity: params: - extendable_carriers=config_provider("electricity", "extendable_carriers"), - max_hours=config_provider("electricity", "max_hours"), + line_length_factor=config_provider("lines", "length_factor"), + link_length_factor=config_provider("links", "length_factor"), + scaling_factor=config_provider("load", "scaling_factor"), + countries=config_provider("countries"), + snapshots=config_provider("snapshots"), + renewable=config_provider("renewable"), + electricity=config_provider("electricity"), + conventional=config_provider("conventional"), costs=config_provider("costs"), + foresight=config_provider("foresight"), + drop_leap_day=config_provider("enable", "drop_leap_day"), + consider_efficiency_classes=config_provider( + "clustering", "consider_efficiency_classes" + ), + aggregation_strategies=config_provider("clustering", "aggregation_strategies"), + exclude_carriers=config_provider("clustering", "exclude_carriers"), input: - network=resources("networks/elec_s{simpl}_{clusters}.nc"), + unpack(input_profile_tech), + unpack(input_conventional), + base_network=resources("networks/base_s_{clusters}.nc"), tech_costs=lambda w: resources( f"costs_{config_provider('costs', 'year')(w)}.csv" ), + regions=resources("regions_onshore_base_s_{clusters}.geojson"), + powerplants=resources("powerplants_s_{clusters}.csv"), + hydro_capacities=ancient("data/hydro_capacities.csv"), + unit_commitment="data/unit_commitment.csv", + fuel_price=lambda w: ( + resources("monthly_fuel_price.csv") + if config_provider("conventional", "dynamic_fuel_price")(w) + else [] + ), + load=resources("electricity_demand_base_s.nc"), + busmap=resources("busmap_base_s_{clusters}.csv"), output: - resources("networks/elec_s{simpl}_{clusters}_ec.nc"), + resources("networks/base_s_{clusters}_elec.nc"), log: - logs("add_extra_components/elec_s{simpl}_{clusters}.log"), + logs("add_electricity_{clusters}.log"), benchmark: - benchmarks("add_extra_components/elec_s{simpl}_{clusters}_ec") + benchmarks("add_electricity_{clusters}") threads: 1 resources: - mem_mb=4000, + mem_mb=10000, conda: "../envs/environment.yaml" script: - "../scripts/add_extra_components.py" + "../scripts/add_electricity.py" rule prepare_network: @@ -626,17 +724,17 @@ rule prepare_network: autarky=config_provider("electricity", "autarky", default={}), drop_leap_day=config_provider("enable", "drop_leap_day"), input: - resources("networks/elec_s{simpl}_{clusters}_ec.nc"), + resources("networks/base_s_{clusters}_elec.nc"), tech_costs=lambda w: resources( f"costs_{config_provider('costs', 'year')(w)}.csv" ), co2_price=lambda w: resources("co2_price.csv") if "Ept" in w.opts else [], output: - resources("networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc"), + resources("networks/base_s_{clusters}_elec_l{ll}_{opts}.nc"), log: - logs("prepare_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.log"), + logs("prepare_network_base_s_{clusters}_elec_l{ll}_{opts}.log"), benchmark: - (benchmarks("prepare_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}")) + benchmarks("prepare_network_base_s_{clusters}_elec_l{ll}_{opts}") threads: 1 resources: mem_mb=4000, diff --git a/rules/build_sector.smk b/rules/build_sector.smk index ccd4243e..bd19fef3 100755 --- a/rules/build_sector.smk +++ b/rules/build_sector.smk @@ -33,19 +33,19 @@ rule build_clustered_population_layouts: pop_layout_total=resources("pop_layout_total.nc"), pop_layout_urban=resources("pop_layout_urban.nc"), pop_layout_rural=resources("pop_layout_rural.nc"), - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), cutout=lambda w: "cutouts/" + CDIR + config_provider("atlite", "default_cutout")(w) + ".nc", output: - clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"), + clustered_pop_layout=resources("pop_layout_base_s_{clusters}.csv"), log: - logs("build_clustered_population_layouts_{simpl}_{clusters}.log"), + logs("build_clustered_population_layouts_s_{clusters}.log"), resources: mem_mb=10000, benchmark: - benchmarks("build_clustered_population_layouts/s{simpl}_{clusters}") + benchmarks("build_clustered_population_layouts/s_{clusters}") conda: "../envs/environment.yaml" script: @@ -57,19 +57,19 @@ rule build_simplified_population_layouts: pop_layout_total=resources("pop_layout_total.nc"), pop_layout_urban=resources("pop_layout_urban.nc"), pop_layout_rural=resources("pop_layout_rural.nc"), - regions_onshore=resources("regions_onshore_elec_s{simpl}.geojson"), + regions_onshore=resources("regions_onshore_base_s.geojson"), cutout=lambda w: "cutouts/" + CDIR + config_provider("atlite", "default_cutout")(w) + ".nc", output: - clustered_pop_layout=resources("pop_layout_elec_s{simpl}.csv"), + clustered_pop_layout=resources("pop_layout_base_s.csv"), resources: mem_mb=10000, log: - logs("build_simplified_population_layouts_{simpl}"), + logs("build_simplified_population_layouts_s"), benchmark: - benchmarks("build_simplified_population_layouts/s{simpl}") + benchmarks("build_simplified_population_layouts/s") conda: "../envs/environment.yaml" script: @@ -96,17 +96,17 @@ rule build_gas_input_locations: gem="data/gem/Europe-Gas-Tracker-2024-05.xlsx", entry="data/gas_network/scigrid-gas/data/IGGIELGN_BorderPoints.geojson", storage="data/gas_network/scigrid-gas/data/IGGIELGN_Storages.geojson", - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), - regions_offshore=resources("regions_offshore_elec_s{simpl}_{clusters}.geojson"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), + regions_offshore=resources("regions_offshore_base_s_{clusters}.geojson"), output: - gas_input_nodes=resources("gas_input_locations_s{simpl}_{clusters}.geojson"), + gas_input_nodes=resources("gas_input_locations_s_{clusters}.geojson"), gas_input_nodes_simplified=resources( - "gas_input_locations_s{simpl}_{clusters}_simplified.csv" + "gas_input_locations_s_{clusters}_simplified.csv" ), resources: mem_mb=2000, log: - logs("build_gas_input_locations_s{simpl}_{clusters}.log"), + logs("build_gas_input_locations_s_{clusters}.log"), conda: "../envs/environment.yaml" script: @@ -116,14 +116,14 @@ rule build_gas_input_locations: rule cluster_gas_network: input: cleaned_gas_network=resources("gas_network.csv"), - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), - regions_offshore=resources("regions_offshore_elec_s{simpl}_{clusters}.geojson"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), + regions_offshore=resources("regions_offshore_base_s_{clusters}.geojson"), output: - clustered_gas_network=resources("gas_network_elec_s{simpl}_{clusters}.csv"), + clustered_gas_network=resources("gas_network_base_s_{clusters}.csv"), resources: mem_mb=4000, log: - logs("cluster_gas_network_s{simpl}_{clusters}.log"), + logs("cluster_gas_network_{clusters}.log"), conda: "../envs/environment.yaml" script: @@ -149,17 +149,17 @@ rule build_daily_heat_demand: drop_leap_day=config_provider("enable", "drop_leap_day"), input: pop_layout=resources("pop_layout_total.nc"), - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), cutout=heat_demand_cutout, output: - heat_demand=resources("daily_heat_demand_total_elec_s{simpl}_{clusters}.nc"), + heat_demand=resources("daily_heat_demand_total_base_s_{clusters}.nc"), resources: mem_mb=20000, threads: 8 log: - logs("build_daily_heat_demand_total_{simpl}_{clusters}.loc"), + logs("build_daily_heat_demand_total_s_{clusters}.loc"), benchmark: - benchmarks("build_daily_heat_demand/total_s{simpl}_{clusters}") + benchmarks("build_daily_heat_demand/total_s_{clusters}") conda: "../envs/environment.yaml" script: @@ -172,16 +172,16 @@ rule build_hourly_heat_demand: drop_leap_day=config_provider("enable", "drop_leap_day"), input: heat_profile="data/heat_load_profile_BDEW.csv", - heat_demand=resources("daily_heat_demand_total_elec_s{simpl}_{clusters}.nc"), + heat_demand=resources("daily_heat_demand_total_base_s_{clusters}.nc"), output: - heat_demand=resources("hourly_heat_demand_total_elec_s{simpl}_{clusters}.nc"), + heat_demand=resources("hourly_heat_demand_total_base_s_{clusters}.nc"), resources: mem_mb=2000, threads: 8 log: - logs("build_hourly_heat_demand_total_{simpl}_{clusters}.loc"), + logs("build_hourly_heat_demand_total_s_{clusters}.loc"), benchmark: - benchmarks("build_hourly_heat_demand/total_s{simpl}_{clusters}") + benchmarks("build_hourly_heat_demand/total_s_{clusters}") conda: "../envs/environment.yaml" script: @@ -194,18 +194,18 @@ rule build_temperature_profiles: drop_leap_day=config_provider("enable", "drop_leap_day"), input: pop_layout=resources("pop_layout_total.nc"), - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), cutout=heat_demand_cutout, output: - temp_soil=resources("temp_soil_total_elec_s{simpl}_{clusters}.nc"), - temp_air=resources("temp_air_total_elec_s{simpl}_{clusters}.nc"), + temp_soil=resources("temp_soil_total_base_s_{clusters}.nc"), + temp_air=resources("temp_air_total_base_s_{clusters}.nc"), resources: mem_mb=20000, threads: 8 log: - logs("build_temperature_profiles_total_{simpl}_{clusters}.log"), + logs("build_temperature_profiles_total_s_{clusters}.log"), benchmark: - benchmarks("build_temperature_profiles/total_s{simpl}_{clusters}") + benchmarks("build_temperature_profiles/total_{clusters}") conda: "../envs/environment.yaml" script: @@ -252,21 +252,21 @@ rule build_central_heating_temperature_profiles: "rolling_window_ambient_temperature", ), input: - temp_air_total=resources("temp_air_total_elec_s{simpl}_{clusters}.nc"), - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + temp_air_total=resources("temp_air_total_base_s_{clusters}.nc"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), output: central_heating_forward_temperature_profiles=resources( - "central_heating_forward_temperature_profiles_elec_s{simpl}_{clusters}.nc" + "central_heating_forward_temperature_profiles_base_s_{clusters}.nc" ), central_heating_return_temperature_profiles=resources( - "central_heating_return_temperature_profiles_elec_s{simpl}_{clusters}.nc" + "central_heating_return_temperature_profiles_base_s_{clusters}.nc" ), resources: mem_mb=20000, log: - logs("build_central_heating_temperature_profiles_s{simpl}_{clusters}.log"), + logs("build_central_heating_temperature_profiles_s_{clusters}.log"), benchmark: - benchmarks("build_central_heating_temperature_profiles/s{simpl}_{clusters}") + benchmarks("build_central_heating_temperature_profiles/s_{clusters}") conda: "../envs/environment.yaml" script: @@ -288,22 +288,22 @@ rule build_cop_profiles: snapshots=config_provider("snapshots"), input: central_heating_forward_temperature_profiles=resources( - "central_heating_forward_temperature_profiles_elec_s{simpl}_{clusters}.nc" + "central_heating_forward_temperature_profiles_base_s_{clusters}.nc" ), central_heating_return_temperature_profiles=resources( - "central_heating_return_temperature_profiles_elec_s{simpl}_{clusters}.nc" + "central_heating_return_temperature_profiles_base_s_{clusters}.nc" ), - temp_soil_total=resources("temp_soil_total_elec_s{simpl}_{clusters}.nc"), - temp_air_total=resources("temp_air_total_elec_s{simpl}_{clusters}.nc"), - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + temp_soil_total=resources("temp_soil_total_base_s_{clusters}.nc"), + temp_air_total=resources("temp_air_total_base_s_{clusters}.nc"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), output: - cop_profiles=resources("cop_profiles_elec_s{simpl}_{clusters}.nc"), + cop_profiles=resources("cop_profiles_base_s_{clusters}.nc"), resources: mem_mb=20000, log: - logs("build_cop_profiles_s{simpl}_{clusters}.log"), + logs("build_cop_profiles_s_{clusters}.log"), benchmark: - benchmarks("build_cop_profiles/s{simpl}_{clusters}") + benchmarks("build_cop_profiles/s_{clusters}") conda: "../envs/environment.yaml" script: @@ -330,17 +330,17 @@ rule build_solar_thermal_profiles: solar_thermal=config_provider("solar_thermal"), input: pop_layout=resources("pop_layout_total.nc"), - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), cutout=solar_thermal_cutout, output: - solar_thermal=resources("solar_thermal_total_elec_s{simpl}_{clusters}.nc"), + solar_thermal=resources("solar_thermal_total_base_s_{clusters}.nc"), resources: mem_mb=20000, threads: 16 log: - logs("build_solar_thermal_profiles_total_s{simpl}_{clusters}.log"), + logs("build_solar_thermal_profiles_total_s_{clusters}.log"), benchmark: - benchmarks("build_solar_thermal_profiles/total_s{simpl}_{clusters}") + benchmarks("build_solar_thermal_profiles/total_{clusters}") conda: "../envs/environment.yaml" script: @@ -406,25 +406,25 @@ rule build_biomass_potentials: enspreso_biomass="data/ENSPRESO_BIOMASS.xlsx", eurostat="data/eurostat/Balances-April2023", nuts2="data/nuts/NUTS_RG_03M_2013_4326_LEVL_2.geojson", - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), nuts3_population=ancient("data/bundle/nama_10r_3popgdp.tsv.gz"), swiss_cantons=ancient("data/ch_cantons.csv"), swiss_population=ancient("data/bundle/je-e-21.03.02.xls"), country_shapes=resources("country_shapes.geojson"), output: biomass_potentials_all=resources( - "biomass_potentials_all_s{simpl}_{clusters}_{planning_horizons}.csv" + "biomass_potentials_all_{clusters}_{planning_horizons}.csv" ), biomass_potentials=resources( - "biomass_potentials_s{simpl}_{clusters}_{planning_horizons}.csv" + "biomass_potentials_s_{clusters}_{planning_horizons}.csv" ), threads: 8 resources: mem_mb=1000, log: - logs("build_biomass_potentials_s{simpl}_{clusters}_{planning_horizons}.log"), + logs("build_biomass_potentials_s_{clusters}_{planning_horizons}.log"), benchmark: - benchmarks("build_biomass_potentials_s{simpl}_{clusters}_{planning_horizons}") + benchmarks("build_biomass_potentials_s_{clusters}_{planning_horizons}") conda: "../envs/environment.yaml" script: @@ -457,19 +457,19 @@ rule build_sequestration_potentials: ), input: sequestration_potential="data/complete_map_2020_unit_Mt.geojson", - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), - regions_offshore=resources("regions_offshore_elec_s{simpl}_{clusters}.geojson"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), + regions_offshore=resources("regions_offshore_base_s_{clusters}.geojson"), output: sequestration_potential=resources( - "co2_sequestration_potential_elec_s{simpl}_{clusters}.csv" + "co2_sequestration_potential_base_s_{clusters}.csv" ), threads: 1 resources: mem_mb=4000, log: - logs("build_sequestration_potentials_s{simpl}_{clusters}.log"), + logs("build_sequestration_potentials_{clusters}.log"), benchmark: - benchmarks("build_sequestration_potentials_s{simpl}_{clusters}") + benchmarks("build_sequestration_potentials_{clusters}") conda: "../envs/environment.yaml" script: @@ -479,17 +479,17 @@ rule build_sequestration_potentials: rule build_salt_cavern_potentials: input: salt_caverns="data/bundle/h2_salt_caverns_GWh_per_sqkm.geojson", - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), - regions_offshore=resources("regions_offshore_elec_s{simpl}_{clusters}.geojson"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), + regions_offshore=resources("regions_offshore_base_s_{clusters}.geojson"), output: - h2_cavern_potential=resources("salt_cavern_potentials_s{simpl}_{clusters}.csv"), + h2_cavern_potential=resources("salt_cavern_potentials_s_{clusters}.csv"), threads: 1 resources: mem_mb=2000, log: - logs("build_salt_cavern_potentials_s{simpl}_{clusters}.log"), + logs("build_salt_cavern_potentials_s_{clusters}.log"), benchmark: - benchmarks("build_salt_cavern_potentials_s{simpl}_{clusters}") + benchmarks("build_salt_cavern_potentials_s_{clusters}") conda: "../envs/environment.yaml" script: @@ -625,8 +625,8 @@ rule build_industrial_distribution_key: ), countries=config_provider("countries"), input: - regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), - clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), + clustered_pop_layout=resources("pop_layout_base_s_{clusters}.csv"), hotmaps="data/Industrial_Database.csv", gem_gspt="data/gem/Global-Steel-Plant-Tracker-April-2024-Standard-Copy-V1.xlsx", ammonia="data/ammonia_plants.csv", @@ -634,15 +634,15 @@ rule build_industrial_distribution_key: refineries_supplement="data/refineries-noneu.csv", output: industrial_distribution_key=resources( - "industrial_distribution_key_elec_s{simpl}_{clusters}.csv" + "industrial_distribution_key_base_s_{clusters}.csv" ), threads: 1 resources: mem_mb=1000, log: - logs("build_industrial_distribution_key_s{simpl}_{clusters}.log"), + logs("build_industrial_distribution_key_{clusters}.log"), benchmark: - benchmarks("build_industrial_distribution_key/s{simpl}_{clusters}") + benchmarks("build_industrial_distribution_key/s_{clusters}") conda: "../envs/environment.yaml" script: @@ -652,26 +652,24 @@ rule build_industrial_distribution_key: rule build_industrial_production_per_node: input: industrial_distribution_key=resources( - "industrial_distribution_key_elec_s{simpl}_{clusters}.csv" + "industrial_distribution_key_base_s_{clusters}.csv" ), industrial_production_per_country_tomorrow=resources( "industrial_production_per_country_tomorrow_{planning_horizons}.csv" ), output: industrial_production_per_node=resources( - "industrial_production_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "industrial_production_base_s_{clusters}_{planning_horizons}.csv" ), threads: 1 resources: mem_mb=1000, log: - logs( - "build_industrial_production_per_node_s{simpl}_{clusters}_{planning_horizons}.log" - ), + logs("build_industrial_production_per_node_{clusters}_{planning_horizons}.log"), benchmark: ( benchmarks( - "build_industrial_production_per_node/s{simpl}_{clusters}_{planning_horizons}" + "build_industrial_production_per_node/s_{clusters}_{planning_horizons}" ) ) conda: @@ -686,26 +684,26 @@ rule build_industrial_energy_demand_per_node: "industry_sector_ratios_{planning_horizons}.csv" ), industrial_production_per_node=resources( - "industrial_production_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "industrial_production_base_s_{clusters}_{planning_horizons}.csv" ), industrial_energy_demand_per_node_today=resources( - "industrial_energy_demand_today_elec_s{simpl}_{clusters}.csv" + "industrial_energy_demand_today_base_s_{clusters}.csv" ), output: industrial_energy_demand_per_node=resources( - "industrial_energy_demand_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "industrial_energy_demand_base_s_{clusters}_{planning_horizons}.csv" ), threads: 1 resources: mem_mb=1000, log: logs( - "build_industrial_energy_demand_per_node_s{simpl}_{clusters}_{planning_horizons}.log" + "build_industrial_energy_demand_per_node_{clusters}_{planning_horizons}.log" ), benchmark: ( benchmarks( - "build_industrial_energy_demand_per_node/s{simpl}_{clusters}_{planning_horizons}" + "build_industrial_energy_demand_per_node/s_{clusters}_{planning_horizons}" ) ) conda: @@ -744,22 +742,22 @@ rule build_industrial_energy_demand_per_country_today: rule build_industrial_energy_demand_per_node_today: input: industrial_distribution_key=resources( - "industrial_distribution_key_elec_s{simpl}_{clusters}.csv" + "industrial_distribution_key_base_s_{clusters}.csv" ), industrial_energy_demand_per_country_today=resources( "industrial_energy_demand_per_country_today.csv" ), output: industrial_energy_demand_per_node_today=resources( - "industrial_energy_demand_today_elec_s{simpl}_{clusters}.csv" + "industrial_energy_demand_today_base_s_{clusters}.csv" ), threads: 1 resources: mem_mb=1000, log: - logs("build_industrial_energy_demand_per_node_today_s{simpl}_{clusters}.log"), + logs("build_industrial_energy_demand_per_node_today_{clusters}.log"), benchmark: - benchmarks("build_industrial_energy_demand_per_node_today/s{simpl}_{clusters}") + benchmarks("build_industrial_energy_demand_per_node_today/s_{clusters}") conda: "../envs/environment.yaml" script: @@ -773,23 +771,23 @@ rule build_retro_cost: input: building_stock="data/retro/data_building_stock.csv", data_tabula="data/bundle/retro/tabula-calculator-calcsetbuilding.csv", - air_temperature=resources("temp_air_total_elec_s{simpl}_{clusters}.nc"), + air_temperature=resources("temp_air_total_base_s_{clusters}.nc"), u_values_PL="data/retro/u_values_poland.csv", tax_w="data/retro/electricity_taxes_eu.csv", construction_index="data/retro/comparative_level_investment.csv", floor_area_missing="data/retro/floor_area_missing.csv", - clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"), + clustered_pop_layout=resources("pop_layout_base_s_{clusters}.csv"), cost_germany="data/retro/retro_cost_germany.csv", window_assumptions="data/retro/window_assumptions.csv", output: - retro_cost=resources("retro_cost_elec_s{simpl}_{clusters}.csv"), - floor_area=resources("floor_area_elec_s{simpl}_{clusters}.csv"), + retro_cost=resources("retro_cost_base_s_{clusters}.csv"), + floor_area=resources("floor_area_base_s_{clusters}.csv"), resources: mem_mb=1000, log: - logs("build_retro_cost_s{simpl}_{clusters}.log"), + logs("build_retro_cost_{clusters}.log"), benchmark: - benchmarks("build_retro_cost/s{simpl}_{clusters}") + benchmarks("build_retro_cost/s_{clusters}") conda: "../envs/environment.yaml" script: @@ -801,14 +799,14 @@ rule build_population_weighted_energy_totals: snapshots=config_provider("snapshots"), input: energy_totals=resources("{kind}_totals.csv"), - clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"), + clustered_pop_layout=resources("pop_layout_base_s_{clusters}.csv"), output: - resources("pop_weighted_{kind}_totals_s{simpl}_{clusters}.csv"), + resources("pop_weighted_{kind}_totals_s_{clusters}.csv"), threads: 1 resources: mem_mb=2000, log: - logs("build_population_weighted_{kind}_totals_s{simpl}_{clusters}.log"), + logs("build_population_weighted_{kind}_totals_{clusters}.log"), conda: "../envs/environment.yaml" script: @@ -819,17 +817,17 @@ rule build_shipping_demand: input: ports="data/attributed_ports.json", scope=resources("europe_shape.geojson"), - regions=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + regions=resources("regions_onshore_base_s_{clusters}.geojson"), demand=resources("energy_totals.csv"), params: energy_totals_year=config_provider("energy", "energy_totals_year"), output: - resources("shipping_demand_s{simpl}_{clusters}.csv"), + resources("shipping_demand_s_{clusters}.csv"), threads: 1 resources: mem_mb=2000, log: - logs("build_shipping_demand_s{simpl}_{clusters}.log"), + logs("build_shipping_demand_s_{clusters}.log"), conda: "../envs/environment.yaml" script: @@ -843,24 +841,24 @@ rule build_transport_demand: sector=config_provider("sector"), energy_totals_year=config_provider("energy", "energy_totals_year"), input: - clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"), + clustered_pop_layout=resources("pop_layout_base_s_{clusters}.csv"), pop_weighted_energy_totals=resources( - "pop_weighted_energy_totals_s{simpl}_{clusters}.csv" + "pop_weighted_energy_totals_s_{clusters}.csv" ), transport_data=resources("transport_data.csv"), traffic_data_KFZ="data/bundle/emobility/KFZ__count", traffic_data_Pkw="data/bundle/emobility/Pkw__count", - temp_air_total=resources("temp_air_total_elec_s{simpl}_{clusters}.nc"), + temp_air_total=resources("temp_air_total_base_s_{clusters}.nc"), output: - transport_demand=resources("transport_demand_s{simpl}_{clusters}.csv"), - transport_data=resources("transport_data_s{simpl}_{clusters}.csv"), - avail_profile=resources("avail_profile_s{simpl}_{clusters}.csv"), - dsm_profile=resources("dsm_profile_s{simpl}_{clusters}.csv"), + transport_demand=resources("transport_demand_s_{clusters}.csv"), + transport_data=resources("transport_data_s_{clusters}.csv"), + avail_profile=resources("avail_profile_s_{clusters}.csv"), + dsm_profile=resources("dsm_profile_s_{clusters}.csv"), threads: 1 resources: mem_mb=2000, log: - logs("build_transport_demand_s{simpl}_{clusters}.log"), + logs("build_transport_demand_s_{clusters}.log"), conda: "../envs/environment.yaml" script: @@ -873,16 +871,16 @@ rule build_district_heat_share: energy_totals_year=config_provider("energy", "energy_totals_year"), input: district_heat_share=resources("district_heat_share.csv"), - clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"), + clustered_pop_layout=resources("pop_layout_base_s_{clusters}.csv"), output: district_heat_share=resources( - "district_heat_share_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "district_heat_share_base_s_{clusters}_{planning_horizons}.csv" ), threads: 1 resources: mem_mb=1000, log: - logs("build_district_heat_share_s{simpl}_{clusters}_{planning_horizons}.log"), + logs("build_district_heat_share_{clusters}_{planning_horizons}.log"), conda: "../envs/environment.yaml" script: @@ -896,27 +894,27 @@ rule build_existing_heating_distribution: existing_capacities=config_provider("existing_capacities"), input: existing_heating="data/existing_infrastructure/existing_heating_raw.csv", - clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"), + clustered_pop_layout=resources("pop_layout_base_s_{clusters}.csv"), clustered_pop_energy_layout=resources( - "pop_weighted_energy_totals_s{simpl}_{clusters}.csv" + "pop_weighted_energy_totals_s_{clusters}.csv" ), district_heat_share=resources( - "district_heat_share_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "district_heat_share_base_s_{clusters}_{planning_horizons}.csv" ), output: existing_heating_distribution=resources( - "existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "existing_heating_distribution_base_s_{clusters}_{planning_horizons}.csv" ), threads: 1 resources: mem_mb=2000, log: logs( - "build_existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.log" + "build_existing_heating_distribution_base_s_{clusters}_{planning_horizons}.log" ), benchmark: benchmarks( - "build_existing_heating_distribution/elec_s{simpl}_{clusters}_{planning_horizons}" + "build_existing_heating_distribution/base_s_{clusters}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -930,28 +928,28 @@ rule time_aggregation: drop_leap_day=config_provider("enable", "drop_leap_day"), solver_name=config_provider("solving", "solver", "name"), input: - network=resources("networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc"), + network=resources("networks/base_s_{clusters}_elec_l{ll}_{opts}.nc"), hourly_heat_demand_total=lambda w: ( - resources("hourly_heat_demand_total_elec_s{simpl}_{clusters}.nc") + resources("hourly_heat_demand_total_base_s_{clusters}.nc") if config_provider("sector", "heating")(w) else [] ), solar_thermal_total=lambda w: ( - resources("solar_thermal_total_elec_s{simpl}_{clusters}.nc") + resources("solar_thermal_total_base_s_{clusters}.nc") if config_provider("sector", "solar_thermal")(w) else [] ), output: snapshot_weightings=resources( - "snapshot_weightings_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.csv" + "snapshot_weightings_base_s_{clusters}_elec_l{ll}_{opts}.csv" ), threads: 1 resources: mem_mb=5000, log: - logs("time_aggregation_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.log"), + logs("time_aggregation_base_s_{clusters}_elec_l{ll}_{opts}.log"), benchmark: - benchmarks("time_aggregation_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}") + benchmarks("time_aggregation_base_s_{clusters}_elec_l{ll}_{opts}") conda: "../envs/environment.yaml" script: @@ -960,7 +958,7 @@ rule time_aggregation: def input_profile_offwind(w): return { - f"profile_{tech}": resources(f"profile_{tech}.nc") + f"profile_{tech}": resources("profile_{clusters}_" + tech + ".nc") for tech in ["offwind-ac", "offwind-dc", "offwind-float"] if (tech in config_provider("electricity", "renewable_carriers")(w)) } @@ -973,21 +971,21 @@ rule build_egs_potentials: costs=config_provider("costs"), input: egs_cost="data/egs_costs.json", - regions=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + regions=resources("regions_onshore_base_s_{clusters}.geojson"), air_temperature=( - resources("temp_air_total_elec_s{simpl}_{clusters}.nc") + resources("temp_air_total_base_s_{clusters}.nc") if config_provider("sector", "enhanced_geothermal", "var_cf") else [] ), output: - egs_potentials=resources("egs_potentials_s{simpl}_{clusters}.csv"), - egs_overlap=resources("egs_overlap_s{simpl}_{clusters}.csv"), - egs_capacity_factors=resources("egs_capacity_factors_s{simpl}_{clusters}.csv"), + egs_potentials=resources("egs_potentials_{clusters}.csv"), + egs_overlap=resources("egs_overlap_{clusters}.csv"), + egs_capacity_factors=resources("egs_capacity_factors_{clusters}.csv"), threads: 1 resources: mem_mb=2000, log: - logs("build_egs_potentials_s{simpl}_{clusters}.log"), + logs("build_egs_potentials_{clusters}.log"), conda: "../envs/environment.yaml" script: @@ -1005,6 +1003,7 @@ rule prepare_sector_network: costs=config_provider("costs"), sector=config_provider("sector"), industry=config_provider("industry"), + renewable=config_provider("renewable"), lines=config_provider("lines"), pypsa_eur=config_provider("pypsa_eur"), length_factor=config_provider("lines", "length_factor"), @@ -1022,15 +1021,15 @@ rule prepare_sector_network: **rules.cluster_gas_network.output, **rules.build_gas_input_locations.output, snapshot_weightings=resources( - "snapshot_weightings_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.csv" + "snapshot_weightings_base_s_{clusters}_elec_l{ll}_{opts}.csv" ), retro_cost=lambda w: ( - resources("retro_cost_elec_s{simpl}_{clusters}.csv") + resources("retro_cost_base_s_{clusters}.csv") if config_provider("sector", "retrofitting", "retro_endogen")(w) else [] ), floor_area=lambda w: ( - resources("floor_area_elec_s{simpl}_{clusters}.csv") + resources("floor_area_base_s_{clusters}.csv") if config_provider("sector", "retrofitting", "retro_endogen")(w) else [] ), @@ -1041,96 +1040,91 @@ rule prepare_sector_network: else [] ), sequestration_potential=lambda w: ( - resources("co2_sequestration_potential_elec_s{simpl}_{clusters}.csv") + resources("co2_sequestration_potential_base_s_{clusters}.csv") if config_provider( "sector", "regional_co2_sequestration_potential", "enable" )(w) else [] ), - network=resources("networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc"), + network=resources("networks/base_s_{clusters}_elec_l{ll}_{opts}.nc"), eurostat="data/eurostat/Balances-April2023", pop_weighted_energy_totals=resources( - "pop_weighted_energy_totals_s{simpl}_{clusters}.csv" + "pop_weighted_energy_totals_s_{clusters}.csv" ), - pop_weighted_heat_totals=resources( - "pop_weighted_heat_totals_s{simpl}_{clusters}.csv" - ), - shipping_demand=resources("shipping_demand_s{simpl}_{clusters}.csv"), - transport_demand=resources("transport_demand_s{simpl}_{clusters}.csv"), - transport_data=resources("transport_data_s{simpl}_{clusters}.csv"), - avail_profile=resources("avail_profile_s{simpl}_{clusters}.csv"), - dsm_profile=resources("dsm_profile_s{simpl}_{clusters}.csv"), + pop_weighted_heat_totals=resources("pop_weighted_heat_totals_s_{clusters}.csv"), + shipping_demand=resources("shipping_demand_s_{clusters}.csv"), + transport_demand=resources("transport_demand_s_{clusters}.csv"), + transport_data=resources("transport_data_s_{clusters}.csv"), + avail_profile=resources("avail_profile_s_{clusters}.csv"), + dsm_profile=resources("dsm_profile_s_{clusters}.csv"), co2_totals_name=resources("co2_totals.csv"), co2="data/bundle/eea/UNFCCC_v23.csv", biomass_potentials=lambda w: ( resources( - "biomass_potentials_s{simpl}_{clusters}_" + "biomass_potentials_s_{clusters}_" + "{}.csv".format(config_provider("biomass", "year")(w)) ) if config_provider("foresight")(w) == "overnight" - else resources( - "biomass_potentials_s{simpl}_{clusters}_{planning_horizons}.csv" - ) + else resources("biomass_potentials_s_{clusters}_{planning_horizons}.csv") ), costs=lambda w: ( resources("costs_{}.csv".format(config_provider("costs", "year")(w))) if config_provider("foresight")(w) == "overnight" else resources("costs_{planning_horizons}.csv") ), - h2_cavern=resources("salt_cavern_potentials_s{simpl}_{clusters}.csv"), - busmap_s=resources("busmap_elec_s{simpl}.csv"), - busmap=resources("busmap_elec_s{simpl}_{clusters}.csv"), - clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"), - simplified_pop_layout=resources("pop_layout_elec_s{simpl}.csv"), + h2_cavern=resources("salt_cavern_potentials_s_{clusters}.csv"), + busmap_s=resources("busmap_base_s.csv"), + busmap=resources("busmap_base_s_{clusters}.csv"), + clustered_pop_layout=resources("pop_layout_base_s_{clusters}.csv"), industrial_demand=resources( - "industrial_energy_demand_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "industrial_energy_demand_base_s_{clusters}_{planning_horizons}.csv" ), hourly_heat_demand_total=resources( - "hourly_heat_demand_total_elec_s{simpl}_{clusters}.nc" + "hourly_heat_demand_total_base_s_{clusters}.nc" ), industrial_production=resources( - "industrial_production_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "industrial_production_base_s_{clusters}_{planning_horizons}.csv" ), district_heat_share=resources( - "district_heat_share_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "district_heat_share_base_s_{clusters}_{planning_horizons}.csv" ), heating_efficiencies=resources("heating_efficiencies.csv"), - temp_soil_total=resources("temp_soil_total_elec_s{simpl}_{clusters}.nc"), - temp_air_total=resources("temp_air_total_elec_s{simpl}_{clusters}.nc"), - cop_profiles=resources("cop_profiles_elec_s{simpl}_{clusters}.nc"), + temp_soil_total=resources("temp_soil_total_base_s_{clusters}.nc"), + temp_air_total=resources("temp_air_total_base_s_{clusters}.nc"), + cop_profiles=resources("cop_profiles_base_s_{clusters}.nc"), solar_thermal_total=lambda w: ( - resources("solar_thermal_total_elec_s{simpl}_{clusters}.nc") + resources("solar_thermal_total_base_s_{clusters}.nc") if config_provider("sector", "solar_thermal")(w) else [] ), egs_potentials=lambda w: ( - resources("egs_potentials_s{simpl}_{clusters}.csv") + resources("egs_potentials_{clusters}.csv") if config_provider("sector", "enhanced_geothermal", "enable")(w) else [] ), egs_overlap=lambda w: ( - resources("egs_overlap_s{simpl}_{clusters}.csv") + resources("egs_overlap_{clusters}.csv") if config_provider("sector", "enhanced_geothermal", "enable")(w) else [] ), egs_capacity_factors=lambda w: ( - resources("egs_capacity_factors_s{simpl}_{clusters}.csv") + resources("egs_capacity_factors_{clusters}.csv") if config_provider("sector", "enhanced_geothermal", "enable")(w) else [] ), output: RESULTS - + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", threads: 1 resources: mem_mb=2000, log: RESULTS - + "logs/prepare_sector_network_elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/prepare_sector_network_base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/prepare_sector_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/prepare_sector_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" diff --git a/rules/collect.smk b/rules/collect.smk index 214b8102..ca58e17c 100644 --- a/rules/collect.smk +++ b/rules/collect.smk @@ -6,7 +6,6 @@ localrules: all, cluster_networks, - extra_components_networks, prepare_elec_networks, prepare_sector_networks, solve_elec_networks, @@ -16,16 +15,7 @@ localrules: rule cluster_networks: input: expand( - resources("networks/elec_s{simpl}_{clusters}.nc"), - **config["scenario"], - run=config["run"]["name"], - ), - - -rule extra_components_networks: - input: - expand( - resources("networks/elec_s{simpl}_{clusters}_ec.nc"), + resources("networks/base_s_{clusters}.nc"), **config["scenario"], run=config["run"]["name"], ), @@ -34,7 +24,7 @@ rule extra_components_networks: rule prepare_elec_networks: input: expand( - resources("networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc"), + resources("networks/base_s_{clusters}_elec_l{ll}_{opts}.nc"), **config["scenario"], run=config["run"]["name"], ), @@ -44,7 +34,7 @@ rule prepare_sector_networks: input: expand( RESULTS - + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", **config["scenario"], run=config["run"]["name"], ), @@ -53,7 +43,7 @@ rule prepare_sector_networks: rule solve_elec_networks: input: expand( - RESULTS + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", + RESULTS + "networks/base_s_{clusters}_elec_l{ll}_{opts}.nc", **config["scenario"], run=config["run"]["name"], ), @@ -63,7 +53,7 @@ rule solve_sector_networks: input: expand( RESULTS - + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", **config["scenario"], run=config["run"]["name"], ), @@ -73,7 +63,7 @@ rule solve_sector_networks_perfect: input: expand( RESULTS - + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", + + "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", **config["scenario"], run=config["run"]["name"], ), @@ -82,14 +72,13 @@ rule solve_sector_networks_perfect: rule validate_elec_networks: input: expand( - RESULTS - + "figures/.statistics_plots_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}", + RESULTS + "figures/.statistics_plots_base_s_{clusters}_elec_l{ll}_{opts}", **config["scenario"], run=config["run"]["name"], ), expand( RESULTS - + "figures/.validation_{kind}_plots_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}", + + "figures/.validation_{kind}_plots_base_s_{clusters}_elec_l{ll}_{opts}", **config["scenario"], run=config["run"]["name"], kind=["production", "prices", "cross_border"], diff --git a/rules/common.smk b/rules/common.smk index 203fb9c0..332103f2 100644 --- a/rules/common.smk +++ b/rules/common.smk @@ -98,9 +98,7 @@ def memory(w): if m is not None: factor *= int(m.group(1)) / 8760 break - if w.clusters.endswith("m") or w.clusters.endswith("c"): - return int(factor * (55000 + 600 * int(w.clusters[:-1]))) - elif w.clusters == "all": + if w.clusters == "all": return int(factor * (18000 + 180 * 4000)) else: return int(factor * (10000 + 195 * int(w.clusters))) @@ -144,7 +142,7 @@ def solved_previous_horizon(w): return ( RESULTS - + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_" + + "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_" + planning_horizon_p + ".nc" ) diff --git a/rules/postprocess.smk b/rules/postprocess.smk index edeff1ef..24a7ac34 100644 --- a/rules/postprocess.smk +++ b/rules/postprocess.smk @@ -9,17 +9,15 @@ if config["foresight"] != "perfect": params: plotting=config_provider("plotting"), input: - network=resources("networks/elec_s{simpl}_{clusters}.nc"), - regions_onshore=resources( - "regions_onshore_elec_s{simpl}_{clusters}.geojson" - ), + network=resources("networks/base_s_{clusters}.nc"), + regions_onshore=resources("regions_onshore_base_s_{clusters}.geojson"), output: - map=resources("maps/power-network-s{simpl}-{clusters}.pdf"), + map=resources("maps/power-network-s-{clusters}.pdf"), threads: 1 resources: mem_mb=4000, benchmark: - benchmarks("plot_power_network_clustered/elec_s{simpl}_{clusters}") + benchmarks("plot_power_network_clustered/base_s_{clusters}") conda: "../envs/environment.yaml" script: @@ -30,21 +28,21 @@ if config["foresight"] != "perfect": plotting=config_provider("plotting"), input: network=RESULTS - + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", - regions=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + + "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + regions=resources("regions_onshore_base_s_{clusters}.geojson"), output: map=RESULTS - + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", + + "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", threads: 2 resources: mem_mb=10000, log: RESULTS - + "logs/plot_power_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/plot_power_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/plot_power_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/plot_power_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -57,21 +55,21 @@ if config["foresight"] != "perfect": foresight=config_provider("foresight"), input: network=RESULTS - + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", - regions=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + + "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + regions=resources("regions_onshore_base_s_{clusters}.geojson"), output: map=RESULTS - + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf", + + "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf", threads: 2 resources: mem_mb=10000, log: RESULTS - + "logs/plot_hydrogen_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/plot_hydrogen_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/plot_hydrogen_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/plot_hydrogen_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -83,21 +81,21 @@ if config["foresight"] != "perfect": plotting=config_provider("plotting"), input: network=RESULTS - + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", - regions=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + + "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + regions=resources("regions_onshore_base_s_{clusters}.geojson"), output: map=RESULTS - + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-ch4_network_{planning_horizons}.pdf", + + "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-ch4_network_{planning_horizons}.pdf", threads: 2 resources: mem_mb=10000, log: RESULTS - + "logs/plot_gas_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/plot_gas_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/plot_gas_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/plot_gas_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -110,7 +108,7 @@ if config["foresight"] == "perfect": def output_map_year(w): return { f"map_{year}": RESULTS - + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_" + + "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_" + f"{year}.pdf" for year in config_provider("scenario", "planning_horizons")(w) } @@ -120,8 +118,8 @@ if config["foresight"] == "perfect": plotting=config_provider("plotting"), input: network=RESULTS - + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc", - regions=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"), + + "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc", + regions=resources("regions_onshore_base_s_{clusters}.geojson"), output: unpack(output_map_year), threads: 2 @@ -144,7 +142,7 @@ rule make_summary: input: networks=expand( RESULTS - + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", **config["scenario"], allow_missing=True, ), @@ -158,20 +156,20 @@ rule make_summary: ) ), ac_plot=expand( - resources("maps/power-network-s{simpl}-{clusters}.pdf"), + resources("maps/power-network-s-{clusters}.pdf"), **config["scenario"], allow_missing=True, ), costs_plot=expand( RESULTS - + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", + + "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-costs-all_{planning_horizons}.pdf", **config["scenario"], allow_missing=True, ), h2_plot=lambda w: expand( ( RESULTS - + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf" + + "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-h2_network_{planning_horizons}.pdf" if config_provider("sector", "H2_network")(w) else [] ), @@ -181,7 +179,7 @@ rule make_summary: ch4_plot=lambda w: expand( ( RESULTS - + "maps/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}-ch4_network_{planning_horizons}.pdf" + + "maps/base_s_{clusters}_l{ll}_{opts}_{sector_opts}-ch4_network_{planning_horizons}.pdf" if config_provider("sector", "gas_network")(w) else [] ), @@ -260,19 +258,19 @@ STATISTICS_BARPLOTS = [ ] -rule plot_elec_statistics: +rule plot_base_statistics: params: plotting=config_provider("plotting"), barplots=STATISTICS_BARPLOTS, input: - network=RESULTS + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", + network=RESULTS + "networks/base_s_{clusters}_elec_l{ll}_{opts}.nc", output: **{ f"{plot}_bar": RESULTS - + f"figures/statistics_{plot}_bar_elec_s{{simpl}}_{{clusters}}_ec_l{{ll}}_{{opts}}.pdf" + + f"figures/statistics_{plot}_bar_base_s_{{clusters}}_elec_l{{ll}}_{{opts}}.pdf" for plot in STATISTICS_BARPLOTS }, barplots_touch=RESULTS - + "figures/.statistics_plots_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}", + + "figures/.statistics_plots_base_s_{clusters}_elec_l{ll}_{opts}", script: "../scripts/plot_statistics.py" diff --git a/rules/solve_electricity.smk b/rules/solve_electricity.smk index e2dbe42e..204286a3 100644 --- a/rules/solve_electricity.smk +++ b/rules/solve_electricity.smk @@ -13,19 +13,19 @@ rule solve_network: ), custom_extra_functionality=input_custom_extra_functionality, input: - network=resources("networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc"), + network=resources("networks/base_s_{clusters}_elec_l{ll}_{opts}.nc"), output: - network=RESULTS + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", - config=RESULTS + "configs/config.elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.yaml", + network=RESULTS + "networks/base_s_{clusters}_elec_l{ll}_{opts}.nc", + config=RESULTS + "configs/config.base_s_{clusters}_elec_l{ll}_{opts}.yaml", log: solver=normpath( RESULTS - + "logs/solve_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_solver.log" + + "logs/solve_network/base_s_{clusters}_elec_l{ll}_{opts}_solver.log" ), python=RESULTS - + "logs/solve_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_python.log", + + "logs/solve_network/base_s_{clusters}_elec_l{ll}_{opts}_python.log", benchmark: - (RESULTS + "benchmarks/solve_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}") + (RESULTS + "benchmarks/solve_network/base_s_{clusters}_elec_l{ll}_{opts}") threads: solver_threads resources: mem_mb=memory, @@ -49,20 +49,20 @@ rule solve_operations_network: ), custom_extra_functionality=input_custom_extra_functionality, input: - network=RESULTS + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", + network=RESULTS + "networks/base_s_{clusters}_elec_l{ll}_{opts}.nc", output: - network=RESULTS + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_op.nc", + network=RESULTS + "networks/base_s_{clusters}_elec_l{ll}_{opts}_op.nc", log: solver=normpath( RESULTS - + "logs/solve_operations_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_op_solver.log" + + "logs/solve_operations_network/base_s_{clusters}_elec_l{ll}_{opts}_op_solver.log" ), python=RESULTS - + "logs/solve_operations_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}_op_python.log", + + "logs/solve_operations_network/base_s_{clusters}_elec_l{ll}_{opts}_op_python.log", benchmark: ( RESULTS - + "benchmarks/solve_operations_network/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}" + + "benchmarks/solve_operations_network/base_s_{clusters}_elec_l{ll}_{opts}" ) threads: 4 resources: diff --git a/rules/solve_myopic.smk b/rules/solve_myopic.smk index 6340787a..f17959f9 100644 --- a/rules/solve_myopic.smk +++ b/rules/solve_myopic.smk @@ -13,24 +13,24 @@ rule add_existing_baseyear: energy_totals_year=config_provider("energy", "energy_totals_year"), input: network=RESULTS - + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", - powerplants=resources("powerplants.csv"), - busmap_s=resources("busmap_elec_s{simpl}.csv"), - busmap=resources("busmap_elec_s{simpl}_{clusters}.csv"), - clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"), + + "prenetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + powerplants=resources("powerplants_s_{clusters}.csv"), + busmap_s=resources("busmap_base_s.csv"), + busmap=resources("busmap_base_s_{clusters}.csv"), + clustered_pop_layout=resources("pop_layout_base_s_{clusters}.csv"), costs=lambda w: resources( "costs_{}.csv".format( config_provider("scenario", "planning_horizons", 0)(w) ) ), - cop_profiles=resources("cop_profiles_elec_s{simpl}_{clusters}.nc"), + cop_profiles=resources("cop_profiles_base_s_{clusters}.nc"), existing_heating_distribution=resources( - "existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "existing_heating_distribution_base_s_{clusters}_{planning_horizons}.csv" ), heating_efficiencies=resources("heating_efficiencies.csv"), output: RESULTS - + "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks-brownfield/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", wildcard_constraints: # TODO: The first planning_horizon needs to be aligned across scenarios # snakemake does not support passing functions to wildcard_constraints @@ -41,11 +41,11 @@ rule add_existing_baseyear: mem_mb=2000, log: RESULTS - + "logs/add_existing_baseyear_elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/add_existing_baseyear_base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/add_existing_baseyear/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/add_existing_baseyear/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -55,7 +55,7 @@ rule add_existing_baseyear: def input_profile_tech_brownfield(w): return { - f"profile_{tech}": resources(f"profile_{tech}.nc") + f"profile_{tech}": resources("profile_{clusters}_" + tech + ".nc") for tech in config_provider("electricity", "renewable_carriers")(w) if tech != "hydro" } @@ -74,26 +74,26 @@ rule add_brownfield: heat_pump_sources=config_provider("sector", "heat_pump_sources"), input: unpack(input_profile_tech_brownfield), - simplify_busmap=resources("busmap_elec_s{simpl}.csv"), - cluster_busmap=resources("busmap_elec_s{simpl}_{clusters}.csv"), + simplify_busmap=resources("busmap_base_s.csv"), + cluster_busmap=resources("busmap_base_s_{clusters}.csv"), network=RESULTS - + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", network_p=solved_previous_horizon, #solved network at previous time step costs=resources("costs_{planning_horizons}.csv"), - cop_profiles=resources("cop_profiles_elec_s{simpl}_{clusters}.nc"), + cop_profiles=resources("cop_profiles_base_s_{clusters}.nc"), output: RESULTS - + "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks-brownfield/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", threads: 4 resources: mem_mb=10000, log: RESULTS - + "logs/add_brownfield_elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", + + "logs/add_brownfield_base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log", benchmark: ( RESULTS - + "benchmarks/add_brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/add_brownfield/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -115,22 +115,22 @@ rule solve_sector_network_myopic: custom_extra_functionality=input_custom_extra_functionality, input: network=RESULTS - + "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks-brownfield/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", costs=resources("costs_{planning_horizons}.csv"), output: network=RESULTS - + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", config=RESULTS - + "configs/config.elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.yaml", + + "configs/config.base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.yaml", shadow: "shallow" log: solver=RESULTS - + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_solver.log", + + "logs/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_solver.log", memory=RESULTS - + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_memory.log", + + "logs/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_memory.log", python=RESULTS - + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_python.log", + + "logs/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_python.log", threads: solver_threads resources: mem_mb=config_provider("solving", "mem_mb"), @@ -138,7 +138,7 @@ rule solve_sector_network_myopic: benchmark: ( RESULTS - + "benchmarks/solve_sector_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/solve_sector_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" diff --git a/rules/solve_overnight.smk b/rules/solve_overnight.smk index 26dee7a6..e8217a5a 100644 --- a/rules/solve_overnight.smk +++ b/rules/solve_overnight.smk @@ -14,21 +14,21 @@ rule solve_sector_network: custom_extra_functionality=input_custom_extra_functionality, input: network=RESULTS - + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", output: network=RESULTS - + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", config=RESULTS - + "configs/config.elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.yaml", + + "configs/config.base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.yaml", shadow: "shallow" log: solver=RESULTS - + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_solver.log", + + "logs/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_solver.log", memory=RESULTS - + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_memory.log", + + "logs/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_memory.log", python=RESULTS - + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_python.log", + + "logs/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}_python.log", threads: solver_threads resources: mem_mb=config_provider("solving", "mem_mb"), @@ -36,7 +36,7 @@ rule solve_sector_network: benchmark: ( RESULTS - + "benchmarks/solve_sector_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + + "benchmarks/solve_sector_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" diff --git a/rules/solve_perfect.smk b/rules/solve_perfect.smk index f1ec9966..6ec9aeb4 100644 --- a/rules/solve_perfect.smk +++ b/rules/solve_perfect.smk @@ -11,25 +11,25 @@ rule add_existing_baseyear: energy_totals_year=config_provider("energy", "energy_totals_year"), input: network=RESULTS - + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", - powerplants=resources("powerplants.csv"), - busmap_s=resources("busmap_elec_s{simpl}.csv"), - busmap=resources("busmap_elec_s{simpl}_{clusters}.csv"), - clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"), + + "prenetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + powerplants=resources("powerplants_s_{clusters}.csv"), + busmap_s=resources("busmap_base_s.csv"), + busmap=resources("busmap_base_s_{clusters}.csv"), + clustered_pop_layout=resources("pop_layout_base_s_{clusters}.csv"), costs=lambda w: resources( "costs_{}.csv".format( config_provider("scenario", "planning_horizons", 0)(w) ) ), - cop_profiles=resources("cop_profiles_elec_s{simpl}_{clusters}.nc"), + cop_profiles=resources("cop_profiles_base_s_{clusters}.nc"), existing_heating_distribution=resources( - "existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.csv" + "existing_heating_distribution_base_s_{clusters}_{planning_horizons}.csv" ), existing_heating="data/existing_infrastructure/existing_heating_raw.csv", heating_efficiencies=resources("heating_efficiencies.csv"), output: RESULTS - + "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", + + "prenetworks-brownfield/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.nc", wildcard_constraints: planning_horizons=config["scenario"]["planning_horizons"][0], #only applies to baseyear threads: 1 @@ -38,11 +38,11 @@ rule add_existing_baseyear: runtime=config_provider("solving", "runtime", default="24h"), log: logs( - "add_existing_baseyear_elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log" + "add_existing_baseyear_base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}.log" ), benchmark: benchmarks( - "add_existing_baseyear/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" + "add_existing_baseyear/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_{planning_horizons}" ) conda: "../envs/environment.yaml" @@ -53,7 +53,7 @@ rule add_existing_baseyear: def input_network_year(w): return { f"network_{year}": RESULTS - + "prenetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}" + + "prenetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}" + f"_{year}.nc" for year in config_provider("scenario", "planning_horizons")(w)[1:] } @@ -68,25 +68,21 @@ rule prepare_perfect_foresight: brownfield_network=lambda w: ( RESULTS + "prenetworks-brownfield/" - + "elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_" + + "base_s_{clusters}_l{ll}_{opts}_{sector_opts}_" + "{}.nc".format( str(config_provider("scenario", "planning_horizons", 0)(w)) ) ), output: RESULTS - + "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc", + + "prenetworks-brownfield/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc", threads: 2 resources: mem_mb=10000, log: - logs( - "prepare_perfect_foresight{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}.log" - ), + logs("prepare_perfect_foresight_{clusters}_l{ll}_{opts}_{sector_opts}.log"), benchmark: - benchmarks( - "prepare_perfect_foresight{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}" - ) + benchmarks("prepare_perfect_foresight_{clusters}_l{ll}_{opts}_{sector_opts}") conda: "../envs/environment.yaml" script: @@ -105,13 +101,13 @@ rule solve_sector_network_perfect: custom_extra_functionality=input_custom_extra_functionality, input: network=RESULTS - + "prenetworks-brownfield/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc", + + "prenetworks-brownfield/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc", costs=resources("costs_2030.csv"), output: network=RESULTS - + "postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc", + + "postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc", config=RESULTS - + "configs/config.elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.yaml", + + "configs/config.base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.yaml", threads: solver_threads resources: mem_mb=config_provider("solving", "mem"), @@ -119,15 +115,15 @@ rule solve_sector_network_perfect: "shallow" log: solver=RESULTS - + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years_solver.log", + + "logs/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years_solver.log", python=RESULTS - + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years_python.log", + + "logs/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years_python.log", memory=RESULTS - + "logs/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years_memory.log", + + "logs/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years_memory.log", benchmark: ( RESULTS - + "benchmarks/solve_sector_network/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years}" + + "benchmarks/solve_sector_network/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years}" ) conda: "../envs/environment.yaml" @@ -137,9 +133,8 @@ rule solve_sector_network_perfect: def input_networks_make_summary_perfect(w): return { - f"networks_{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}": RESULTS - + f"postnetworks/elec_s{simpl}_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc" - for simpl in config_provider("scenario", "simpl")(w) + f"networks_s_{clusters}_l{ll}_{opts}_{sector_opts}": RESULTS + + f"postnetworks/base_s_{clusters}_l{ll}_{opts}_{sector_opts}_brownfield_all_years.nc" for clusters in config_provider("scenario", "clusters")(w) for opts in config_provider("scenario", "opts")(w) for sector_opts in config_provider("scenario", "sector_opts")(w) diff --git a/rules/validate.smk b/rules/validate.smk index 91fe6e91..7bbefc41 100644 --- a/rules/validate.smk +++ b/rules/validate.smk @@ -69,16 +69,16 @@ rule build_electricity_prices: rule plot_validation_electricity_production: input: - network=RESULTS + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", + network=RESULTS + "networks/base_s_{clusters}_elec_l{ll}_{opts}.nc", electricity_production=resources("historical_electricity_production.csv"), output: **{ plot: RESULTS - + f"figures/validation_{plot}_elec_s{{simpl}}_{{clusters}}_ec_l{{ll}}_{{opts}}.pdf" + + f"figures/validation_{plot}_base_s_{{clusters}}_elec_l{{ll}}_{{opts}}.pdf" for plot in PRODUCTION_PLOTS }, plots_touch=RESULTS - + "figures/.validation_production_plots_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}", + + "figures/.validation_production_plots_base_s_{clusters}_elec_l{ll}_{opts}", script: "../scripts/plot_validation_electricity_production.py" @@ -87,31 +87,31 @@ rule plot_validation_cross_border_flows: params: countries=config_provider("countries"), input: - network=RESULTS + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", + network=RESULTS + "networks/base_s_{clusters}_elec_l{ll}_{opts}.nc", cross_border_flows=resources("historical_cross_border_flows.csv"), output: **{ plot: RESULTS - + f"figures/validation_{plot}_elec_s{{simpl}}_{{clusters}}_ec_l{{ll}}_{{opts}}.pdf" + + f"figures/validation_{plot}_base_s_{{clusters}}_elec_l{{ll}}_{{opts}}.pdf" for plot in CROSS_BORDER_PLOTS }, plots_touch=RESULTS - + "figures/.validation_cross_border_plots_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}", + + "figures/.validation_cross_border_plots_base_s_{clusters}_elec_l{ll}_{opts}", script: "../scripts/plot_validation_cross_border_flows.py" rule plot_validation_electricity_prices: input: - network=RESULTS + "networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc", + network=RESULTS + "networks/base_s_{clusters}_elec_l{ll}_{opts}.nc", electricity_prices=resources("historical_electricity_prices.csv"), output: **{ plot: RESULTS - + f"figures/validation_{plot}_elec_s{{simpl}}_{{clusters}}_ec_l{{ll}}_{{opts}}.pdf" + + f"figures/validation_{plot}_base_s_{{clusters}}_elec_l{{ll}}_{{opts}}.pdf" for plot in PRICES_PLOTS }, plots_touch=RESULTS - + "figures/.validation_prices_plots_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}", + + "figures/.validation_prices_plots_base_s_{clusters}_elec_l{ll}_{opts}", script: "../scripts/plot_validation_electricity_prices.py" diff --git a/scripts/add_brownfield.py b/scripts/add_brownfield.py index 72dd1c88..65e55f96 100644 --- a/scripts/add_brownfield.py +++ b/scripts/add_brownfield.py @@ -170,14 +170,6 @@ def adjust_renewable_profiles(n, input_profiles, params, year): using the latest year below or equal to the selected year. """ - # spatial clustering - cluster_busmap = pd.read_csv(snakemake.input.cluster_busmap, index_col=0).squeeze() - simplify_busmap = pd.read_csv( - snakemake.input.simplify_busmap, index_col=0 - ).squeeze() - clustermaps = simplify_busmap.map(cluster_busmap) - clustermaps.index = clustermaps.index.astype(str) - # temporal clustering dr = get_snapshots(params["snapshots"], params["drop_leap_day"]) snapshotmaps = ( @@ -202,11 +194,6 @@ def adjust_renewable_profiles(n, input_profiles, params, year): .transpose("time", "bus") .to_pandas() ) - - # spatial clustering - weight = ds["weight"].sel(year=closest_year).to_pandas() - weight = weight.groupby(clustermaps).transform(normed_or_uniform) - p_max_pu = (p_max_pu * weight).T.groupby(clustermaps).sum().T p_max_pu.columns = p_max_pu.columns + f" {carrier}" # temporal_clustering @@ -222,7 +209,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "add_brownfield", - simpl="", clusters="37", opts="", ll="v1.0", diff --git a/scripts/add_electricity.py b/scripts/add_electricity.py index 6728ea21..82c78a28 100755 --- a/scripts/add_electricity.py +++ b/scripts/add_electricity.py @@ -3,7 +3,8 @@ # # SPDX-License-Identifier: MIT """ -Adds electrical generators and existing hydro storage units to a base network. +Adds existing electrical generators, hydro-electric plants as well as +greenfield and battery and hydrogen storage to the clustered network. Relevant Settings ----------------- @@ -11,19 +12,11 @@ Relevant Settings .. code:: yaml costs: - year: - version: - dicountrate: - emission_prices: + year: version: dicountrate: emission_prices: electricity: - max_hours: - marginal_cost: - capital_cost: - conventional_carriers: - co2limit: - extendable_carriers: - estimate_renewable_capacities: + max_hours: marginal_cost: capital_cost: conventional_carriers: co2limit: + extendable_carriers: estimate_renewable_capacities: load: @@ -31,13 +24,14 @@ Relevant Settings renewable: hydro: - carriers: - hydro_max_hours: - hydro_capital_cost: + carriers: hydro_max_hours: hydro_capital_cost: lines: length_factor: + links: + length_factor: + .. seealso:: Documentation of the configuration file ``config/config.yaml`` at :ref:`costs_cf`, :ref:`electricity_cf`, :ref:`load_cf`, :ref:`renewable_cf`, :ref:`lines_cf` @@ -45,23 +39,31 @@ Relevant Settings 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/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. .. image:: img/hydrocapacities.png :scale: 34 % -- ``resources/electricity_demand.csv`` Hourly per-country electricity demand profiles. -- ``resources/regions_onshore.geojson``: confer :ref:`busregions` +- ``resources/electricity_demand_base_s.nc`` Hourly nodal electricity demand + profiles. +- ``resources/regions_onshore_base_s_{clusters}.geojson``: confer + :ref:`busregions` - ``resources/nuts3_shapes.geojson``: confer :ref:`shapes` -- ``resources/powerplants.csv``: confer :ref:`powerplants` -- ``resources/profile_{}.nc``: all technologies in ``config["renewables"].keys()``, confer :ref:`renewableprofiles`. -- ``networks/base.nc``: confer :ref:`base` +- ``resources/powerplants_s_{clusters}.csv``: confer :ref:`powerplants` +- ``resources/profile_{clusters}_{}.nc``: all technologies in + ``config["renewables"].keys()``, confer :ref:`renewableprofiles`. +- ``networks/base_s_{clusters}.nc`` Outputs ------- -- ``networks/elec.nc``: +- ``networks/base_s_{clusters}_elec.nc``: .. image:: img/elec.png :scale: 33 % @@ -69,29 +71,53 @@ Outputs Description ----------- -The rule :mod:`add_electricity` ties all the different data inputs from the preceding rules together into a detailed PyPSA network that is stored in ``networks/elec.nc``. It includes: +The rule :mod:`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) +- 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``) +- 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. """ import logging -from itertools import product from pathlib import Path from typing import Dict, List -import geopandas as gpd import numpy as np import pandas as pd import powerplantmatching as pm import pypsa -import scipy.sparse as sparse import xarray as xr from _helpers import ( configure_logging, @@ -100,7 +126,7 @@ from _helpers import ( update_p_nom_max, ) from powerplantmatching.export import map_country_bus -from shapely.prepared import prep +from pypsa.clustering.spatial import DEFAULT_ONE_PORT_STRATEGIES, normed_or_uniform idx = pd.IndexSlice @@ -263,7 +289,20 @@ def load_costs(tech_costs, config, max_hours, Nyears=1.0): return costs -def load_powerplants(ppl_fn): +def load_and_aggregate_powerplants( + ppl_fn: str, + costs: pd.DataFrame, + consider_efficiency_classes: bool = False, + aggregation_strategies: dict = None, + exclude_carriers: list = None, +) -> pd.DataFrame: + + if not aggregation_strategies: + aggregation_strategies = {} + + if not exclude_carriers: + exclude_carriers = [] + carrier_dict = { "ocgt": "OCGT", "ccgt": "CCGT", @@ -271,94 +310,120 @@ def load_powerplants(ppl_fn): "ccgt, thermal": "CCGT", "hard coal": "coal", } - return ( + tech_dict = { + "Run-Of-River": "ror", + "Reservoir": "hydro", + "Pumped Storage": "PHS", + } + ppl = ( pd.read_csv(ppl_fn, index_col=0, dtype={"bus": "str"}) .powerplant.to_pypsa_names() .rename(columns=str.lower) - .replace({"carrier": carrier_dict}) + .replace({"carrier": carrier_dict, "technology": tech_dict}) ) + # Replace carriers "natural gas" and "hydro" with the respective technology; + # OCGT or CCGT and hydro, PHS, or ror) + ppl["carrier"] = ppl.carrier.where( + ~ppl.carrier.isin(["hydro", "natural gas"]), ppl.technology + ) -def shapes_to_shapes(orig, dest): - """ - Adopted from vresutils.transfer.Shapes2Shapes() - """ - orig_prepped = list(map(prep, orig)) - transfer = sparse.lil_matrix((len(dest), len(orig)), dtype=float) + cost_columns = [ + "VOM", + "FOM", + "efficiency", + "capital_cost", + "marginal_cost", + "fuel", + "lifetime", + ] + ppl = ppl.join(costs[cost_columns], on="carrier", rsuffix="_r") - for i, j in product(range(len(dest)), range(len(orig))): - if orig_prepped[j].intersects(dest.iloc[i]): - area = orig.iloc[j].intersection(dest.iloc[i]).area - transfer[i, j] = area / dest.iloc[i].area + ppl["efficiency"] = ppl.efficiency.combine_first(ppl.efficiency_r) + ppl["lifetime"] = (ppl.dateout - ppl.datein).fillna(np.inf) + ppl["build_year"] = ppl.datein.fillna(0).astype(int) + ppl["marginal_cost"] = ( + ppl.carrier.map(costs.VOM) + ppl.carrier.map(costs.fuel) / ppl.efficiency + ) - return transfer + strategies = { + **DEFAULT_ONE_PORT_STRATEGIES, + **{"country": "first"}, + **aggregation_strategies.get("generators", {}), + } + strategies = {k: v for k, v in strategies.items() if k in ppl.columns} + + to_aggregate = ~ppl.carrier.isin(exclude_carriers) + df = ppl[to_aggregate].copy() + + if consider_efficiency_classes: + for c in df.carrier.unique(): + df_c = df.query("carrier == @c") + low = df_c.efficiency.quantile(0.10) + high = df_c.efficiency.quantile(0.90) + if low < high: + labels = ["low", "medium", "high"] + suffix = pd.cut( + df_c.efficiency, bins=[0, low, high, 1], labels=labels + ).astype(str) + df.update({"carrier": df_c.carrier + " " + suffix + " efficiency"}) + + grouper = ["bus", "carrier"] + weights = df.groupby(grouper).p_nom.transform(normed_or_uniform) + + for k, v in strategies.items(): + if v == "capacity_weighted_average": + df[k] = df[k] * weights + strategies[k] = pd.Series.sum + + aggregated = df.groupby(grouper, as_index=False).agg(strategies) + aggregated.index = aggregated.bus + " " + aggregated.carrier + aggregated.build_year = aggregated.build_year.astype(int) + + disaggregated = ppl[~to_aggregate][aggregated.columns].copy() + disaggregated.index = ( + disaggregated.bus + + " " + + disaggregated.carrier + + " " + + disaggregated.index.astype(str) + ) + + return pd.concat([aggregated, disaggregated]) def attach_load( - n, regions, load, nuts3_shapes, gdp_pop_non_nuts3, countries, scaling=1.0 -): - substation_lv_i = n.buses.index[n.buses["substation_lv"]] - gdf_regions = gpd.read_file(regions).set_index("name").reindex(substation_lv_i) - opsd_load = pd.read_csv(load, index_col=0, parse_dates=True).filter(items=countries) + n: pypsa.Network, + load_fn: str, + busmap_fn: str, + scaling: float = 1.0, +) -> None: - logger.info(f"Load data scaled by factor {scaling}.") - opsd_load *= scaling - - nuts3 = gpd.read_file(nuts3_shapes).set_index("index") - - def upsample(cntry, group, gdp_pop_non_nuts3): - load = opsd_load[cntry] - - if len(group) == 1: - return pd.DataFrame({group.index[0]: load}) - nuts3_cntry = nuts3.loc[nuts3.country == cntry] - transfer = shapes_to_shapes(group, nuts3_cntry.geometry).T.tocsr() - gdp_n = pd.Series( - transfer.dot(nuts3_cntry["gdp"].fillna(1.0).values), index=group.index - ) - pop_n = pd.Series( - transfer.dot(nuts3_cntry["pop"].fillna(1.0).values), index=group.index - ) - - # relative factors 0.6 and 0.4 have been determined from a linear - # regression on the country to continent load data - factors = normed(0.6 * normed(gdp_n) + 0.4 * normed(pop_n)) - if cntry in ["UA", "MD"]: - # overwrite factor because nuts3 provides no data for UA+MD - gdp_pop_non_nuts3 = gpd.read_file(gdp_pop_non_nuts3).set_index("Bus") - gdp_pop_non_nuts3 = gdp_pop_non_nuts3.loc[ - (gdp_pop_non_nuts3.country == cntry) - & (gdp_pop_non_nuts3.index.isin(substation_lv_i)) - ] - factors = normed( - 0.6 * normed(gdp_pop_non_nuts3["gdp"]) - + 0.4 * normed(gdp_pop_non_nuts3["pop"]) - ) - return pd.DataFrame( - factors.values * load.values[:, np.newaxis], - index=load.index, - columns=factors.index, - ) - - load = pd.concat( - [ - upsample(cntry, group, gdp_pop_non_nuts3) - for cntry, group in gdf_regions.geometry.groupby(gdf_regions.country) - ], - axis=1, + load = ( + xr.open_dataarray(load_fn).to_dataframe().squeeze(axis=1).unstack(level="time") ) - n.madd( - "Load", substation_lv_i, bus=substation_lv_i, p_set=load - ) # carrier="electricity" + # apply clustering busmap + busmap = pd.read_csv(busmap_fn, dtype=str).set_index("Bus").squeeze() + load = load.groupby(busmap).sum().T + + logger.info(f"Load data scaled by factor {scaling}.") + load *= scaling + + n.madd("Load", load.columns, bus=load.columns, p_set=load) # carrier="electricity" -def update_transmission_costs(n, costs, length_factor=1.0): - # TODO: line length factor of lines is applied to lines and links. - # Separate the function to distinguish. +def set_transmission_costs( + n: pypsa.Network, + costs: pd.DataFrame, + line_length_factor: float = 1.0, + link_length_factor: float = 1.0, +) -> None: n.lines["capital_cost"] = ( - n.lines["length"] * length_factor * costs.at["HVAC overhead", "capital_cost"] + n.lines["length"] + * line_length_factor + * costs.at["HVAC overhead", "capital_cost"] ) if n.links.empty: @@ -373,7 +438,7 @@ def update_transmission_costs(n, costs, length_factor=1.0): costs = ( n.links.loc[dc_b, "length"] - * length_factor + * link_length_factor * ( (1.0 - n.links.loc[dc_b, "underwater_fraction"]) * costs.at["HVDC overhead", "capital_cost"] @@ -386,13 +451,25 @@ def update_transmission_costs(n, costs, length_factor=1.0): def attach_wind_and_solar( - n, costs, input_profiles, carriers, extendable_carriers, line_length_factor=1 -): + n: pypsa.Network, + costs: pd.DataFrame, + input_profiles: str, + carriers: list | set, + extendable_carriers: list | set, + line_length_factor: float = 1.0, + landfall_lengths: dict = None, +) -> None: add_missing_carriers(n, carriers) + + if landfall_lengths is None: + landfall_lengths = {} + for car in carriers: if car == "hydro": continue + landfall_length = landfall_lengths.get(car, 0.0) + with xr.open_dataset(getattr(input_profiles, "profile_" + car)) as ds: if ds.indexes["bus"].empty: continue @@ -403,17 +480,15 @@ def attach_wind_and_solar( supcar = car.split("-", 2)[0] if supcar == "offwind": - underwater_fraction = ds["underwater_fraction"].to_pandas() - connection_cost = ( - line_length_factor - * ds["average_distance"].to_pandas() - * ( - underwater_fraction - * costs.at[car + "-connection-submarine", "capital_cost"] - + (1.0 - underwater_fraction) - * costs.at[car + "-connection-underground", "capital_cost"] - ) + distance = ds["average_distance"].to_pandas() + submarine_cost = costs.at[car + "-connection-submarine", "capital_cost"] + underground_cost = costs.at[ + car + "-connection-underground", "capital_cost" + ] + connection_cost = line_length_factor * ( + distance * submarine_cost + landfall_length * underground_cost ) + capital_cost = ( costs.at["offwind", "capital_cost"] + costs.at[car + "-station", "capital_cost"] @@ -435,7 +510,6 @@ def attach_wind_and_solar( carrier=car, p_nom_extendable=car in extendable_carriers["Generator"], p_nom_max=ds["p_nom_max"].to_pandas(), - weight=ds["weight"].to_pandas(), marginal_cost=costs.at[supcar, "marginal_cost"], capital_cost=capital_cost, efficiency=costs.at[supcar, "efficiency"], @@ -457,19 +531,7 @@ def attach_conventional_generators( ): carriers = list(set(conventional_carriers) | set(extendable_carriers["Generator"])) - # Replace carrier "natural gas" with the respective technology (OCGT or - # CCGT) to align with PyPSA names of "carriers" and avoid filtering "natural - # gas" powerplants in ppl.query("carrier in @carriers") - ppl.loc[ppl["carrier"] == "natural gas", "carrier"] = ppl.loc[ - ppl["carrier"] == "natural gas", "technology" - ] - - ppl = ( - ppl.query("carrier in @carriers") - .join(costs, on="carrier", rsuffix="_r") - .rename(index=lambda s: f"C{str(s)}") - ) - ppl["efficiency"] = ppl.efficiency.fillna(ppl.efficiency_r) + ppl = ppl.query("carrier in @carriers") # reduce carriers to those in power plant dataset carriers = list(set(carriers) & set(ppl.carrier.unique())) @@ -496,13 +558,11 @@ def attach_conventional_generators( fuel_price.columns = ppl.index marginal_cost = fuel_price.div(ppl.efficiency).add(ppl.carrier.map(costs.VOM)) else: - marginal_cost = ( - ppl.carrier.map(costs.VOM) + ppl.carrier.map(costs.fuel) / ppl.efficiency - ) + marginal_cost = ppl.marginal_cost # Define generators using modified ppl DataFrame caps = ppl.groupby("carrier").p_nom.sum().div(1e3).round(2) - logger.info(f"Adding {len(ppl)} generators with capacities [GW] \n{caps}") + logger.info(f"Adding {len(ppl)} generators with capacities [GW]pp \n{caps}") n.madd( "Generator", @@ -515,8 +575,8 @@ def attach_conventional_generators( efficiency=ppl.efficiency, marginal_cost=marginal_cost, capital_cost=ppl.capital_cost, - build_year=ppl.datein.fillna(0).astype(int), - lifetime=(ppl.dateout - ppl.datein).fillna(np.inf), + build_year=ppl.build_year, + lifetime=ppl.lifetime, **committable_attrs, ) @@ -546,14 +606,9 @@ def attach_hydro(n, costs, ppl, profile_hydro, hydro_capacities, carriers, **par add_missing_carriers(n, carriers) add_co2_emissions(n, costs, carriers) - ppl = ( - ppl.query('carrier == "hydro"') - .reset_index(drop=True) - .rename(index=lambda s: f"{str(s)} hydro") - ) - ror = ppl.query('technology == "Run-Of-River"') - phs = ppl.query('technology == "Pumped Storage"') - hydro = ppl.query('technology == "Reservoir"') + ror = ppl.query('carrier == "ror"') + phs = ppl.query('carrier == "PHS"') + hydro = ppl.query('carrier == "hydro"') country = ppl["bus"].map(n.buses.country).rename("country") @@ -618,7 +673,7 @@ def attach_hydro(n, costs, ppl, profile_hydro, hydro_capacities, carriers, **par if "hydro" in carriers and not hydro.empty: hydro_max_hours = params.get("hydro_max_hours") - assert hydro_max_hours is not None, "No path for hydro capacities given." + assert hydro_capacities is not None, "No path for hydro capacities given." hydro_stats = pd.read_csv( hydro_capacities, comment="#", na_values="-", index_col=0 @@ -626,7 +681,13 @@ def attach_hydro(n, costs, ppl, profile_hydro, hydro_capacities, carriers, **par e_target = hydro_stats["E_store[TWh]"].clip(lower=0.2) * 1e6 e_installed = hydro.eval("p_nom * max_hours").groupby(hydro.country).sum() e_missing = e_target - e_installed - missing_mh_i = hydro.query("max_hours.isnull()").index + missing_mh_i = hydro.query("max_hours.isnull() or max_hours == 0").index + # some countries may have missing storage capacity but only one plant + # which needs to be scaled to the target storage capacity + missing_mh_single_i = hydro.index[ + ~hydro.country.duplicated() & hydro.country.isin(e_missing.dropna().index) + ] + missing_mh_i = missing_mh_i.union(missing_mh_single_i) if hydro_max_hours == "energy_capacity_totals_by_country": # watch out some p_nom values like IE's are totally underrepresented @@ -649,7 +710,8 @@ def attach_hydro(n, costs, ppl, profile_hydro, hydro_capacities, carriers, **par f'Assuming max_hours=6 for hydro reservoirs in the countries: {", ".join(missing_countries)}' ) hydro_max_hours = hydro.max_hours.where( - hydro.max_hours > 0, hydro.country.map(max_hours_country) + (hydro.max_hours > 0) & ~hydro.index.isin(missing_mh_single_i), + hydro.country.map(max_hours_country), ).fillna(6) if params.get("flatten_dispatch", False): @@ -775,64 +837,144 @@ def estimate_renewable_capacities( ) -def attach_line_rating( - n, rating, s_max_pu, correction_factor, max_voltage_difference, max_line_rating -): - # TODO: Only considers overhead lines - n.lines_t.s_max_pu = (rating / n.lines.s_nom[rating.columns]) * correction_factor - if max_voltage_difference: - x_pu = ( - n.lines.type.map(n.line_types["x_per_length"]) - * n.lines.length - / (n.lines.v_nom**2) +def attach_storageunits(n, costs, extendable_carriers, max_hours): + carriers = extendable_carriers["StorageUnit"] + + n.madd("Carrier", carriers) + + buses_i = n.buses.index + + lookup_store = {"H2": "electrolysis", "battery": "battery inverter"} + lookup_dispatch = {"H2": "fuel cell", "battery": "battery inverter"} + + for carrier in carriers: + roundtrip_correction = 0.5 if carrier == "battery" else 1 + + n.madd( + "StorageUnit", + buses_i, + " " + carrier, + bus=buses_i, + carrier=carrier, + p_nom_extendable=True, + capital_cost=costs.at[carrier, "capital_cost"], + marginal_cost=costs.at[carrier, "marginal_cost"], + efficiency_store=costs.at[lookup_store[carrier], "efficiency"] + ** roundtrip_correction, + efficiency_dispatch=costs.at[lookup_dispatch[carrier], "efficiency"] + ** roundtrip_correction, + max_hours=max_hours[carrier], + cyclic_state_of_charge=True, ) - # need to clip here as cap values might be below 1 - # -> would mean the line cannot be operated at actual given pessimistic ampacity - s_max_pu_cap = ( - np.deg2rad(max_voltage_difference) / (x_pu * n.lines.s_nom) - ).clip(lower=1) - n.lines_t.s_max_pu = n.lines_t.s_max_pu.clip( - lower=1, upper=s_max_pu_cap, axis=1 - ) - if max_line_rating: - n.lines_t.s_max_pu = n.lines_t.s_max_pu.clip(upper=max_line_rating) - n.lines_t.s_max_pu *= s_max_pu -def add_transmission_projects(n, transmission_projects): - logger.info(f"Adding transmission projects to network.") - for path in transmission_projects: - path = Path(path) - df = pd.read_csv(path, index_col=0, dtype={"bus0": str, "bus1": str}) - if df.empty: - continue - if "new_buses" in path.name: - n.madd("Bus", df.index, **df) - elif "new_lines" in path.name: - n.madd("Line", df.index, **df) - elif "new_links" in path.name: - n.madd("Link", df.index, **df) - elif "adjust_lines": - n.lines.update(df) - elif "adjust_links": - n.links.update(df) +def attach_stores(n, costs, extendable_carriers): + carriers = extendable_carriers["Store"] + + n.madd("Carrier", carriers) + + buses_i = n.buses.index + + if "H2" in carriers: + h2_buses_i = n.madd("Bus", buses_i + " H2", carrier="H2", location=buses_i) + + n.madd( + "Store", + h2_buses_i, + bus=h2_buses_i, + carrier="H2", + e_nom_extendable=True, + e_cyclic=True, + capital_cost=costs.at["hydrogen storage underground", "capital_cost"], + ) + + n.madd( + "Link", + h2_buses_i + " Electrolysis", + bus0=buses_i, + bus1=h2_buses_i, + carrier="H2 electrolysis", + p_nom_extendable=True, + efficiency=costs.at["electrolysis", "efficiency"], + capital_cost=costs.at["electrolysis", "capital_cost"], + marginal_cost=costs.at["electrolysis", "marginal_cost"], + ) + + n.madd( + "Link", + h2_buses_i + " Fuel Cell", + bus0=h2_buses_i, + bus1=buses_i, + carrier="H2 fuel cell", + p_nom_extendable=True, + efficiency=costs.at["fuel cell", "efficiency"], + # NB: fixed cost is per MWel + capital_cost=costs.at["fuel cell", "capital_cost"] + * costs.at["fuel cell", "efficiency"], + marginal_cost=costs.at["fuel cell", "marginal_cost"], + ) + + if "battery" in carriers: + b_buses_i = n.madd( + "Bus", buses_i + " battery", carrier="battery", location=buses_i + ) + + n.madd( + "Store", + b_buses_i, + bus=b_buses_i, + carrier="battery", + e_cyclic=True, + e_nom_extendable=True, + capital_cost=costs.at["battery storage", "capital_cost"], + marginal_cost=costs.at["battery", "marginal_cost"], + ) + + n.madd("Carrier", ["battery charger", "battery discharger"]) + + n.madd( + "Link", + b_buses_i + " charger", + bus0=buses_i, + bus1=b_buses_i, + carrier="battery charger", + # the efficiencies are "round trip efficiencies" + efficiency=costs.at["battery inverter", "efficiency"] ** 0.5, + capital_cost=costs.at["battery inverter", "capital_cost"], + p_nom_extendable=True, + marginal_cost=costs.at["battery inverter", "marginal_cost"], + ) + + n.madd( + "Link", + b_buses_i + " discharger", + bus0=b_buses_i, + bus1=buses_i, + carrier="battery discharger", + efficiency=costs.at["battery inverter", "efficiency"] ** 0.5, + p_nom_extendable=True, + marginal_cost=costs.at["battery inverter", "marginal_cost"], + ) if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("add_electricity") + snakemake = mock_snakemake("add_electricity", clusters=100) configure_logging(snakemake) set_scenario_config(snakemake) params = snakemake.params + max_hours = params.electricity["max_hours"] + landfall_lengths = { + tech: settings["landfall_length"] + for tech, settings in params.renewable.items() + if "landfall_length" in settings.keys() + } n = pypsa.Network(snakemake.input.base_network) - if params["transmission_projects"]["enable"]: - add_transmission_projects(n, snakemake.input.transmission_projects) - time = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day) n.set_snapshots(time) @@ -841,22 +983,31 @@ if __name__ == "__main__": costs = load_costs( snakemake.input.tech_costs, params.costs, - params.electricity["max_hours"], + max_hours, Nyears, ) - ppl = load_powerplants(snakemake.input.powerplants) + + ppl = load_and_aggregate_powerplants( + snakemake.input.powerplants, + costs, + params.consider_efficiency_classes, + params.aggregation_strategies, + params.exclude_carriers, + ) attach_load( n, - snakemake.input.regions, snakemake.input.load, - snakemake.input.nuts3_shapes, - snakemake.input.get("gdp_pop_non_nuts3"), - params.countries, + snakemake.input.busmap, params.scaling_factor, ) - update_transmission_costs(n, costs, params.length_factor) + set_transmission_costs( + n, + costs, + params.line_length_factor, + params.link_length_factor, + ) renewable_carriers = set(params.electricity["renewable_carriers"]) extendable_carriers = params.electricity["extendable_carriers"] @@ -896,7 +1047,8 @@ if __name__ == "__main__": snakemake.input, renewable_carriers, extendable_carriers, - params.length_factor, + params.line_length_factor, + landfall_lengths, ) if "hydro" in renewable_carriers: @@ -933,24 +1085,12 @@ if __name__ == "__main__": update_p_nom_max(n) - line_rating_config = snakemake.config["lines"]["dynamic_line_rating"] - if line_rating_config["activate"]: - rating = xr.open_dataarray(snakemake.input.line_rating).to_pandas().transpose() - s_max_pu = snakemake.config["lines"]["s_max_pu"] - correction_factor = line_rating_config["correction_factor"] - max_voltage_difference = line_rating_config["max_voltage_difference"] - max_line_rating = line_rating_config["max_line_rating"] - - attach_line_rating( - n, - rating, - s_max_pu, - correction_factor, - max_voltage_difference, - max_line_rating, - ) + attach_storageunits(n, costs, extendable_carriers, max_hours) + attach_stores(n, costs, extendable_carriers) sanitize_carriers(n, snakemake.config) + if "location" in n.buses: + sanitize_locations(n) - n.meta = snakemake.config + n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards))) n.export_to_netcdf(snakemake.output[0]) diff --git a/scripts/add_existing_baseyear.py b/scripts/add_existing_baseyear.py index 7eff0e2e..2cd16090 100644 --- a/scripts/add_existing_baseyear.py +++ b/scripts/add_existing_baseyear.py @@ -120,7 +120,7 @@ def add_existing_renewables(df_agg, costs): df_agg.at[name, "DateOut"] = ( year + costs.at[cost_key, "lifetime"] - 1 ) - df_agg.at[name, "cluster_bus"] = node + df_agg.at[name, "bus"] = node def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, baseyear): @@ -135,7 +135,8 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas baseyear : int """ logger.debug( - f"Adding power capacities installed before {baseyear} from powerplants.csv" + f"Adding power capacities installed before {baseyear} from" + " powerplants_s_{clusters}.csv" ) df_agg = pd.read_csv(snakemake.input.powerplants, index_col=0) @@ -184,19 +185,6 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas ) df_agg.loc[biomass_i, "DateOut"] = df_agg.loc[biomass_i, "DateOut"].fillna(dateout) - # assign clustered bus - busmap_s = pd.read_csv(snakemake.input.busmap_s, index_col=0).squeeze() - busmap = pd.read_csv(snakemake.input.busmap, index_col=0).squeeze() - - inv_busmap = {} - for k, v in busmap.items(): - inv_busmap[v] = inv_busmap.get(v, []) + [k] - - clustermaps = busmap_s.map(busmap) - clustermaps.index = clustermaps.index.astype(int) - - df_agg["cluster_bus"] = df_agg.bus.map(clustermaps) - # include renewables in df_agg add_existing_renewables(df_agg, costs) @@ -225,14 +213,14 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas df = df_agg.pivot_table( index=["grouping_year", "Fueltype"], - columns="cluster_bus", + columns="bus", values="Capacity", aggfunc="sum", ) lifetime = df_agg.pivot_table( index=["grouping_year", "Fueltype"], - columns="cluster_bus", + columns="bus", values="lifetime", aggfunc="mean", # currently taken mean for clustering lifetimes ) @@ -280,54 +268,23 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas ] = capacity.loc[already_build.str.replace(name_suffix, "")].values new_capacity = capacity.loc[new_build.str.replace(name_suffix, "")] - if "m" in snakemake.wildcards.clusters: - for ind in new_capacity.index: - # existing capacities are split evenly among regions in every country - inv_ind = list(inv_busmap[ind]) + p_max_pu = n.generators_t.p_max_pu[capacity.index + name_suffix_by] - # for offshore the splitting only includes coastal regions - inv_ind = [ - i for i in inv_ind if (i + name_suffix_by) in n.generators.index - ] - - p_max_pu = n.generators_t.p_max_pu[ - [i + name_suffix_by for i in inv_ind] - ] - p_max_pu.columns = [i + name_suffix for i in inv_ind] - - n.madd( - "Generator", - [i + name_suffix for i in inv_ind], - bus=ind, - carrier=generator, - p_nom=new_capacity[ind] - / len(inv_ind), # split among regions in a country - marginal_cost=marginal_cost, - capital_cost=capital_cost, - efficiency=costs.at[cost_key, "efficiency"], - p_max_pu=p_max_pu, - build_year=grouping_year, - lifetime=costs.at[cost_key, "lifetime"], - ) - - else: - p_max_pu = n.generators_t.p_max_pu[capacity.index + name_suffix_by] - - if not new_build.empty: - n.madd( - "Generator", - new_capacity.index, - suffix=name_suffix, - bus=new_capacity.index, - carrier=generator, - p_nom=new_capacity, - marginal_cost=marginal_cost, - capital_cost=capital_cost, - efficiency=costs.at[cost_key, "efficiency"], - p_max_pu=p_max_pu.rename(columns=n.generators.bus), - build_year=grouping_year, - lifetime=costs.at[cost_key, "lifetime"], - ) + if not new_build.empty: + n.madd( + "Generator", + new_capacity.index, + suffix=name_suffix, + bus=new_capacity.index, + carrier=generator, + p_nom=new_capacity, + marginal_cost=marginal_cost, + capital_cost=capital_cost, + efficiency=costs.at[cost_key, "efficiency"], + p_max_pu=p_max_pu.rename(columns=n.generators.bus), + build_year=grouping_year, + lifetime=costs.at[cost_key, "lifetime"], + ) else: bus0 = vars(spatial)[carrier[generator]].nodes @@ -690,7 +647,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "add_existing_baseyear", configfiles="config/test/config.myopic.yaml", - simpl="", clusters="5", ll="v1.5", opts="", diff --git a/scripts/add_extra_components.py b/scripts/add_extra_components.py deleted file mode 100644 index 90e7eaec..00000000 --- a/scripts/add_extra_components.py +++ /dev/null @@ -1,253 +0,0 @@ -# -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors -# -# SPDX-License-Identifier: MIT - -# coding: utf-8 -""" -Adds extra extendable components to the clustered and simplified network. - -Relevant Settings ------------------ - -.. code:: yaml - - costs: - year: - version: - dicountrate: - emission_prices: - - electricity: - max_hours: - marginal_cost: - capital_cost: - extendable_carriers: - StorageUnit: - Store: - -.. seealso:: - Documentation of the configuration file ``config/config.yaml`` at :ref:`costs_cf`, - :ref:`electricity_cf` - -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. - -Outputs -------- - -- ``networks/elec_s{simpl}_{clusters}_ec.nc``: - - -Description ------------ - -The rule :mod:`add_extra_components` attaches additional extendable components to the clustered and simplified network. These can be configured in the ``config/config.yaml`` at ``electricity: extendable_carriers:``. It processes ``networks/elec_s{simpl}_{clusters}.nc`` to build ``networks/elec_s{simpl}_{clusters}_ec.nc``, which in contrast to the former (depending on the configuration) contain 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. -""" -import logging - -import numpy as np -import pandas as pd -import pypsa -from _helpers import configure_logging, set_scenario_config -from add_electricity import load_costs, sanitize_carriers, sanitize_locations - -idx = pd.IndexSlice - -logger = logging.getLogger(__name__) - - -def attach_storageunits(n, costs, extendable_carriers, max_hours): - carriers = extendable_carriers["StorageUnit"] - - n.madd("Carrier", carriers) - - buses_i = n.buses.index - - lookup_store = {"H2": "electrolysis", "battery": "battery inverter"} - lookup_dispatch = {"H2": "fuel cell", "battery": "battery inverter"} - - for carrier in carriers: - roundtrip_correction = 0.5 if carrier == "battery" else 1 - - n.madd( - "StorageUnit", - buses_i, - " " + carrier, - bus=buses_i, - carrier=carrier, - p_nom_extendable=True, - capital_cost=costs.at[carrier, "capital_cost"], - marginal_cost=costs.at[carrier, "marginal_cost"], - efficiency_store=costs.at[lookup_store[carrier], "efficiency"] - ** roundtrip_correction, - efficiency_dispatch=costs.at[lookup_dispatch[carrier], "efficiency"] - ** roundtrip_correction, - max_hours=max_hours[carrier], - cyclic_state_of_charge=True, - ) - - -def attach_stores(n, costs, extendable_carriers): - carriers = extendable_carriers["Store"] - - n.madd("Carrier", carriers) - - buses_i = n.buses.index - - if "H2" in carriers: - h2_buses_i = n.madd("Bus", buses_i + " H2", carrier="H2", location=buses_i) - - n.madd( - "Store", - h2_buses_i, - bus=h2_buses_i, - carrier="H2", - e_nom_extendable=True, - e_cyclic=True, - capital_cost=costs.at["hydrogen storage underground", "capital_cost"], - ) - - n.madd( - "Link", - h2_buses_i + " Electrolysis", - bus0=buses_i, - bus1=h2_buses_i, - carrier="H2 electrolysis", - p_nom_extendable=True, - efficiency=costs.at["electrolysis", "efficiency"], - capital_cost=costs.at["electrolysis", "capital_cost"], - marginal_cost=costs.at["electrolysis", "marginal_cost"], - ) - - n.madd( - "Link", - h2_buses_i + " Fuel Cell", - bus0=h2_buses_i, - bus1=buses_i, - carrier="H2 fuel cell", - p_nom_extendable=True, - efficiency=costs.at["fuel cell", "efficiency"], - # NB: fixed cost is per MWel - capital_cost=costs.at["fuel cell", "capital_cost"] - * costs.at["fuel cell", "efficiency"], - marginal_cost=costs.at["fuel cell", "marginal_cost"], - ) - - if "battery" in carriers: - b_buses_i = n.madd( - "Bus", buses_i + " battery", carrier="battery", location=buses_i - ) - - n.madd( - "Store", - b_buses_i, - bus=b_buses_i, - carrier="battery", - e_cyclic=True, - e_nom_extendable=True, - capital_cost=costs.at["battery storage", "capital_cost"], - marginal_cost=costs.at["battery", "marginal_cost"], - ) - - n.madd("Carrier", ["battery charger", "battery discharger"]) - - n.madd( - "Link", - b_buses_i + " charger", - bus0=buses_i, - bus1=b_buses_i, - carrier="battery charger", - # the efficiencies are "round trip efficiencies" - efficiency=costs.at["battery inverter", "efficiency"] ** 0.5, - capital_cost=costs.at["battery inverter", "capital_cost"], - p_nom_extendable=True, - marginal_cost=costs.at["battery inverter", "marginal_cost"], - ) - - n.madd( - "Link", - b_buses_i + " discharger", - bus0=b_buses_i, - bus1=buses_i, - carrier="battery discharger", - efficiency=costs.at["battery inverter", "efficiency"] ** 0.5, - p_nom_extendable=True, - marginal_cost=costs.at["battery inverter", "marginal_cost"], - ) - - -def attach_hydrogen_pipelines(n, costs, extendable_carriers): - as_stores = extendable_carriers.get("Store", []) - - if "H2 pipeline" not in extendable_carriers.get("Link", []): - return - - assert "H2" in as_stores, ( - "Attaching hydrogen pipelines requires hydrogen " - "storage to be modelled as Store-Link-Bus combination. See " - "`config.yaml` at `electricity: extendable_carriers: Store:`." - ) - - # determine bus pairs - attrs = ["bus0", "bus1", "length"] - candidates = pd.concat( - [n.lines[attrs], n.links.query('carrier=="DC"')[attrs]] - ).reset_index(drop=True) - - # remove bus pair duplicates regardless of order of bus0 and bus1 - h2_links = candidates[ - ~pd.DataFrame(np.sort(candidates[["bus0", "bus1"]])).duplicated() - ] - h2_links.index = h2_links.apply(lambda c: f"H2 pipeline {c.bus0}-{c.bus1}", axis=1) - - # add pipelines - n.add("Carrier", "H2 pipeline") - - n.madd( - "Link", - h2_links.index, - bus0=h2_links.bus0.values + " H2", - bus1=h2_links.bus1.values + " H2", - p_min_pu=-1, - p_nom_extendable=True, - length=h2_links.length.values, - capital_cost=costs.at["H2 pipeline", "capital_cost"] * h2_links.length, - efficiency=costs.at["H2 pipeline", "efficiency"], - carrier="H2 pipeline", - ) - - -if __name__ == "__main__": - if "snakemake" not in globals(): - from _helpers import mock_snakemake - - snakemake = mock_snakemake("add_extra_components", simpl="", clusters=5) - configure_logging(snakemake) - set_scenario_config(snakemake) - - n = pypsa.Network(snakemake.input.network) - extendable_carriers = snakemake.params.extendable_carriers - max_hours = snakemake.params.max_hours - - Nyears = n.snapshot_weightings.objective.sum() / 8760.0 - costs = load_costs( - snakemake.input.tech_costs, snakemake.params.costs, max_hours, Nyears - ) - - attach_storageunits(n, costs, extendable_carriers, max_hours) - attach_stores(n, costs, extendable_carriers) - attach_hydrogen_pipelines(n, costs, extendable_carriers) - - sanitize_carriers(n, snakemake.config) - if "location" in n.buses: - sanitize_locations(n) - - n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards))) - n.export_to_netcdf(snakemake.output[0]) diff --git a/scripts/add_transmission_projects_and_dlr.py b/scripts/add_transmission_projects_and_dlr.py new file mode 100644 index 00000000..0dad16bb --- /dev/null +++ b/scripts/add_transmission_projects_and_dlr.py @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors +# +# SPDX-License-Identifier: MIT +""" +Add transmission projects and DLR to the network. +""" + +import logging +from pathlib import Path + +import numpy as np +import pandas as pd +import pypsa +import xarray as xr +from _helpers import configure_logging, set_scenario_config + +logger = logging.getLogger(__name__) + + +def attach_transmission_projects( + n: pypsa.Network, transmission_projects: list[str] +) -> None: + logger.info("Adding transmission projects to network.") + for path in transmission_projects: + path = Path(path) + df = pd.read_csv(path, index_col=0, dtype={"bus0": str, "bus1": str}) + if df.empty: + continue + if "new_buses" in path.name: + n.madd("Bus", df.index, **df) + elif "new_lines" in path.name: + n.madd("Line", df.index, **df) + elif "new_links" in path.name: + n.madd("Link", df.index, **df) + elif "adjust_lines" in path.name: + n.lines.update(df) + elif "adjust_links" in path.name: + n.links.update(df) + + +def attach_line_rating( + n: pypsa.Network, + rating: pd.DataFrame, + s_max_pu: float, + correction_factor: float, + max_voltage_difference: float | bool, + max_line_rating: float | bool, +) -> None: + logger.info("Attaching dynamic line rating to network.") + # TODO: Only considers overhead lines + n.lines_t.s_max_pu = (rating / n.lines.s_nom[rating.columns]) * correction_factor + if max_voltage_difference: + x_pu = ( + n.lines.type.map(n.line_types["x_per_length"]) + * n.lines.length + / (n.lines.v_nom**2) + ) + # need to clip here as cap values might be below 1 + # -> would mean the line cannot be operated at actual given pessimistic ampacity + s_max_pu_cap = ( + np.deg2rad(max_voltage_difference) / (x_pu * n.lines.s_nom) + ).clip(lower=1) + n.lines_t.s_max_pu = n.lines_t.s_max_pu.clip( + lower=1, upper=s_max_pu_cap, axis=1 + ) + if max_line_rating: + n.lines_t.s_max_pu = n.lines_t.s_max_pu.clip(upper=max_line_rating) + n.lines_t.s_max_pu *= s_max_pu + + +if __name__ == "__main__": + if "snakemake" not in globals(): + from _helpers import mock_snakemake + + snakemake = mock_snakemake("add_transmission_projects_and_dlr") + configure_logging(snakemake) + set_scenario_config(snakemake) + + params = snakemake.params + + n = pypsa.Network(snakemake.input.network) + + if params["transmission_projects"]["enable"]: + + attach_transmission_projects(n, snakemake.input.transmission_projects) + + if params["dlr"]["activate"]: + + rating = xr.open_dataarray(snakemake.input.dlr).to_pandas().transpose() + + s_max_pu = params["s_max_pu"] + correction_factor = params["dlr"]["correction_factor"] + max_voltage_difference = params["dlr"]["max_voltage_difference"] + max_line_rating = params["dlr"]["max_line_rating"] + + attach_line_rating( + n, + rating, + s_max_pu, + correction_factor, + max_voltage_difference, + max_line_rating, + ) + + n.export_to_netcdf(snakemake.output[0]) diff --git a/scripts/build_biomass_potentials.py b/scripts/build_biomass_potentials.py index bb56ebed..32402eb2 100755 --- a/scripts/build_biomass_potentials.py +++ b/scripts/build_biomass_potentials.py @@ -344,7 +344,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_biomass_potentials", - simpl="", clusters="39", planning_horizons=2050, ) diff --git a/scripts/build_central_heating_temperature_profiles/run.py b/scripts/build_central_heating_temperature_profiles/run.py index feb4ab4f..7a43556b 100644 --- a/scripts/build_central_heating_temperature_profiles/run.py +++ b/scripts/build_central_heating_temperature_profiles/run.py @@ -136,7 +136,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_cop_profiles", - simpl="", clusters=48, ) diff --git a/scripts/build_clustered_population_layouts.py b/scripts/build_clustered_population_layouts.py index 2d9c6acb..01305952 100644 --- a/scripts/build_clustered_population_layouts.py +++ b/scripts/build_clustered_population_layouts.py @@ -17,11 +17,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake( - "build_clustered_population_layouts", - simpl="", - clusters=48, - ) + snakemake = mock_snakemake("build_clustered_population_layouts", clusters=48) set_scenario_config(snakemake) diff --git a/scripts/build_cop_profiles/run.py b/scripts/build_cop_profiles/run.py index d1faf1b1..b93f7df6 100644 --- a/scripts/build_cop_profiles/run.py +++ b/scripts/build_cop_profiles/run.py @@ -104,7 +104,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_cop_profiles", - simpl="", clusters=48, ) diff --git a/scripts/build_daily_heat_demand.py b/scripts/build_daily_heat_demand.py index 97d1368e..6bcb6bd8 100644 --- a/scripts/build_daily_heat_demand.py +++ b/scripts/build_daily_heat_demand.py @@ -27,13 +27,13 @@ Inputs ------ - ``resources//pop_layout_.nc``: Population layout (spatial population distribution). -- ``resources//regions_onshore_elec_s_.geojson``: Onshore region shapes. +- ``resources//regions_onshore_base_s_.geojson``: Onshore region shapes. - ``cutout``: Weather data cutout, as specified in config Outputs ------- -- ``resources/daily_heat_demand__elec_s_.nc``: +- ``resources/daily_heat_demand__base_s_.nc``: Relevant settings ----------------- @@ -58,7 +58,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_daily_heat_demands", scope="total", - simpl="", clusters=48, ) set_scenario_config(snakemake) diff --git a/scripts/build_district_heat_share.py b/scripts/build_district_heat_share.py index 7e8497d6..6d0bdc32 100644 --- a/scripts/build_district_heat_share.py +++ b/scripts/build_district_heat_share.py @@ -44,7 +44,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_district_heat_share", - simpl="", clusters=60, planning_horizons="2050", ) diff --git a/scripts/build_egs_potentials.py b/scripts/build_egs_potentials.py index 65ebab3a..d8023869 100644 --- a/scripts/build_egs_potentials.py +++ b/scripts/build_egs_potentials.py @@ -201,7 +201,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_egs_potentials", - simpl="", clusters=37, ) diff --git a/scripts/build_electricity_demand_base.py b/scripts/build_electricity_demand_base.py new file mode 100644 index 00000000..f48cc1a4 --- /dev/null +++ b/scripts/build_electricity_demand_base.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors +# +# SPDX-License-Identifier: MIT +""" +Builds the electricity demand for base regions based on population and GDP. +""" + +import logging +from itertools import product + +import geopandas as gpd +import numpy as np +import pandas as pd +import pypsa +import scipy.sparse as sparse +import xarray as xr +from _helpers import configure_logging, set_scenario_config +from shapely.prepared import prep + +logger = logging.getLogger(__name__) + + +def normed(s: pd.Series) -> pd.Series: + return s / s.sum() + + +def shapes_to_shapes(orig: gpd.GeoSeries, dest: gpd.GeoSeries) -> sparse.lil_matrix: + """ + Adopted from vresutils.transfer.Shapes2Shapes() + """ + orig_prepped = list(map(prep, orig)) + transfer = sparse.lil_matrix((len(dest), len(orig)), dtype=float) + + for i, j in product(range(len(dest)), range(len(orig))): + if orig_prepped[j].intersects(dest.iloc[i]): + area = orig.iloc[j].intersection(dest.iloc[i]).area + transfer[i, j] = area / dest.iloc[i].area + + return transfer + + +def upsample_load( + n: pypsa.Network, + regions_fn: str, + load_fn: str, + nuts3_fn: str, + gdp_pop_non_nuts3_fn: str, + distribution_key: dict[str, float], +) -> pd.DataFrame: + substation_lv_i = n.buses.index[n.buses["substation_lv"]] + gdf_regions = gpd.read_file(regions_fn).set_index("name").reindex(substation_lv_i) + load = pd.read_csv(load_fn, index_col=0, parse_dates=True) + + nuts3 = gpd.read_file(nuts3_fn).set_index("index") + + gdp_weight = distribution_key.get("gdp", 0.6) + pop_weight = distribution_key.get("pop", 0.4) + + data_arrays = [] + + for cntry, group in gdf_regions.geometry.groupby(gdf_regions.country): + + load_ct = load[cntry] + + if cntry in ["UA", "MD"]: + # separate handling because nuts3 provides no data for UA+MD + gdp_pop_non_nuts3 = gpd.read_file(gdp_pop_non_nuts3_fn).set_index("Bus") + gdp_pop_non_nuts3 = gdp_pop_non_nuts3.loc[ + (gdp_pop_non_nuts3.country == cntry) + & (gdp_pop_non_nuts3.index.isin(substation_lv_i)) + ] + factors = normed( + gdp_weight * normed(gdp_pop_non_nuts3["gdp"]) + + pop_weight * normed(gdp_pop_non_nuts3["pop"]) + ) + + elif len(group) == 1: + factors = pd.Series(1.0, index=group.index) + + else: + nuts3_cntry = nuts3.loc[nuts3.country == cntry] + transfer = shapes_to_shapes(group, nuts3_cntry.geometry).T.tocsr() + gdp_n = pd.Series( + transfer.dot(nuts3_cntry["gdp"].fillna(1.0).values), index=group.index + ) + pop_n = pd.Series( + transfer.dot(nuts3_cntry["pop"].fillna(1.0).values), index=group.index + ) + + factors = normed(gdp_weight * normed(gdp_n) + pop_weight * normed(pop_n)) + + data_arrays.append( + xr.DataArray( + factors.values * load_ct.values[:, np.newaxis], + dims=["time", "bus"], + coords={"time": load_ct.index.values, "bus": factors.index.values}, + ) + ) + + return xr.concat(data_arrays, dim="bus") + + +if __name__ == "__main__": + if "snakemake" not in globals(): + from _helpers import mock_snakemake + + snakemake = mock_snakemake("build_electricity_demand_base") + configure_logging(snakemake) + set_scenario_config(snakemake) + + params = snakemake.params + + n = pypsa.Network(snakemake.input.base_network) + + load = upsample_load( + n, + regions_fn=snakemake.input.regions, + load_fn=snakemake.input.load, + nuts3_fn=snakemake.input.nuts3, + gdp_pop_non_nuts3_fn=snakemake.input.get("gdp_pop_non_nuts3"), + distribution_key=params.distribution_key, + ) + + load.name = "electricity demand (MW)" + comp = dict(zlib=True, complevel=9, least_significant_digit=5) + load.to_netcdf(snakemake.output[0], encoding={load.name: comp}) diff --git a/scripts/build_existing_heating_distribution.py b/scripts/build_existing_heating_distribution.py index d37fcfee..2cc43baf 100644 --- a/scripts/build_existing_heating_distribution.py +++ b/scripts/build_existing_heating_distribution.py @@ -14,11 +14,11 @@ Inputs: - Existing heating generators: `data/existing_heating_raw.csv` per country - Population layout: `resources/{run_name}/pop_layout_s_.csv`. Output of `scripts/build_clustered_population_layout.py` - Population layout with energy demands: `resources//pop_weighted_energy_totals_s_.csv` -- District heating share: `resources//district_heat_share_elec_s__.csv` +- District heating share: `resources//district_heat_share_base_s__.csv` Outputs: -------- -- Existing heat generation capacities distributed to nodes: `resources/{run_name}/existing_heating_distribution_elec_s{simpl}_{clusters}_{planning_horizons}.csv` +- Existing heat generation capacities distributed to nodes: `resources/{run_name}/existing_heating_distribution_base_s_{clusters}_{planning_horizons}.csv` Relevant settings: ------------------ @@ -154,7 +154,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_existing_heating_distribution", - simpl="", clusters=48, planning_horizons=2050, ) diff --git a/scripts/build_gas_input_locations.py b/scripts/build_gas_input_locations.py index 0cd11475..ed36d338 100644 --- a/scripts/build_gas_input_locations.py +++ b/scripts/build_gas_input_locations.py @@ -141,7 +141,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_gas_input_locations", - simpl="", clusters="128", ) diff --git a/scripts/build_gdp_pop_non_nuts3.py b/scripts/build_gdp_pop_non_nuts3.py index d475aec9..2af2517d 100644 --- a/scripts/build_gdp_pop_non_nuts3.py +++ b/scripts/build_gdp_pop_non_nuts3.py @@ -42,11 +42,7 @@ def calc_gdp_pop(country, regions, gdp_non_nuts3, pop_non_nuts3): - gdp: A GeoDataFrame with the mean GDP p.c. values mapped to each bus. - pop: A GeoDataFrame with the summed POP values mapped to each bus. """ - regions = ( - regions.rename(columns={"name": "Bus"}) - .drop(columns=["x", "y"]) - .set_index("Bus") - ) + regions = regions.rename(columns={"name": "Bus"}).set_index("Bus") regions = regions[regions.country == country] # Create a bounding box for UA, MD from region shape, including a buffer of 10000 metres bounding_box = ( diff --git a/scripts/build_hac_features.py b/scripts/build_hac_features.py new file mode 100644 index 00000000..08d5e120 --- /dev/null +++ b/scripts/build_hac_features.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: : 2024 The PyPSA-Eur Authors +# +# SPDX-License-Identifier: MIT +""" +Aggregate all rastered cutout data to base regions Voronoi cells. +""" + +import logging + +import atlite +import geopandas as gpd +from _helpers import get_snapshots, set_scenario_config +from atlite.aggregate import aggregate_matrix +from dask.distributed import Client + +logger = logging.getLogger(__name__) + +if __name__ == "__main__": + if "snakemake" not in globals(): + from _helpers import mock_snakemake + + snakemake = mock_snakemake("build_hac_features") + set_scenario_config(snakemake) + + params = snakemake.params + nprocesses = int(snakemake.threads) + + if nprocesses > 1: + client = Client(n_workers=nprocesses, threads_per_worker=1) + else: + client = None + + time = get_snapshots(params.snapshots, params.drop_leap_day) + + cutout = atlite.Cutout(snakemake.input.cutout).sel(time=time) + + regions = gpd.read_file(snakemake.input.regions).set_index("name") + I = cutout.indicatormatrix(regions) # noqa: E741 + + ds = cutout.data[params.features].map( + aggregate_matrix, matrix=I, index=regions.index + ) + + ds = ds.load(scheduler=client) + + ds.to_netcdf(snakemake.output[0]) diff --git a/scripts/build_hourly_heat_demand.py b/scripts/build_hourly_heat_demand.py index 8573a198..9bb1f77f 100644 --- a/scripts/build_hourly_heat_demand.py +++ b/scripts/build_hourly_heat_demand.py @@ -22,12 +22,12 @@ Inputs ------ - ``data/heat_load_profile_BDEW.csv``: Intraday heat profile for water and space heating demand for the residential and services sectors for weekends and weekdays. -- ``resources/daily_heat_demand_total_elec_s_.nc``: Daily heat demand per cluster. +- ``resources/daily_heat_demand_total_base_s_.nc``: Daily heat demand per cluster. Outputs ------- -- ``resources/hourly_heat_demand_total_elec_s_.nc``: +- ``resources/hourly_heat_demand_total_base_s_.nc``: """ from itertools import product @@ -43,7 +43,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_hourly_heat_demand", scope="total", - simpl="", clusters=5, ) set_scenario_config(snakemake) diff --git a/scripts/build_industrial_distribution_key.py b/scripts/build_industrial_distribution_key.py index 76a0e6d6..8fe707a4 100644 --- a/scripts/build_industrial_distribution_key.py +++ b/scripts/build_industrial_distribution_key.py @@ -8,13 +8,13 @@ Build spatial distribution of industries from Hotmaps database. Inputs ------- -- ``resources/regions_onshore_elec_s{simpl}_{clusters}.geojson`` -- ``resources/pop_layout_elec_s{simpl}_{clusters}.csv`` +- ``resources/regions_onshore_base_s_{clusters}.geojson`` +- ``resources/pop_layout_base_s_{clusters}.csv`` Outputs ------- -- ``resources/industrial_distribution_key_elec_s{simpl}_{clusters}.csv`` +- ``resources/industrial_distribution_key_base_s_{clusters}.csv`` Description ------- @@ -388,7 +388,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_industrial_distribution_key", - simpl="", clusters=128, ) configure_logging(snakemake) diff --git a/scripts/build_industrial_energy_demand_per_node.py b/scripts/build_industrial_energy_demand_per_node.py index eb022dae..db9cac6b 100644 --- a/scripts/build_industrial_energy_demand_per_node.py +++ b/scripts/build_industrial_energy_demand_per_node.py @@ -8,14 +8,14 @@ Build industrial energy demand per model region. Inputs ------ -- ``resources/industrial_energy_demand_today_elec_s{simpl}_{clusters}.csv`` +- ``resources/industrial_energy_demand_today_base_s_{clusters}.csv`` - ``resources/industry_sector_ratios_{planning_horizons}.csv`` -- ``resources/industrial_production_elec_s{simpl}_{clusters}_{planning_horizons}.csv`` +- ``resources/industrial_production_base_s_{clusters}_{planning_horizons}.csv`` Outputs ------- -- ``resources/industrial_energy_demand_elec_s{simpl}_{clusters}_{planning_horizons}.csv`` +- ``resources/industrial_energy_demand_base_s_{clusters}_{planning_horizons}.csv`` Description ------- @@ -45,7 +45,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_industrial_energy_demand_per_node", - simpl="", clusters=48, planning_horizons=2030, ) diff --git a/scripts/build_industrial_energy_demand_per_node_today.py b/scripts/build_industrial_energy_demand_per_node_today.py index fd7c281c..0675ce07 100644 --- a/scripts/build_industrial_energy_demand_per_node_today.py +++ b/scripts/build_industrial_energy_demand_per_node_today.py @@ -8,19 +8,19 @@ Build industrial energy demand per model region. Inputs ------- -- ``resources/industrial_distribution_key_elec_s{simpl}_{clusters}.csv`` +- ``resources/industrial_distribution_key_base_s_{clusters}.csv`` - ``resources/industrial_energy_demand_per_country_today.csv`` Outputs ------- -- ``resources/industrial_energy_demand_per_node_today_elec_s{simpl}_{clusters}.csv`` +- ``resources/industrial_energy_demand_per_node_today_base_s_{clusters}.csv`` Description ------- This rule maps the industrial energy demand per country `industrial_energy_demand_per_country_today.csv` to each bus region. -The energy demand per country is multiplied by the mapping value from the file ``industrial_distribution_key_elec_s{simpl}_{clusters}.csv`` between 0 and 1 to get the industrial energy demand per bus. +The energy demand per country is multiplied by the mapping value from the file ``industrial_distribution_key_base_s_{clusters}.csv`` between 0 and 1 to get the industrial energy demand per bus. The unit of the energy demand is TWh/a. """ @@ -92,7 +92,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_industrial_energy_demand_per_node_today", - simpl="", clusters=48, ) set_scenario_config(snakemake) diff --git a/scripts/build_industrial_production_per_node.py b/scripts/build_industrial_production_per_node.py index 862345e5..cdc6e1a2 100644 --- a/scripts/build_industrial_production_per_node.py +++ b/scripts/build_industrial_production_per_node.py @@ -8,13 +8,13 @@ Build industrial production per model region. Inputs ------- -- ``resources/industrial_distribution_key_elec_s{simpl}_{clusters}.csv`` +- ``resources/industrial_distribution_key_base_s_{clusters}.csv`` - ``resources/industrial_production_per_country_tomorrow_{planning_horizons}.csv`` Outputs ------- -- ``resources/industrial_production_per_node_elec_s{simpl}_{clusters}_{planning_horizons}.csv`` +- ``resources/industrial_production_per_node_base_s_{clusters}_{planning_horizons}.csv`` Description ------- @@ -87,11 +87,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake( - "build_industrial_production_per_node", - simpl="", - clusters=48, - ) + snakemake = mock_snakemake("build_industrial_production_per_node", clusters=48) set_scenario_config(snakemake) build_nodal_industrial_production() diff --git a/scripts/build_line_rating.py b/scripts/build_line_rating.py index f4b01fe0..86e98d62 100755 --- a/scripts/build_line_rating.py +++ b/scripts/build_line_rating.py @@ -5,7 +5,7 @@ # coding: utf-8 """ -Adds dynamic line rating timeseries to the base network. +Calculates dynamic line rating time series from base network. Relevant Settings ----------------- @@ -14,11 +14,12 @@ Relevant Settings lines: cutout: - line_rating: + dynamic_line_rating: .. seealso:: Documentation of the configuration file ``config.yaml` + Inputs ------ @@ -28,7 +29,7 @@ Inputs Outputs ------- -- ``resources/line_rating.nc`` +- ``resources/dlr.nc`` Description @@ -50,6 +51,7 @@ With a heat balance considering the maximum temperature threshold of the transmi the maximal possible capacity factor "s_max_pu" for each transmission line at each time step is calculated. """ +import logging import re import atlite @@ -58,11 +60,14 @@ import numpy as np import pypsa import xarray as xr from _helpers import configure_logging, get_snapshots, set_scenario_config +from dask.distributed import Client from shapely.geometry import LineString as Line from shapely.geometry import Point +logger = logging.getLogger(__name__) -def calculate_resistance(T, R_ref, T_ref=293, alpha=0.00403): + +def calculate_resistance(T, R_ref, T_ref: float | int = 293, alpha: float = 0.00403): """ Calculates the resistance at other temperatures than the reference temperature. @@ -84,7 +89,12 @@ def calculate_resistance(T, R_ref, T_ref=293, alpha=0.00403): return R_ref * (1 + alpha * (T - T_ref)) -def calculate_line_rating(n, cutout): +def calculate_line_rating( + n: pypsa.Network, + cutout: atlite.Cutout, + show_progress: bool = True, + dask_kwargs: dict = None, +) -> xr.DataArray: """ Calculates the maximal allowed power flow in each line for each time step considering the maximal temperature. @@ -97,6 +107,10 @@ def calculate_line_rating(n, cutout): ------- xarray DataArray object with maximal power. """ + if dask_kwargs is None: + dask_kwargs = {} + + logger.info("Calculating dynamic line rating.") relevant_lines = n.lines[~n.lines["underground"]].copy() buses = relevant_lines[["bus0", "bus1"]].values x = n.buses.x @@ -120,7 +134,16 @@ def calculate_line_rating(n, cutout): relevant_lines["n_bundle"] = relevant_lines["n_bundle"].fillna(1) R *= relevant_lines["n_bundle"] R = calculate_resistance(T=353, R_ref=R) - Imax = cutout.line_rating(shapes, R, D=0.0218, Ts=353, epsilon=0.8, alpha=0.8) + Imax = cutout.line_rating( + shapes, + R, + D=0.0218, + Ts=353, + epsilon=0.8, + alpha=0.8, + show_progress=show_progress, + dask_kwargs=dask_kwargs, + ) line_factor = relevant_lines.eval("v_nom * n_bundle * num_parallel") / 1e3 # in mW return xr.DataArray( data=np.sqrt(3) * Imax * line_factor.values.reshape(-1, 1), @@ -134,21 +157,23 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake( - "build_line_rating", - network="elec", - simpl="", - clusters="5", - ll="v1.0", - opts="Co2L-4H", - ) + snakemake = mock_snakemake("build_line_rating") configure_logging(snakemake) set_scenario_config(snakemake) + nprocesses = int(snakemake.threads) + show_progress = not snakemake.config["run"].get("disable_progressbar", True) + show_progress = show_progress and snakemake.config["atlite"]["show_progress"] + if nprocesses > 1: + client = Client(n_workers=nprocesses, threads_per_worker=1) + else: + client = None + dask_kwargs = {"scheduler": client} + n = pypsa.Network(snakemake.input.base_network) time = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day) cutout = atlite.Cutout(snakemake.input.cutout).sel(time=time) - da = calculate_line_rating(n, cutout) + da = calculate_line_rating(n, cutout, show_progress, dask_kwargs) da.to_netcdf(snakemake.output[0]) diff --git a/scripts/build_population_weighted_energy_totals.py b/scripts/build_population_weighted_energy_totals.py index 60af66aa..74c2573b 100644 --- a/scripts/build_population_weighted_energy_totals.py +++ b/scripts/build_population_weighted_energy_totals.py @@ -16,7 +16,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_population_weighted_energy_totals", kind="heat", - simpl="", clusters=60, ) set_scenario_config(snakemake) diff --git a/scripts/build_powerplants.py b/scripts/build_powerplants.py index 47cf2e14..94d03585 100755 --- a/scripts/build_powerplants.py +++ b/scripts/build_powerplants.py @@ -35,7 +35,7 @@ Inputs Outputs ------- -- ``resource/powerplants.csv``: A list of conventional power plants (i.e. neither wind nor solar) with fields for name, fuel type, technology, country, capacity in MW, duration, commissioning year, retrofit year, latitude, longitude, and dam information as documented in the `powerplantmatching README `_; additionally it includes information on the closest substation/bus in ``networks/base.nc``. +- ``resource/powerplants_s_{clusters}.csv``: A list of conventional power plants (i.e. neither wind nor solar) with fields for name, fuel type, technology, country, capacity in MW, duration, commissioning year, retrofit year, latitude, longitude, and dam information as documented in the `powerplantmatching README `_; additionally it includes information on the closest substation/bus in ``networks/base_s_{clusters}.nc``. .. image:: img/powerplantmatching.png :scale: 30 % @@ -171,7 +171,7 @@ if __name__ == "__main__": configure_logging(snakemake) set_scenario_config(snakemake) - n = pypsa.Network(snakemake.input.base_network) + n = pypsa.Network(snakemake.input.network) countries = snakemake.params.countries ppl = ( diff --git a/scripts/build_renewable_profiles.py b/scripts/build_renewable_profiles.py index 57568f24..ab6a4748 100644 --- a/scripts/build_renewable_profiles.py +++ b/scripts/build_renewable_profiles.py @@ -5,12 +5,11 @@ # # SPDX-License-Identifier: MIT """ -Calculates for each network node the (i) installable capacity (based on land- -use), (ii) the available generation time series (based on weather data), and -(iii) the average distance from the node for onshore wind, AC-connected -offshore wind, DC-connected offshore wind and solar PV generators. In addition -for offshore wind it calculates the fraction of the grid connection which is -under water. +Calculates for each clustered region the (i) installable capacity (based on +land-use from :mod:`determine_availability_matrix`), (ii) the available +generation time series (based on weather data), and (iii) the average distance +from the node for onshore wind, AC-connected offshore wind, DC-connected +offshore wind and solar PV generators. .. note:: Hydroelectric profiles are built in script :mod:`build_hydro_profiles`. @@ -26,9 +25,8 @@ Relevant settings renewable: {technology}: - cutout: corine: luisa: grid_codes: distance: natura: max_depth: min_depth: - max_shore_distance: min_shore_distance: capacity_per_sqkm: - correction_factor: min_p_max_pu: clip_p_max_pu: resource: + cutout: capacity_per_sqkm: correction_factor: min_p_max_pu: + clip_p_max_pu: resource: .. seealso:: Documentation of the configuration file ``config/config.yaml`` at @@ -37,40 +35,14 @@ Relevant settings Inputs ------ -- ``data/bundle/corine/g250_clc06_V18_5.tif``: `CORINE Land Cover (CLC) - `_ inventory on `44 - classes `_ of - land use (e.g. forests, arable land, industrial, urban areas) at 100m - resolution. - - .. image:: img/corine.png - :scale: 33 % - -- ``data/LUISA_basemap_020321_50m.tif``: `LUISA Base Map - `_ land - coverage dataset at 50m resolution similar to CORINE. For codes in relation to - CORINE land cover, see `Annex 1 of the technical documentation - `_. - -- ``data/bundle/gebco/GEBCO_2014_2D.nc``: A `bathymetric - `_ data set with a global terrain - model for ocean and land at 15 arc-second intervals by the `General - Bathymetric Chart of the Oceans (GEBCO) - `_. - - .. image:: img/gebco_2019_grid_image.jpg - :scale: 50 % - - **Source:** `GEBCO - `_ - -- ``resources/natura.tiff``: confer :ref:`natura` +- ``resources/availability_matrix_{clusters}_{technology}.nc``: see :mod:`determine_availability_matrix` - ``resources/offshore_shapes.geojson``: confer :ref:`shapes` -- ``resources/regions_onshore.geojson``: (if not offshore wind), confer +- ``resources/regions_onshore_base_s_{clusters}.geojson``: (if not offshore + wind), confer :ref:`busregions` +- ``resources/regions_offshore_base_s_{clusters}.geojson``: (if offshore wind), :ref:`busregions` -- ``resources/regions_offshore.geojson``: (if offshore wind), :ref:`busregions` - ``"cutouts/" + params["renewable"][{technology}]['cutout']``: :ref:`cutout` -- ``networks/base.nc``: :ref:`base` +- ``networks/_base_s_{clusters}.nc``: :ref:`base` Outputs ------- @@ -80,21 +52,13 @@ Outputs =================== ========== ========================================================= Field Dimensions Description =================== ========== ========================================================= - profile bus, time the per unit hourly availability factors for each node + profile bus, time the per unit hourly availability factors for each bus ------------------- ---------- --------------------------------------------------------- - weight bus sum of the layout weighting for each node + p_nom_max bus maximal installable capacity at the bus (in MW) ------------------- ---------- --------------------------------------------------------- - p_nom_max bus maximal installable capacity at the node (in MW) - ------------------- ---------- --------------------------------------------------------- - potential y, x layout of generator units at cutout grid cells inside the - Voronoi cell (maximal installable capacity at each grid - cell multiplied by capacity factor) - ------------------- ---------- --------------------------------------------------------- - average_distance bus average distance of units in the Voronoi cell to the - grid node (in km) - ------------------- ---------- --------------------------------------------------------- - underwater_fraction bus fraction of the average connection distance which is - under water (only for offshore) + average_distance bus average distance of units in the region to the + grid bus for onshore technologies and to the shoreline + for offshore technologies (in km) =================== ========== ========================================================= - **profile** @@ -109,50 +73,28 @@ Outputs :scale: 33 % :align: center - - **potential** - - .. image:: img/potential_heatmap.png - :scale: 33 % - :align: center - - **average_distance** .. image:: img/distance_hist.png :scale: 33 % :align: center - - **underwater_fraction** - - .. image:: img/underwater_hist.png - :scale: 33 % - :align: center - Description ----------- This script functions at two main spatial resolutions: the resolution of the -network nodes and their `Voronoi cells -`_, and the resolution of the -cutout grid cells for the weather data. Typically the weather data grid is finer -than the network nodes, so we have to work out the distribution of generators -across the grid cells within each Voronoi cell. This is done by taking account -of a combination of the available land at each grid cell and the capacity factor -there. +clustered network regions, and the resolution of the cutout grid cells for the +weather data. Typically the weather data grid is finer than the network regions, +so we have to work out the distribution of generators across the grid cells +within each region. This is done by taking account of a combination of the +available land at each grid cell (computed in +:mod:`determine_availability_matrix`) and the capacity factor there. -First the script computes how much of the technology can be installed at each -cutout grid cell and each node using the `atlite -`_ library. This uses the CORINE land use data, -LUISA land use data, Natura2000 nature reserves, GEBCO bathymetry data, and -shipping lanes. - -.. image:: img/eligibility.png - :scale: 50 % - :align: center - -To compute the layout of generators in each node's Voronoi cell, the installable -potential in each grid cell is multiplied with the capacity factor at each grid -cell. This is done since we assume more generators are installed at cells with a -higher capacity factor. +Based on the availability matrix, the script first computes how much of the +technology can be installed at each cutout grid cell. To compute the layout of +generators in each clustered region, the installable potential in each grid cell +is multiplied with the capacity factor at each grid cell. This is done since we +assume more generators are installed at cells with a higher capacity factor. .. image:: img/offwinddc-gridcell.png :scale: 50 % @@ -174,23 +116,17 @@ This layout is then used to compute the generation availability time series from the weather data cutout from ``atlite``. The maximal installable potential for the node (`p_nom_max`) is computed by -adding up the installable potentials of the individual grid cells. If the model -comes close to this limit, then the time series may slightly overestimate -production since it is assumed the geographical distribution is proportional to -capacity factor. +adding up the installable potentials of the individual grid cells. """ -import functools import logging import time import atlite import geopandas as gpd -import numpy as np import xarray as xr from _helpers import configure_logging, get_snapshots, set_scenario_config +from build_shapes import _simplify_polys from dask.distributed import Client -from pypsa.geo import haversine -from shapely.geometry import LineString logger = logging.getLogger(__name__) @@ -199,15 +135,19 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("build_renewable_profiles", technology="offwind-dc") + snakemake = mock_snakemake( + "build_renewable_profiles", clusters=38, technology="offwind-ac" + ) configure_logging(snakemake) set_scenario_config(snakemake) nprocesses = int(snakemake.threads) noprogress = snakemake.config["run"].get("disable_progressbar", True) noprogress = noprogress or not snakemake.config["atlite"]["show_progress"] - params = snakemake.params.renewable[snakemake.wildcards.technology] + technology = snakemake.wildcards.technology + params = snakemake.params.renewable[technology] resource = params["resource"] # pv panel params / wind turbine params + resource["show_progress"] = not noprogress tech = next(t for t in ["panel", "turbine"] if t in resource) models = resource[tech] @@ -229,6 +169,9 @@ if __name__ == "__main__": sns = get_snapshots(snakemake.params.snapshots, snakemake.params.drop_leap_day) cutout = atlite.Cutout(snakemake.input.cutout).sel(time=sns) + + availability = xr.open_dataarray(snakemake.input.availability_matrix) + regions = gpd.read_file(snakemake.input.regions) assert not regions.empty, ( f"List of regions in {snakemake.input.regions} is empty, please " @@ -236,186 +179,96 @@ if __name__ == "__main__": ) # do not pull up, set_index does not work if geo dataframe is empty regions = regions.set_index("name").rename_axis("bus") + if snakemake.wildcards.technology.startswith("offwind"): + # for offshore regions, the shortest distance to the shoreline is used + offshore_regions = availability.coords["bus"].values + regions = regions.loc[offshore_regions] + regions = regions.map(lambda g: _simplify_polys(g, minarea=1)).set_crs( + regions.crs + ) + else: + # for onshore regions, the representative point of the region is used + regions = regions.representative_point() + regions = regions.geometry.to_crs(3035) buses = regions.index - res = params.get("excluder_resolution", 100) - excluder = atlite.ExclusionContainer(crs=3035, res=res) - - if params["natura"]: - excluder.add_raster(snakemake.input.natura, nodata=0, allow_no_overlap=True) - - for dataset in ["corine", "luisa"]: - kwargs = {"nodata": 0} if dataset == "luisa" else {} - settings = params.get(dataset, {}) - if not settings: - continue - if dataset == "luisa" and res > 50: - logger.info( - "LUISA data is available at 50m resolution, " - f"but coarser {res}m resolution is used." - ) - if isinstance(settings, list): - settings = {"grid_codes": settings} - if "grid_codes" in settings: - codes = settings["grid_codes"] - excluder.add_raster( - snakemake.input[dataset], codes=codes, invert=True, crs=3035, **kwargs - ) - if settings.get("distance", 0.0) > 0.0: - codes = settings["distance_grid_codes"] - buffer = settings["distance"] - excluder.add_raster( - snakemake.input[dataset], codes=codes, buffer=buffer, crs=3035, **kwargs - ) - - if params.get("ship_threshold"): - shipping_threshold = ( - params["ship_threshold"] * 8760 * 6 - ) # approximation because 6 years of data which is hourly collected - func = functools.partial(np.less, shipping_threshold) - excluder.add_raster( - snakemake.input.ship_density, codes=func, crs=4326, allow_no_overlap=True - ) - - if params.get("max_depth"): - # lambda not supported for atlite + multiprocessing - # use named function np.greater with partially frozen argument instead - # and exclude areas where: -max_depth > grid cell depth - func = functools.partial(np.greater, -params["max_depth"]) - excluder.add_raster(snakemake.input.gebco, codes=func, crs=4326, nodata=-1000) - - if params.get("min_depth"): - func = functools.partial(np.greater, -params["min_depth"]) - excluder.add_raster( - snakemake.input.gebco, codes=func, crs=4326, nodata=-1000, invert=True - ) - - if "min_shore_distance" in params: - buffer = params["min_shore_distance"] - excluder.add_geometry(snakemake.input.country_shapes, buffer=buffer) - - if "max_shore_distance" in params: - buffer = params["max_shore_distance"] - excluder.add_geometry( - snakemake.input.country_shapes, buffer=buffer, invert=True - ) - - logger.info("Calculate landuse availability...") - start = time.time() - - kwargs = dict(nprocesses=nprocesses, disable_progressbar=noprogress) - availability = cutout.availabilitymatrix(regions, excluder, **kwargs) - - duration = time.time() - start - logger.info(f"Completed landuse availability calculation ({duration:2.2f}s)") - - # For Moldova and Ukraine: Overwrite parts not covered by Corine with - # externally determined available areas - if "availability_matrix_MD_UA" in snakemake.input.keys(): - availability_MDUA = xr.open_dataarray( - snakemake.input["availability_matrix_MD_UA"] - ) - availability.loc[availability_MDUA.coords] = availability_MDUA - area = cutout.grid.to_crs(3035).area / 1e6 area = xr.DataArray( area.values.reshape(cutout.shape), [cutout.coords["y"], cutout.coords["x"]] ) - potential = capacity_per_sqkm * availability.sum("bus") * area func = getattr(cutout, resource.pop("method")) if client is not None: resource["dask_kwargs"] = {"scheduler": client} - logger.info("Calculate average capacity factor...") + logger.info(f"Calculate average capacity factor for technology {technology}...") start = time.time() capacity_factor = correction_factor * func(capacity_factor=True, **resource) layout = capacity_factor * area * capacity_per_sqkm duration = time.time() - start - logger.info(f"Completed average capacity factor calculation ({duration:2.2f}s)") + logger.info( + f"Completed average capacity factor calculation for technology {technology} ({duration:2.2f}s)" + ) profiles = [] - capacities = [] for year, model in models.items(): logger.info( - f"Calculate weighted capacity factor time series for model {model}..." + f"Calculate weighted capacity factor time series for model {model} for technology {technology}..." ) start = time.time() resource[tech] = model - profile, capacity = func( + profile = func( matrix=availability.stack(spatial=["y", "x"]), layout=layout, index=buses, per_unit=True, - return_capacity=True, + return_capacity=False, **resource, ) dim = {"year": [year]} profile = profile.expand_dims(dim) - capacity = capacity.expand_dims(dim) profiles.append(profile.rename("profile")) - capacities.append(capacity.rename("weight")) duration = time.time() - start logger.info( - f"Completed weighted capacity factor time series calculation for model {model} ({duration:2.2f}s)" + f"Completed weighted capacity factor time series calculation for model {model} for technology {technology} ({duration:2.2f}s)" ) profiles = xr.merge(profiles) - capacities = xr.merge(capacities) - logger.info("Calculating maximal capacity per bus") + logger.info(f"Calculating maximal capacity per bus for technology {technology}") p_nom_max = capacity_per_sqkm * availability @ area - logger.info("Calculate average distances.") + logger.info(f"Calculate average distances for technology {technology}.") layoutmatrix = (layout * availability).stack(spatial=["y", "x"]) - coords = cutout.grid[["x", "y"]] - bus_coords = regions[["x", "y"]] + coords = cutout.grid.representative_point().to_crs(3035) average_distance = [] - centre_of_mass = [] for bus in buses: row = layoutmatrix.sel(bus=bus).data nz_b = row != 0 row = row[nz_b] co = coords[nz_b] - distances = haversine(bus_coords.loc[bus], co) + distances = co.distance(regions[bus]).div(1e3) # km average_distance.append((distances * (row / row.sum())).sum()) - centre_of_mass.append(co.values.T @ (row / row.sum())) average_distance = xr.DataArray(average_distance, [buses]) - centre_of_mass = xr.DataArray(centre_of_mass, [buses, ("spatial", ["x", "y"])]) ds = xr.merge( [ correction_factor * profiles, - capacities, p_nom_max.rename("p_nom_max"), - potential.rename("potential"), average_distance.rename("average_distance"), ] ) - - if snakemake.wildcards.technology.startswith("offwind"): - logger.info("Calculate underwater fraction of connections.") - offshore_shape = gpd.read_file(snakemake.input["offshore_shapes"]).union_all() - underwater_fraction = [] - for bus in buses: - p = centre_of_mass.sel(bus=bus).data - line = LineString([p, regions.loc[bus, ["x", "y"]]]) - frac = line.intersection(offshore_shape).length / line.length - underwater_fraction.append(frac) - - ds["underwater_fraction"] = xr.DataArray(underwater_fraction, [buses]) - # select only buses with some capacity and minimal capacity factor mean_profile = ds["profile"].mean("time") if "year" in ds.indexes: diff --git a/scripts/build_retro_cost.py b/scripts/build_retro_cost.py index 42144c1a..b25b6a64 100755 --- a/scripts/build_retro_cost.py +++ b/scripts/build_retro_cost.py @@ -1050,7 +1050,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_retro_cost", - simpl="", clusters=48, ll="v1.0", sector_opts="Co2L0-168H-T-H-B-I-solar3-dist1", diff --git a/scripts/build_salt_cavern_potentials.py b/scripts/build_salt_cavern_potentials.py index f2c2ce8f..2923da16 100644 --- a/scripts/build_salt_cavern_potentials.py +++ b/scripts/build_salt_cavern_potentials.py @@ -74,9 +74,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake( - "build_salt_cavern_potentials", simpl="", clusters="37" - ) + snakemake = mock_snakemake("build_salt_cavern_potentials", clusters="37") set_scenario_config(snakemake) diff --git a/scripts/build_sequestration_potentials.py b/scripts/build_sequestration_potentials.py index 0d70448d..a153a282 100644 --- a/scripts/build_sequestration_potentials.py +++ b/scripts/build_sequestration_potentials.py @@ -38,9 +38,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake( - "build_sequestration_potentials", simpl="", clusters="128" - ) + snakemake = mock_snakemake("build_sequestration_potentials", clusters="128") set_scenario_config(snakemake) diff --git a/scripts/build_shipping_demand.py b/scripts/build_shipping_demand.py index d8c960ae..649e53c7 100644 --- a/scripts/build_shipping_demand.py +++ b/scripts/build_shipping_demand.py @@ -17,11 +17,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake( - "build_shipping_demand", - simpl="", - clusters=48, - ) + snakemake = mock_snakemake("build_shipping_demand", clusters=48) set_scenario_config(snakemake) scope = gpd.read_file(snakemake.input.scope).geometry[0] diff --git a/scripts/build_solar_thermal_profiles.py b/scripts/build_solar_thermal_profiles.py index 9de04f45..4f13b5fe 100644 --- a/scripts/build_solar_thermal_profiles.py +++ b/scripts/build_solar_thermal_profiles.py @@ -26,13 +26,13 @@ Inputs ------ - ``resources/.nc``: -- ``resources/_.geojson``: +- ``resources/_.geojson``: - ``cutout``: Weather data cutout, as specified in config Outputs ------- -- ``resources/solar_thermal__elec_s_.nc``: +- ``resources/solar_thermal__base_s_.nc``: """ import atlite @@ -46,11 +46,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake( - "build_solar_thermal_profiles", - simpl="", - clusters=48, - ) + snakemake = mock_snakemake("build_solar_thermal_profiles", clusters=48) set_scenario_config(snakemake) nprocesses = int(snakemake.threads) diff --git a/scripts/build_temperature_profiles.py b/scripts/build_temperature_profiles.py index 8e07ee87..34cd39d8 100644 --- a/scripts/build_temperature_profiles.py +++ b/scripts/build_temperature_profiles.py @@ -26,14 +26,14 @@ Inputs ------ - ``resources//pop_layout_total.nc``: -- ``resources//regions_onshore_elec_s_.geojson``: +- ``resources//regions_onshore_base_s_.geojson``: - ``cutout``: Weather data cutout, as specified in config Outputs ------- -- ``resources/temp_soil_total_elec_s_.nc``: -- ``resources/temp_air_total_elec_s_.nc` +- ``resources/temp_soil_total_base_s_.nc``: +- ``resources/temp_air_total_base_s_.nc` """ import atlite @@ -49,7 +49,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "build_temperature_profiles", - simpl="", clusters=48, ) set_scenario_config(snakemake) diff --git a/scripts/build_transport_demand.py b/scripts/build_transport_demand.py index 074dc260..f2ae0c21 100644 --- a/scripts/build_transport_demand.py +++ b/scripts/build_transport_demand.py @@ -167,11 +167,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake( - "build_transport_demand", - simpl="", - clusters=128, - ) + snakemake = mock_snakemake("build_transport_demand", clusters=128) configure_logging(snakemake) set_scenario_config(snakemake) diff --git a/scripts/cluster_gas_network.py b/scripts/cluster_gas_network.py index b95c4580..55998396 100755 --- a/scripts/cluster_gas_network.py +++ b/scripts/cluster_gas_network.py @@ -108,7 +108,7 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("cluster_gas_network", simpl="", clusters="37") + snakemake = mock_snakemake("cluster_gas_network", clusters="37") configure_logging(snakemake) set_scenario_config(snakemake) diff --git a/scripts/cluster_network.py b/scripts/cluster_network.py index 4460b0ad..cff50694 100644 --- a/scripts/cluster_network.py +++ b/scripts/cluster_network.py @@ -6,7 +6,7 @@ # coding: utf-8 """ Creates networks clustered to ``{cluster}`` number of zones with aggregated -buses, generators and transmission corridors. +buses and transmission corridors. Relevant Settings ----------------- @@ -32,30 +32,30 @@ Relevant Settings Inputs ------ -- ``resources/regions_onshore_elec_s{simpl}.geojson``: confer :ref:`simplify` -- ``resources/regions_offshore_elec_s{simpl}.geojson``: confer :ref:`simplify` -- ``resources/busmap_elec_s{simpl}.csv``: confer :ref:`simplify` -- ``networks/elec_s{simpl}.nc``: confer :ref:`simplify` -- ``data/custom_busmap_elec_s{simpl}_{clusters}_{base_network}.csv``: optional input +- ``resources/regions_onshore_base.geojson``: confer :ref:`simplify` +- ``resources/regions_offshore_base.geojson``: confer :ref:`simplify` +- ``resources/busmap_base_s.csv``: confer :ref:`simplify` +- ``networks/base.nc``: confer :ref:`simplify` +- ``data/custom_busmap_base_s_{clusters}_{base_network}.csv``: optional input Outputs ------- -- ``resources/regions_onshore_elec_s{simpl}_{clusters}.geojson``: +- ``resources/regions_onshore_base_s_{clusters}.geojson``: - .. image:: img/regions_onshore_elec_s_X.png + .. image:: img/regions_onshore_base_s_X.png :scale: 33 % -- ``resources/regions_offshore_elec_s{simpl}_{clusters}.geojson``: +- ``resources/regions_offshore_base_s_{clusters}.geojson``: - .. image:: img/regions_offshore_elec_s_X.png + .. image:: img/regions_offshore_base_s_X.png :scale: 33 % -- ``resources/busmap_elec_s{simpl}_{clusters}.csv``: Mapping of buses from ``networks/elec_s{simpl}.nc`` to ``networks/elec_s{simpl}_{clusters}.nc``; -- ``resources/linemap_elec_s{simpl}_{clusters}.csv``: Mapping of lines from ``networks/elec_s{simpl}.nc`` to ``networks/elec_s{simpl}_{clusters}.nc``; -- ``networks/elec_s{simpl}_{clusters}.nc``: +- ``resources/busmap_base_s_{clusters}.csv``: Mapping of buses from ``networks/base.nc`` to ``networks/base_s_{clusters}.nc``; +- ``resources/linemap_base_s_{clusters}.csv``: Mapping of lines from ``networks/base.nc`` to ``networks/base_s_{clusters}.nc``; +- ``networks/base_s_{clusters}.nc``: - .. image:: img/elec_s_X.png + .. image:: img/base_s_X.png :scale: 40 % Description @@ -63,60 +63,33 @@ Description .. note:: - **Why is clustering used both in** ``simplify_network`` **and** ``cluster_network`` **?** - - Consider for example a network ``networks/elec_s100_50.nc`` in which - ``simplify_network`` clusters the network to 100 buses and in a second - step ``cluster_network``` reduces it down to 50 buses. - - In preliminary tests, it turns out, that the principal effect of - changing spatial resolution is actually only partially due to the - transmission network. It is more important to differentiate between - wind generators with higher capacity factors from those with lower - capacity factors, i.e. to have a higher spatial resolution in the - renewable generation than in the number of buses. - - The two-step clustering allows to study this effect by looking at - networks like ``networks/elec_s100_50m.nc``. Note the additional - ``m`` in the ``{cluster}`` wildcard. So in the example network - there are still up to 100 different wind generators. - - In combination these two features allow you to study the spatial - resolution of the transmission network separately from the - spatial resolution of renewable generators. - **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. -.. tip:: - The rule :mod:`cluster_networks` runs - for all ``scenario`` s in the configuration file - the rule :mod:`cluster_network`. - Exemplary unsolved network clustered to 512 nodes: -.. image:: img/elec_s_512.png +.. image:: img/base_s_512.png :scale: 40 % :align: center Exemplary unsolved network clustered to 256 nodes: -.. image:: img/elec_s_256.png +.. image:: img/base_s_256.png :scale: 40 % :align: center Exemplary unsolved network clustered to 128 nodes: -.. image:: img/elec_s_128.png +.. image:: img/base_s_128.png :scale: 40 % :align: center Exemplary unsolved network clustered to 37 nodes: -.. image:: img/elec_s_37.png +.. image:: img/base_s_37.png :scale: 40 % :align: center """ @@ -127,13 +100,11 @@ from functools import reduce import geopandas as gpd import linopy -import matplotlib.pyplot as plt import numpy as np import pandas as pd import pypsa -import seaborn as sns -from _helpers import configure_logging, set_scenario_config, update_p_nom_max -from add_electricity import load_costs +import xarray as xr +from _helpers import configure_logging, set_scenario_config from base_network import append_bus_shapes from packaging.version import Version, parse from pypsa.clustering.spatial import ( @@ -142,6 +113,7 @@ from pypsa.clustering.spatial import ( busmap_by_kmeans, get_clustering_from_busmap, ) +from scipy.sparse.csgraph import connected_components PD_GE_2_2 = parse(pd.__version__) >= Version("2.2") @@ -154,79 +126,61 @@ def normed(x): return (x / x.sum()).fillna(0.0) -def weighting_for_country(n, x): - conv_carriers = {"OCGT", "CCGT", "PHS", "hydro"} - gen = n.generators.loc[n.generators.carrier.isin(conv_carriers)].groupby( - "bus" - ).p_nom.sum().reindex(n.buses.index, fill_value=0.0) + n.storage_units.loc[ - n.storage_units.carrier.isin(conv_carriers) - ].groupby( - "bus" - ).p_nom.sum().reindex( - n.buses.index, fill_value=0.0 +def weighting_for_country(df: pd.DataFrame, weights: pd.Series) -> pd.Series: + w = normed(weights.reindex(df.index, fill_value=0)) + return (w * (100 / w.max())).clip(lower=1).astype(int) + + +def get_feature_data_for_hac(fn: str) -> pd.DataFrame: + ds = xr.open_dataset(fn) + feature_data = ( + pd.concat([ds[var].to_pandas() for var in ds.data_vars], axis=0).fillna(0.0).T ) - load = n.loads_t.p_set.mean().groupby(n.loads.bus).sum() - - b_i = x.index - g = normed(gen.reindex(b_i, fill_value=0)) - l = normed(load.reindex(b_i, fill_value=0)) - - w = g + l - return (w * (100.0 / w.max())).clip(lower=1.0).astype(int) - - -def get_feature_for_hac(n, buses_i=None, feature=None): - if buses_i is None: - buses_i = n.buses.index - - if feature is None: - feature = "solar+onwind-time" - - carriers = feature.split("-")[0].split("+") - if "offwind" in carriers: - carriers.remove("offwind") - carriers = np.append( - carriers, n.generators.carrier.filter(like="offwind").unique() - ) - - if feature.split("-")[1] == "cap": - feature_data = pd.DataFrame(index=buses_i, columns=carriers) - for carrier in carriers: - gen_i = n.generators.query("carrier == @carrier").index - attach = ( - n.generators_t.p_max_pu[gen_i] - .mean() - .rename(index=n.generators.loc[gen_i].bus) - ) - feature_data[carrier] = attach - - if feature.split("-")[1] == "time": - feature_data = pd.DataFrame(columns=buses_i) - for carrier in carriers: - gen_i = n.generators.query("carrier == @carrier").index - attach = n.generators_t.p_max_pu[gen_i].rename( - columns=n.generators.loc[gen_i].bus - ) - feature_data = pd.concat([feature_data, attach], axis=0)[buses_i] - - feature_data = feature_data.T - # timestamp raises error in sklearn >= v1.2: - feature_data.columns = feature_data.columns.astype(str) - - feature_data = feature_data.fillna(0) - + feature_data.columns = feature_data.columns.astype(str) return feature_data -def distribute_clusters(n, n_clusters, focus_weights=None, solver_name="scip"): +def fix_country_assignment_for_hac(n: pypsa.Network) -> None: + + # overwrite country of nodes that are disconnected from their country-topology + for country in n.buses.country.unique(): + m = n[n.buses.country == country].copy() + + _, labels = connected_components(m.adjacency_matrix(), directed=False) + + component = pd.Series(labels, index=m.buses.index) + component_sizes = component.value_counts() + + if len(component_sizes) > 1: + disconnected_bus = component[component == component_sizes.index[-1]].index[ + 0 + ] + + neighbor_bus = n.lines.query( + "bus0 == @disconnected_bus or bus1 == @disconnected_bus" + ).iloc[0][["bus0", "bus1"]] + new_country = list(set(n.buses.loc[neighbor_bus].country) - {country})[0] + + logger.info( + f"overwriting country `{country}` of bus `{disconnected_bus}` " + f"to new country `{new_country}`, because it is disconnected " + "from its initial inter-country transmission grid." + ) + n.buses.at[disconnected_bus, "country"] = new_country + + +def distribute_n_clusters_to_countries( + n: pypsa.Network, + n_clusters: int, + cluster_weights: pd.Series, + focus_weights: dict | None = None, + solver_name: str = "scip", +) -> pd.Series: """ Determine the number of clusters per country. """ L = ( - n.loads_t.p_set.mean() - .groupby(n.loads.bus) - .sum() - .groupby([n.buses.country, n.buses.sub_network]) + cluster_weights.groupby([n.buses.country, n.buses.sub_network]) .sum() .pipe(normed) ) @@ -277,92 +231,50 @@ def distribute_clusters(n, n_clusters, focus_weights=None, solver_name="scip"): def busmap_for_n_clusters( - n, - n_clusters, - solver_name, - focus_weights=None, - algorithm="kmeans", - feature=None, + n: pypsa.Network, + n_clusters_c: pd.Series, + cluster_weights: pd.Series, + algorithm: str = "kmeans", + features: pd.DataFrame | None = None, **algorithm_kwds, -): +) -> pd.Series: + if algorithm == "hac" and features is None: + raise ValueError("For HAC clustering, features must be provided.") + if algorithm == "kmeans": algorithm_kwds.setdefault("n_init", 1000) algorithm_kwds.setdefault("max_iter", 30000) algorithm_kwds.setdefault("tol", 1e-6) algorithm_kwds.setdefault("random_state", 0) - def fix_country_assignment_for_hac(n): - from scipy.sparse import csgraph - - # overwrite country of nodes that are disconnected from their country-topology - for country in n.buses.country.unique(): - m = n[n.buses.country == country].copy() - - _, labels = csgraph.connected_components( - m.adjacency_matrix(), directed=False - ) - - component = pd.Series(labels, index=m.buses.index) - component_sizes = component.value_counts() - - if len(component_sizes) > 1: - disconnected_bus = component[ - component == component_sizes.index[-1] - ].index[0] - - neighbor_bus = n.lines.query( - "bus0 == @disconnected_bus or bus1 == @disconnected_bus" - ).iloc[0][["bus0", "bus1"]] - new_country = list(set(n.buses.loc[neighbor_bus].country) - {country})[ - 0 - ] - - logger.info( - f"overwriting country `{country}` of bus `{disconnected_bus}` " - f"to new country `{new_country}`, because it is disconnected " - "from its initial inter-country transmission grid." - ) - n.buses.at[disconnected_bus, "country"] = new_country - return n - - if algorithm == "hac": - feature = get_feature_for_hac(n, buses_i=n.buses.index, feature=feature) - n = fix_country_assignment_for_hac(n) - - if (algorithm != "hac") and (feature is not None): - logger.warning( - f"Keyword argument feature is only valid for algorithm `hac`. " - f"Given feature `{feature}` will be ignored." - ) - - n.determine_network_topology() - - n_clusters = distribute_clusters( - n, n_clusters, focus_weights=focus_weights, solver_name=solver_name - ) - def busmap_for_country(x): prefix = x.name[0] + x.name[1] + " " - logger.debug(f"Determining busmap for country {prefix[:-1]}") + logger.debug( + f"Determining busmap for country {prefix[:-1]} " + f"from {len(x)} buses to {n_clusters_c[x.name]}." + ) if len(x) == 1: return pd.Series(prefix + "0", index=x.index) - weight = weighting_for_country(n, x) + weight = weighting_for_country(x, cluster_weights) if algorithm == "kmeans": return prefix + busmap_by_kmeans( - n, weight, n_clusters[x.name], buses_i=x.index, **algorithm_kwds + n, weight, n_clusters_c[x.name], buses_i=x.index, **algorithm_kwds ) elif algorithm == "hac": return prefix + busmap_by_hac( - n, n_clusters[x.name], buses_i=x.index, feature=feature.loc[x.index] + n, + n_clusters_c[x.name], + buses_i=x.index, + feature=features.reindex(x.index, fill_value=0.0), ) elif algorithm == "modularity": return prefix + busmap_by_greedy_modularity( - n, n_clusters[x.name], buses_i=x.index + n, n_clusters_c[x.name], buses_i=x.index ) else: raise ValueError( - f"`algorithm` must be one of 'kmeans' or 'hac'. Is {algorithm}." + f"`algorithm` must be one of 'kmeans' or 'hac' or 'modularity'. Is {algorithm}." ) compat_kws = dict(include_groups=False) if PD_GE_2_2 else {} @@ -376,93 +288,61 @@ def busmap_for_n_clusters( def clustering_for_n_clusters( - n, - n_clusters, - custom_busmap=False, - aggregate_carriers=None, - line_length_factor=1.25, - aggregation_strategies=dict(), - solver_name="scip", - algorithm="hac", - feature=None, - extended_link_costs=0, - focus_weights=None, -): - if not isinstance(custom_busmap, pd.Series): - busmap = busmap_for_n_clusters( - n, n_clusters, solver_name, focus_weights, algorithm, feature - ) - else: - busmap = custom_busmap + n: pypsa.Network, + busmap: pd.Series, + line_length_factor: float = 1.25, + aggregation_strategies: dict | None = None, +) -> pypsa.clustering.spatial.Clustering: + + if aggregation_strategies is None: + aggregation_strategies = dict() line_strategies = aggregation_strategies.get("lines", dict()) - generator_strategies = aggregation_strategies.get("generators", dict()) - one_port_strategies = aggregation_strategies.get("one_ports", dict()) + + bus_strategies = aggregation_strategies.get("buses", dict()) + bus_strategies.setdefault("substation_lv", lambda x: bool(x.sum())) + bus_strategies.setdefault("substation_off", lambda x: bool(x.sum())) clustering = get_clustering_from_busmap( n, busmap, - aggregate_generators_weighted=True, - aggregate_generators_carriers=aggregate_carriers, - aggregate_one_ports=["Load", "StorageUnit"], line_length_factor=line_length_factor, + bus_strategies=bus_strategies, line_strategies=line_strategies, - generator_strategies=generator_strategies, - one_port_strategies=one_port_strategies, - scale_link_capital_costs=False, custom_line_groupers=["build_year"], ) - if not n.links.empty: - nc = clustering.network - nc.links["underwater_fraction"] = ( - n.links.eval("underwater_fraction * length").div(nc.links.length).dropna() - ) - nc.links["capital_cost"] = nc.links["capital_cost"].add( - (nc.links.length - n.links.length) - .clip(lower=0) - .mul(extended_link_costs) - .dropna(), - fill_value=0, - ) - return clustering -def cluster_regions(busmaps, regions): +def cluster_regions( + busmaps: tuple | list, regions: gpd.GeoDataFrame, with_country: bool = False +) -> gpd.GeoDataFrame: """ Cluster regions based on busmaps and save the results to a file and to the network. Parameters: - busmaps (list): A list of busmaps used for clustering. - - which (str): The type of regions to cluster. + - regions (gpd.GeoDataFrame): The regions to cluster. + - with_country (bool): Whether to keep country column. Returns: None """ busmap = reduce(lambda x, y: x.map(y), busmaps[1:], busmaps[0]) - regions = regions.reindex(columns=["name", "geometry"]).set_index("name") + columns = ["name", "country", "geometry"] if with_country else ["name", "geometry"] + regions = regions.reindex(columns=columns).set_index("name") regions_c = regions.dissolve(busmap) regions_c.index.name = "name" return regions_c.reset_index() -def plot_busmap_for_n_clusters(n, n_clusters, solver_name="scip", fn=None): - busmap = busmap_for_n_clusters(n, n_clusters, solver_name) - cs = busmap.unique() - cr = sns.color_palette("hls", len(cs)) - n.plot(bus_colors=busmap.map(dict(zip(cs, cr)))) - if fn is not None: - plt.savefig(fn, bbox_inches="tight") - del cs, cr - - if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("cluster_network", simpl="", clusters="40") + snakemake = mock_snakemake("cluster_network", clusters=60) configure_logging(snakemake) set_scenario_config(snakemake) @@ -470,43 +350,20 @@ if __name__ == "__main__": solver_name = snakemake.config["solving"]["solver"]["name"] n = pypsa.Network(snakemake.input.network) + buses_prev, lines_prev, links_prev = len(n.buses), len(n.lines), len(n.links) - # remove integer outputs for compatibility with PyPSA v0.26.0 - n.generators.drop("n_mod", axis=1, inplace=True, errors="ignore") + load = ( + xr.open_dataarray(snakemake.input.load) + .mean(dim="time") + .to_pandas() + .reindex(n.buses.index, fill_value=0.0) + ) - exclude_carriers = params.cluster_network["exclude_carriers"] - aggregate_carriers = set(n.generators.carrier) - set(exclude_carriers) - conventional_carriers = set(params.conventional_carriers) - if snakemake.wildcards.clusters.endswith("m"): - n_clusters = int(snakemake.wildcards.clusters[:-1]) - aggregate_carriers = conventional_carriers & aggregate_carriers - elif snakemake.wildcards.clusters.endswith("c"): - n_clusters = int(snakemake.wildcards.clusters[:-1]) - aggregate_carriers = aggregate_carriers - conventional_carriers - elif snakemake.wildcards.clusters == "all": + if snakemake.wildcards.clusters == "all": n_clusters = len(n.buses) else: n_clusters = int(snakemake.wildcards.clusters) - if params.cluster_network.get("consider_efficiency_classes", False): - carriers = [] - for c in aggregate_carriers: - gens = n.generators.query("carrier == @c") - low = gens.efficiency.quantile(0.10) - high = gens.efficiency.quantile(0.90) - if low >= high: - carriers += [c] - else: - labels = ["low", "medium", "high"] - suffix = pd.cut( - gens.efficiency, bins=[0, low, high, 1], labels=labels - ).astype(str) - carriers += [f"{c} {label} efficiency" for label in labels] - n.generators.update( - {"carrier": gens.carrier + " " + suffix + " efficiency"} - ) - aggregate_carriers = carriers - if n_clusters == len(n.buses): # Fast-path if no clustering is necessary busmap = n.buses.index.to_series() @@ -515,13 +372,6 @@ if __name__ == "__main__": else: Nyears = n.snapshot_weightings.objective.sum() / 8760 - hvac_overhead_cost = load_costs( - snakemake.input.tech_costs, - params.costs, - params.max_hours, - Nyears, - ).at["HVAC overhead", "capital_cost"] - custom_busmap = params.custom_busmap if custom_busmap: custom_busmap = pd.read_csv( @@ -529,32 +379,42 @@ if __name__ == "__main__": ).squeeze() custom_busmap.index = custom_busmap.index.astype(str) logger.info(f"Imported custom busmap from {snakemake.input.custom_busmap}") + busmap = custom_busmap + else: + algorithm = params.cluster_network["algorithm"] + features = None + if algorithm == "hac": + features = get_feature_data_for_hac(snakemake.input.hac_features) + fix_country_assignment_for_hac(n) + + n.determine_network_topology() + + n_clusters_c = distribute_n_clusters_to_countries( + n, + n_clusters, + load, + focus_weights=params.focus_weights, + solver_name=solver_name, + ) + + busmap = busmap_for_n_clusters( + n, + n_clusters_c, + cluster_weights=load, + algorithm=algorithm, + features=features, + ) clustering = clustering_for_n_clusters( n, - n_clusters, - custom_busmap, - aggregate_carriers, - params.length_factor, - params.aggregation_strategies, - solver_name, - params.cluster_network["algorithm"], - params.cluster_network["feature"], - hvac_overhead_cost, - params.focus_weights, + busmap, + line_length_factor=params.length_factor, + aggregation_strategies=params.aggregation_strategies, ) nc = clustering.network - update_p_nom_max(nc) - if params.cluster_network.get("consider_efficiency_classes"): - labels = [f" {label} efficiency" for label in ["low", "medium", "high"]] - nc.generators["carrier"] = nc.generators.carrier.replace(labels, "", regex=True) - - for attr in ( - "busmap", - "linemap", - ): # also available: linemap_positive, linemap_negative + for attr in ["busmap", "linemap"]: getattr(clustering, attr).to_csv(snakemake.output[attr]) # nc.shapes = n.shapes.copy() @@ -566,3 +426,10 @@ if __name__ == "__main__": nc.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards))) nc.export_to_netcdf(snakemake.output.network) + + logger.info( + f"Clustered network:\n" + f"Buses: {buses_prev} to {len(nc.buses)}\n" + f"Lines: {lines_prev} to {len(nc.lines)}\n" + f"Links: {links_prev} to {len(nc.links)}" + ) diff --git a/scripts/determine_availability_matrix.py b/scripts/determine_availability_matrix.py new file mode 100644 index 00000000..8006740e --- /dev/null +++ b/scripts/determine_availability_matrix.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# SPDX-FileCopyrightText: : 2017-2024 The PyPSA-Eur Authors +# +# SPDX-License-Identifier: MIT +""" +The script performs a land eligibility analysis of what share of land is +availability for developing the selected technology at each cutout grid cell. +The script uses the `atlite `_ library and +several GIS datasets like the CORINE land use data, LUISA land use data, +Natura2000 nature reserves, GEBCO bathymetry data, and shipping lanes. + +Relevant settings +----------------- + +.. code:: yaml + + atlite: + nprocesses: + + renewable: + {technology}: + cutout: corine: luisa: grid_codes: distance: natura: max_depth: + min_depth: max_shore_distance: min_shore_distance: resource: + +.. seealso:: + Documentation of the configuration file ``config/config.yaml`` at + :ref:`atlite_cf`, :ref:`renewable_cf` + +Inputs +------ + +- ``data/bundle/corine/g250_clc06_V18_5.tif``: `CORINE Land Cover (CLC) + `_ inventory on `44 + classes `_ of + land use (e.g. forests, arable land, industrial, urban areas) at 100m + resolution. + + .. image:: img/corine.png + :scale: 33 % + +- ``data/LUISA_basemap_020321_50m.tif``: `LUISA Base Map + `_ land + coverage dataset at 50m resolution similar to CORINE. For codes in relation to + CORINE land cover, see `Annex 1 of the technical documentation + `_. + +- ``data/bundle/gebco/GEBCO_2014_2D.nc``: A `bathymetric + `_ data set with a global terrain + model for ocean and land at 15 arc-second intervals by the `General + Bathymetric Chart of the Oceans (GEBCO) + `_. + + .. image:: img/gebco_2019_grid_image.jpg + :scale: 50 % + + **Source:** `GEBCO + `_ + +- ``resources/natura.tiff``: confer :ref:`natura` +- ``resources/offshore_shapes.geojson``: confer :ref:`shapes` +- ``resources/regions_onshore_base_s_{clusters}.geojson``: (if not offshore + wind), confer :ref:`busregions` +- ``resources/regions_offshore_base_s_{clusters}.geojson``: (if offshore wind), + :ref:`busregions` +- ``"cutouts/" + params["renewable"][{technology}]['cutout']``: :ref:`cutout` +- ``networks/_base_s_{clusters}.nc``: :ref:`base` + +Outputs +------- + +- ``resources/availability_matrix_{clusters_{technology}.nc`` +""" +import functools +import logging +import time + +import atlite +import geopandas as gpd +import numpy as np +import xarray as xr +from _helpers import configure_logging, set_scenario_config + +logger = logging.getLogger(__name__) + + +if __name__ == "__main__": + if "snakemake" not in globals(): + from _helpers import mock_snakemake + + snakemake = mock_snakemake( + "build_renewable_profiles", clusters=100, technology="onwind" + ) + configure_logging(snakemake) + set_scenario_config(snakemake) + + nprocesses = int(snakemake.threads) + noprogress = snakemake.config["run"].get("disable_progressbar", True) + noprogress = noprogress or not snakemake.config["atlite"]["show_progress"] + technology = snakemake.wildcards.technology + params = snakemake.params.renewable[technology] + + cutout = atlite.Cutout(snakemake.input.cutout) + regions = gpd.read_file(snakemake.input.regions) + assert not regions.empty, ( + f"List of regions in {snakemake.input.regions} is empty, please " + "disable the corresponding renewable technology" + ) + # do not pull up, set_index does not work if geo dataframe is empty + regions = regions.set_index("name").rename_axis("bus") + + res = params.get("excluder_resolution", 100) + excluder = atlite.ExclusionContainer(crs=3035, res=res) + + if params["natura"]: + excluder.add_raster(snakemake.input.natura, nodata=0, allow_no_overlap=True) + + for dataset in ["corine", "luisa"]: + kwargs = {"nodata": 0} if dataset == "luisa" else {} + settings = params.get(dataset, {}) + if not settings: + continue + if dataset == "luisa" and res > 50: + logger.info( + "LUISA data is available at 50m resolution, " + f"but coarser {res}m resolution is used." + ) + if isinstance(settings, list): + settings = {"grid_codes": settings} + if "grid_codes" in settings: + codes = settings["grid_codes"] + excluder.add_raster( + snakemake.input[dataset], codes=codes, invert=True, crs=3035, **kwargs + ) + if settings.get("distance", 0.0) > 0.0: + codes = settings["distance_grid_codes"] + buffer = settings["distance"] + excluder.add_raster( + snakemake.input[dataset], codes=codes, buffer=buffer, crs=3035, **kwargs + ) + + if params.get("ship_threshold"): + shipping_threshold = ( + params["ship_threshold"] * 8760 * 6 + ) # approximation because 6 years of data which is hourly collected + func = functools.partial(np.less, shipping_threshold) + excluder.add_raster( + snakemake.input.ship_density, codes=func, crs=4326, allow_no_overlap=True + ) + + if params.get("max_depth"): + # lambda not supported for atlite + multiprocessing + # use named function np.greater with partially frozen argument instead + # and exclude areas where: -max_depth > grid cell depth + func = functools.partial(np.greater, -params["max_depth"]) + excluder.add_raster(snakemake.input.gebco, codes=func, crs=4326, nodata=-1000) + + if params.get("min_depth"): + func = functools.partial(np.greater, -params["min_depth"]) + excluder.add_raster( + snakemake.input.gebco, codes=func, crs=4326, nodata=-1000, invert=True + ) + + if "min_shore_distance" in params: + buffer = params["min_shore_distance"] + excluder.add_geometry(snakemake.input.country_shapes, buffer=buffer) + + if "max_shore_distance" in params: + buffer = params["max_shore_distance"] + excluder.add_geometry( + snakemake.input.country_shapes, buffer=buffer, invert=True + ) + + logger.info(f"Calculate landuse availability for {technology}...") + start = time.time() + + kwargs = dict(nprocesses=nprocesses, disable_progressbar=noprogress) + availability = cutout.availabilitymatrix(regions, excluder, **kwargs) + + duration = time.time() - start + logger.info( + f"Completed landuse availability calculation for {technology} ({duration:2.2f}s)" + ) + + # For Moldova and Ukraine: Overwrite parts not covered by Corine with + # externally determined available areas + if "availability_matrix_MD_UA" in snakemake.input.keys(): + availability_MDUA = xr.open_dataarray( + snakemake.input["availability_matrix_MD_UA"] + ) + availability.loc[availability_MDUA.coords] = availability_MDUA + + availability.to_netcdf(snakemake.output[0]) diff --git a/scripts/determine_availability_matrix_MD_UA.py b/scripts/determine_availability_matrix_MD_UA.py index 0e7962ab..424f1937 100644 --- a/scripts/determine_availability_matrix_MD_UA.py +++ b/scripts/determine_availability_matrix_MD_UA.py @@ -34,21 +34,21 @@ if __name__ == "__main__": from _helpers import mock_snakemake snakemake = mock_snakemake( - "determine_availability_matrix_MD_UA", technology="solar" + "determine_availability_matrix_MD_UA", clusters=100, technology="solar" ) configure_logging(snakemake) set_scenario_config(snakemake) nprocesses = int(snakemake.threads) noprogress = not snakemake.config["atlite"].get("show_progress", True) - config = snakemake.config["renewable"][snakemake.wildcards.technology] + config = snakemake.params["renewable"][snakemake.wildcards.technology] cutout = atlite.Cutout(snakemake.input.cutout) regions = ( gpd.read_file(snakemake.input.regions).set_index("name").rename_axis("bus") ) # Limit to "UA" and "MD" regions - buses = regions.loc[regions["country"].isin(["UA", "MD"])].index.values + buses = regions.filter(regex="(UA|MD)", axis=0).index.values regions = regions.loc[buses] excluder = atlite.ExclusionContainer(crs=3035, res=100) @@ -125,24 +125,24 @@ if __name__ == "__main__": time.sleep(1) excluder.add_geometry(pts_tmp_fn) - if "max_depth" in config: + if config.get("max_depth"): # lambda not supported for atlite + multiprocessing # use named function np.greater with partially frozen argument instead # and exclude areas where: -max_depth > grid cell depth func = functools.partial(np.greater, -config["max_depth"]) excluder.add_raster(snakemake.input.gebco, codes=func, crs=4236, nodata=-1000) - if "min_shore_distance" in config: + if config.get("min_shore_distance"): buffer = config["min_shore_distance"] excluder.add_geometry(snakemake.input.country_shapes, buffer=buffer) - if "max_shore_distance" in config: + if config.get("max_shore_distance"): buffer = config["max_shore_distance"] excluder.add_geometry( snakemake.input.country_shapes, buffer=buffer, invert=True ) - if "ship_threshold" in config: + if config.get("ship_threshold"): shipping_threshold = config["ship_threshold"] * 8760 * 6 func = functools.partial(np.less, shipping_threshold) excluder.add_raster( diff --git a/scripts/make_summary.py b/scripts/make_summary.py index 5746697b..1f92b91a 100644 --- a/scripts/make_summary.py +++ b/scripts/make_summary.py @@ -761,8 +761,7 @@ if __name__ == "__main__": networks_dict = { (cluster, ll, opt + sector_opt, planning_horizon): "results/" + snakemake.params.RDIR - + f"/postnetworks/elec_s{simpl}_{cluster}_l{ll}_{opt}_{sector_opt}_{planning_horizon}.nc" - for simpl in snakemake.params.scenario["simpl"] + + f"/postnetworks/base_s_{cluster}_l{ll}_{opt}_{sector_opt}_{planning_horizon}.nc" for cluster in snakemake.params.scenario["clusters"] for opt in snakemake.params.scenario["opts"] for sector_opt in snakemake.params.scenario["sector_opts"] diff --git a/scripts/make_summary_perfect.py b/scripts/make_summary_perfect.py index 59aa6e74..842eb000 100644 --- a/scripts/make_summary_perfect.py +++ b/scripts/make_summary_perfect.py @@ -732,8 +732,7 @@ if __name__ == "__main__": networks_dict = { (clusters, lv, opts + sector_opts): "results/" + run - + f"postnetworks/elec_s{simpl}_{clusters}_l{lv}_{opts}_{sector_opts}_brownfield_all_years.nc" - for simpl in snakemake.config["scenario"]["simpl"] + + f"postnetworks/base_s_{clusters}_l{lv}_{opts}_{sector_opts}_brownfield_all_years.nc" for clusters in snakemake.config["scenario"]["clusters"] for opts in snakemake.config["scenario"]["opts"] for sector_opts in snakemake.config["scenario"]["sector_opts"] diff --git a/scripts/plot_gas_network.py b/scripts/plot_gas_network.py index 26186d51..7f3fe86c 100644 --- a/scripts/plot_gas_network.py +++ b/scripts/plot_gas_network.py @@ -229,7 +229,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "plot_gas_network", - simpl="", opts="", clusters="37", ll="v1.0", diff --git a/scripts/plot_hydrogen_network.py b/scripts/plot_hydrogen_network.py index 6d666acd..57850116 100644 --- a/scripts/plot_hydrogen_network.py +++ b/scripts/plot_hydrogen_network.py @@ -256,7 +256,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "plot_hydrogen_network", - simpl="", opts="", clusters="37", ll="v1.0", diff --git a/scripts/plot_power_network.py b/scripts/plot_power_network.py index 6db53bcc..d358229b 100644 --- a/scripts/plot_power_network.py +++ b/scripts/plot_power_network.py @@ -249,7 +249,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "plot_power_network", - simpl="", opts="", clusters="37", ll="v1.0", diff --git a/scripts/plot_power_network_perfect.py b/scripts/plot_power_network_perfect.py index f7506a00..7d2252be 100644 --- a/scripts/plot_power_network_perfect.py +++ b/scripts/plot_power_network_perfect.py @@ -176,7 +176,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "plot_power_network_perfect", - simpl="", opts="", clusters="37", ll="v1.0", diff --git a/scripts/plot_statistics.py b/scripts/plot_statistics.py index 738fa618..cc98a536 100644 --- a/scripts/plot_statistics.py +++ b/scripts/plot_statistics.py @@ -18,7 +18,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "plot_elec_statistics", - simpl="", opts="Ept-12h", clusters="37", ll="v1.0", diff --git a/scripts/plot_validation_cross_border_flows.py b/scripts/plot_validation_cross_border_flows.py index 8de7d8a1..9107726b 100644 --- a/scripts/plot_validation_cross_border_flows.py +++ b/scripts/plot_validation_cross_border_flows.py @@ -181,7 +181,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "plot_electricity_prices", - simpl="", opts="Ept-12h", clusters="37", ll="v1.0", diff --git a/scripts/plot_validation_electricity_prices.py b/scripts/plot_validation_electricity_prices.py index 9efd6c46..b210086d 100644 --- a/scripts/plot_validation_electricity_prices.py +++ b/scripts/plot_validation_electricity_prices.py @@ -18,7 +18,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "plot_electricity_prices", - simpl="", opts="Ept-12h", clusters="37", ll="v1.0", diff --git a/scripts/plot_validation_electricity_production.py b/scripts/plot_validation_electricity_production.py index f842bea3..6336b7a7 100644 --- a/scripts/plot_validation_electricity_production.py +++ b/scripts/plot_validation_electricity_production.py @@ -29,7 +29,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "plot_validation_electricity_production", - simpl="", opts="Ept", clusters="37c", ll="v1.0", diff --git a/scripts/prepare_network.py b/scripts/prepare_network.py index 05f40730..bf36c089 100755 --- a/scripts/prepare_network.py +++ b/scripts/prepare_network.py @@ -41,12 +41,12 @@ 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/elec_s{simpl}_{clusters}.nc``: confer :ref:`cluster` +- ``networks/base_s_{clusters}.nc``: confer :ref:`cluster` Outputs ------- -- ``networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc``: Complete PyPSA network that will be handed to the ``solve_network`` rule. +- ``networks/base_s_{clusters}_elec_l{ll}_{opts}.nc``: Complete PyPSA network that will be handed to the ``solve_network`` rule. Description ----------- @@ -68,7 +68,7 @@ from _helpers import ( set_scenario_config, update_config_from_wildcards, ) -from add_electricity import load_costs, update_transmission_costs +from add_electricity import load_costs, set_transmission_costs from pypsa.descriptors import expand_series idx = pd.IndexSlice @@ -191,7 +191,7 @@ def set_transmission_limit(n, ll_type, factor, costs, Nyears=1): + n.links.loc[links_dc_b, "p_nom"] @ n.links.loc[links_dc_b, col] ) - update_transmission_costs(n, costs) + set_transmission_costs(n, costs) if factor == "opt" or float(factor) > 1.0: n.lines["s_nom_min"] = lines_s_nom @@ -325,7 +325,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "prepare_network", - simpl="", clusters="37", ll="v1.0", opts="Co2L-4H", diff --git a/scripts/prepare_perfect_foresight.py b/scripts/prepare_perfect_foresight.py index efc95700..f3501913 100644 --- a/scripts/prepare_perfect_foresight.py +++ b/scripts/prepare_perfect_foresight.py @@ -493,7 +493,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "prepare_perfect_foresight", - simpl="", opts="", clusters="37", ll="v1.5", diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 4c7c059a..0821a4f0 100755 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -407,12 +407,20 @@ def create_network_topology( return topo -# TODO merge issue with PyPSA-Eur -def update_wind_solar_costs(n, costs): +def update_wind_solar_costs( + n: pypsa.Network, + costs: pd.DataFrame, + line_length_factor: int | float = 1, + landfall_lengths: dict = None, +) -> None: """ Update costs for wind and solar generators added with pypsa-eur to those cost in the planning year. """ + + if landfall_lengths is None: + landfall_lengths = {} + # NB: solar costs are also manipulated for rooftop # when distribution grid is inserted n.generators.loc[n.generators.carrier == "solar", "capital_cost"] = costs.at[ @@ -424,22 +432,9 @@ def update_wind_solar_costs(n, costs): ] # for offshore wind, need to calculated connection costs - - # assign clustered bus - # map initial network -> simplified network - busmap_s = pd.read_csv(snakemake.input.busmap_s, index_col=0).squeeze() - busmap_s.index = busmap_s.index.astype(str) - busmap_s = busmap_s.astype(str) - # map simplified network -> clustered network - busmap = pd.read_csv(snakemake.input.busmap, index_col=0).squeeze() - busmap.index = busmap.index.astype(str) - busmap = busmap.astype(str) - # map initial network -> clustered network - clustermaps = busmap_s.map(busmap) - - # code adapted from pypsa-eur/scripts/add_electricity.py for connection in ["dc", "ac", "float"]: tech = "offwind-" + connection + landfall_length = landfall_lengths.get(tech, 0.0) if tech not in n.generators.carrier.values: continue profile = snakemake.input["profile_offwind-" + connection] @@ -449,31 +444,13 @@ def update_wind_solar_costs(n, costs): if "year" in ds.indexes: ds = ds.sel(year=ds.year.min(), drop=True) - underwater_fraction = ds["underwater_fraction"].to_pandas() - connection_cost = ( - snakemake.params.length_factor - * ds["average_distance"].to_pandas() - * ( - underwater_fraction - * costs.at[tech + "-connection-submarine", "fixed"] - + (1.0 - underwater_fraction) - * costs.at[tech + "-connection-underground", "fixed"] - ) + distance = ds["average_distance"].to_pandas() + submarine_cost = costs.at[tech + "-connection-submarine", "fixed"] + underground_cost = costs.at[tech + "-connection-underground", "fixed"] + connection_cost = line_length_factor * ( + distance * submarine_cost + landfall_length * underground_cost ) - # convert to aggregated clusters with weighting - weight = ds["weight"].to_pandas() - - # e.g. clusters == 37m means that VRE generators are left - # at clustering of simplified network, but that they are - # connected to 37-node network - genmap = ( - busmap_s if snakemake.wildcards.clusters[-1:] == "m" else clustermaps - ) - connection_cost = (connection_cost * weight).groupby( - genmap - ).sum() / weight.groupby(genmap).sum() - capital_cost = ( costs.at["offwind", "fixed"] + costs.at[tech + "-station", "fixed"] @@ -613,10 +590,10 @@ def remove_non_electric_buses(n): n.buses = n.buses[n.buses.carrier.isin(["AC", "DC"])] -def patch_electricity_network(n): +def patch_electricity_network(n, costs, landfall_lengths): remove_elec_base_techs(n) remove_non_electric_buses(n) - update_wind_solar_costs(n, costs) + update_wind_solar_costs(n, costs, landfall_lengths=landfall_lengths) n.loads["carrier"] = "electricity" n.buses["location"] = n.buses.index n.buses["unit"] = "MWh_el" @@ -1340,13 +1317,7 @@ def insert_electricity_distribution_grid(n, costs): # set existing solar to cost of utility cost rather the 50-50 rooftop-utility solar = n.generators.index[n.generators.carrier == "solar"] n.generators.loc[solar, "capital_cost"] = costs.at["solar-utility", "fixed"] - if snakemake.wildcards.clusters[-1:] == "m": - simplified_pop_layout = pd.read_csv( - snakemake.input.simplified_pop_layout, index_col=0 - ) - pop_solar = simplified_pop_layout.total.rename(index=lambda x: x + " solar") - else: - pop_solar = pop_layout.total.rename(index=lambda x: x + " solar") + pop_solar = pop_layout.total.rename(index=lambda x: x + " solar") # add max solar rooftop potential assuming 0.1 kW/m2 and 20 m2/person, # i.e. 2 kW/person (population data is in thousands of people) so we get MW @@ -4621,7 +4592,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "prepare_sector_network", - simpl="", opts="", clusters="38", ll="vopt", @@ -4658,12 +4628,17 @@ if __name__ == "__main__": ) pop_weighted_energy_totals.update(pop_weighted_heat_totals) + landfall_lengths = { + tech: settings["landfall_length"] + for tech, settings in snakemake.params.renewable.items() + if "landfall_length" in settings.keys() + } + patch_electricity_network(n, costs, landfall_lengths) + fn = snakemake.input.heating_efficiencies year = int(snakemake.params["energy_totals_year"]) heating_efficiencies = pd.read_csv(fn, index_col=[1, 0]).loc[year] - patch_electricity_network(n) - spatial = define_spatial(pop_layout.index, options) if snakemake.params.foresight in ["myopic", "perfect"]: diff --git a/scripts/simplify_network.py b/scripts/simplify_network.py index e9589120..34309150 100644 --- a/scripts/simplify_network.py +++ b/scripts/simplify_network.py @@ -19,96 +19,74 @@ Relevant Settings cluster_network: aggregation_strategies: - costs: - year: - version: - fill_values: - marginal_cost: - capital_cost: - - electricity: - max_hours: - - lines: - length_factor: - links: p_max_pu: - solving: - solver: - name: .. seealso:: Documentation of the configuration file ``config/config.yaml`` at - :ref:`costs_cf`, :ref:`electricity_cf`, :ref:`renewable_cf`, - :ref:`lines_cf`, :ref:`links_cf`, :ref:`solving_cf` + :ref:`electricity_cf`, :ref:`renewable_cf`, + :ref:`lines_cf`, :ref:`links_cf` 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. - ``resources/regions_onshore.geojson``: confer :ref:`busregions` - ``resources/regions_offshore.geojson``: confer :ref:`busregions` -- ``networks/elec.nc``: confer :ref:`electricity` +- ``networks/base.nc`` Outputs ------- -- ``resources/regions_onshore_elec_s{simpl}.geojson``: +- ``resources/regions_onshore_base.geojson``: - .. image:: img/regions_onshore_elec_s.png + .. image:: img/regions_onshore_base_s.png :scale: 33 % -- ``resources/regions_offshore_elec_s{simpl}.geojson``: +- ``resources/regions_offshore_base.geojson``: - .. image:: img/regions_offshore_elec_s .png + .. image:: img/regions_offshore_base_s .png :scale: 33 % -- ``resources/busmap_elec_s{simpl}.csv``: Mapping of buses from ``networks/elec.nc`` to ``networks/elec_s{simpl}.nc``; -- ``networks/elec_s{simpl}.nc``: +- ``resources/busmap_base_s.csv``: Mapping of buses from ``networks/base.nc`` to ``networks/base_s.nc``; +- ``networks/base.nc``: - .. image:: img/elec_s.png + .. image:: img/base_s.png :scale: 33 % Description ----------- -The rule :mod:`simplify_network` does up to four things: +The rule :mod:`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(...)``. The components attached to buses in between are moved to the nearest endpoint. The grid connection cost of offshore wind generators are added to the capital costs of the generator. +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(...)``. Components are moved along. - -4. Optionally, if an integer were provided for the wildcard ``{simpl}`` (e.g. ``networks/elec_s500.nc``), the network is clustered to this number of clusters with the routines from the ``cluster_network`` rule with the function ``cluster_network.cluster(...)``. This step is usually skipped! +3. Stub lines and links, i.e. dead-ends of the network, are sequentially removed from the network in the function ``remove_stubs(...)``. """ import logging from functools import reduce +from typing import Tuple import geopandas as gpd import numpy as np import pandas as pd import pypsa import scipy as sp -from _helpers import configure_logging, set_scenario_config, update_p_nom_max -from add_electricity import load_costs +from _helpers import configure_logging, set_scenario_config from base_network import append_bus_shapes -from cluster_network import cluster_regions, clustering_for_n_clusters -from pypsa.clustering.spatial import ( - aggregateoneport, - busmap_by_stubs, - get_clustering_from_busmap, -) -from pypsa.io import import_components_from_dataframe, import_series_from_dataframe +from cluster_network import cluster_regions +from pypsa.clustering.spatial import busmap_by_stubs, get_clustering_from_busmap from scipy.sparse.csgraph import connected_components, dijkstra logger = logging.getLogger(__name__) -def simplify_network_to_380(n, linetype_380): +def simplify_network_to_380( + n: pypsa.Network, linetype_380: str +) -> Tuple[pypsa.Network, pd.Series]: """ Fix all lines to a voltage level of 380 kV and remove all transformers. @@ -149,123 +127,7 @@ def simplify_network_to_380(n, linetype_380): return n, trafo_map -def _prepare_connection_costs_per_link(n, costs, renewable_carriers, length_factor): - if n.links.empty: - return {} - - return { - tech: ( - n.links.length - * length_factor - * ( - n.links.underwater_fraction - * costs.at[tech + "-connection-submarine", "capital_cost"] - + (1.0 - n.links.underwater_fraction) - * costs.at[tech + "-connection-underground", "capital_cost"] - ) - ) - for tech in renewable_carriers - if tech.startswith("offwind") - } - - -def _compute_connection_costs_to_bus( - n, - busmap, - costs, - renewable_carriers, - length_factor, - connection_costs_per_link=None, - buses=None, -): - if connection_costs_per_link is None: - connection_costs_per_link = _prepare_connection_costs_per_link( - n, costs, renewable_carriers, length_factor - ) - - if buses is None: - buses = busmap.index[busmap.index != busmap.values] - - connection_costs_to_bus = pd.DataFrame(index=buses) - - for tech in connection_costs_per_link: - adj = n.adjacency_matrix( - weights=pd.concat( - dict( - Link=connection_costs_per_link[tech].reindex(n.links.index), - Line=pd.Series(0.0, n.lines.index), - ) - ) - ) - - costs_between_buses = dijkstra( - adj, directed=False, indices=n.buses.index.get_indexer(buses) - ) - connection_costs_to_bus[tech] = costs_between_buses[ - np.arange(len(buses)), n.buses.index.get_indexer(busmap.loc[buses]) - ] - - return connection_costs_to_bus - - -def _adjust_capital_costs_using_connection_costs(n, connection_costs_to_bus): - connection_costs = {} - for tech in connection_costs_to_bus: - tech_b = n.generators.carrier == tech - costs = ( - n.generators.loc[tech_b, "bus"] - .map(connection_costs_to_bus[tech]) - .loc[lambda s: s > 0] - ) - if not costs.empty: - n.generators.loc[costs.index, "capital_cost"] += costs - logger.info( - "Displacing {} generator(s) and adding connection costs to capital_costs: {} ".format( - tech, - ", ".join( - "{:.0f} Eur/MW/a for `{}`".format(d, b) - for b, d in costs.items() - ), - ) - ) - connection_costs[tech] = costs - - -def _aggregate_and_move_components( - n, - busmap, - connection_costs_to_bus, - aggregate_one_ports={"Load", "StorageUnit"}, - aggregation_strategies=dict(), - exclude_carriers=None, -): - def replace_components(n, c, df, pnl): - n.mremove(c, n.df(c).index) - - import_components_from_dataframe(n, df, c) - for attr, df in pnl.items(): - if not df.empty: - import_series_from_dataframe(n, df, c, attr) - - _adjust_capital_costs_using_connection_costs(n, connection_costs_to_bus) - - generator_strategies = aggregation_strategies["generators"] - - carriers = set(n.generators.carrier) - set(exclude_carriers) - generators, generators_pnl = aggregateoneport( - n, - busmap, - "Generator", - carriers=carriers, - custom_strategies=generator_strategies, - ) - - replace_components(n, "Generator", generators, generators_pnl) - - for one_port in aggregate_one_ports: - df, pnl = aggregateoneport(n, busmap, component=one_port) - replace_components(n, one_port, df, pnl) - +def _remove_clustered_buses_and_branches(n: pypsa.Network, busmap: pd.Series) -> None: buses_to_del = n.buses.index.difference(busmap) n.mremove("Bus", buses_to_del) for c in n.branch_components: @@ -274,14 +136,8 @@ def _aggregate_and_move_components( def simplify_links( - n, - costs, - renewables, - length_factor, - p_max_pu, - exclude_carriers, - aggregation_strategies=dict(), -): + n: pypsa.Network, p_max_pu: int | float +) -> Tuple[pypsa.Network, pd.Series]: ## Complex multi-node links are folded into end-points logger.info("Simplifying connected link components") @@ -343,13 +199,6 @@ def simplify_links( busmap = n.buses.index.to_series() - connection_costs_per_link = _prepare_connection_costs_per_link( - n, costs, renewables, length_factor - ) - connection_costs_to_bus = pd.DataFrame( - 0.0, index=n.buses.index, columns=list(connection_costs_per_link) - ) - node_corsica = find_closest_bus( n, x=9.44802, @@ -375,15 +224,6 @@ def simplify_links( n.buses.loc[b, ["x", "y"]], n.buses.loc[buses[1:-1], ["x", "y"]] ) busmap.loc[buses] = b[np.r_[0, m.argmin(axis=0), 1]] - connection_costs_to_bus.loc[buses] += _compute_connection_costs_to_bus( - n, - busmap, - costs, - renewables, - length_factor, - connection_costs_per_link, - buses, - ) all_links = [i for _, i in sum(links, [])] @@ -421,61 +261,41 @@ def simplify_links( params.setdefault(attr, default) n.links.loc[name] = pd.Series(params) - # n.add("Link", **params) + # n.add("Link", name, **params) logger.debug("Collecting all components using the busmap") + _remove_clustered_buses_and_branches(n, busmap) + # Change carrier type of all added super_nodes to "AC" n.buses.loc[added_supernodes, "carrier"] = "AC" - _aggregate_and_move_components( - n, - busmap, - connection_costs_to_bus, - aggregation_strategies=aggregation_strategies, - exclude_carriers=exclude_carriers, - ) return n, busmap def remove_stubs( - n, - costs, - renewable_carriers, - length_factor, - simplify_network, - aggregation_strategies=dict(), -): + n: pypsa.Network, simplify_network: dict +) -> Tuple[pypsa.Network, pd.Series]: logger.info("Removing stubs") across_borders = simplify_network["remove_stubs_across_borders"] matching_attrs = [] if across_borders else ["country"] busmap = busmap_by_stubs(n, matching_attrs) - connection_costs_to_bus = _compute_connection_costs_to_bus( - n, busmap, costs, renewable_carriers, length_factor - ) - - _aggregate_and_move_components( - n, - busmap, - connection_costs_to_bus, - aggregation_strategies=aggregation_strategies, - exclude_carriers=simplify_network["exclude_carriers"], - ) + _remove_clustered_buses_and_branches(n, busmap) return n, busmap -def aggregate_to_substations(n, aggregation_strategies=dict(), buses_i=None): +def aggregate_to_substations( + n: pypsa.Network, + buses_i: pd.Index | list, + aggregation_strategies: dict | None = None, +) -> Tuple[pypsa.Network, pd.Series]: # can be used to aggregate a selection of buses to electrically closest neighbors - # if no buses are given, nodes that are no substations or without offshore connection are aggregated - - if buses_i is None: - logger.info( - "Aggregating buses that are no substations or have no valid offshore connection" - ) - buses_i = list(set(n.buses.index) - set(n.generators.bus) - set(n.loads.bus)) + logger.info("Aggregating buses to substations") + if aggregation_strategies is None: + aggregation_strategies = dict() weight = pd.concat( { @@ -503,49 +323,21 @@ def aggregate_to_substations(n, aggregation_strategies=dict(), buses_i=None): busmap.loc[buses_i] = dist.idxmin(1) line_strategies = aggregation_strategies.get("lines", dict()) - generator_strategies = aggregation_strategies.get("generators", dict()) - one_port_strategies = aggregation_strategies.get("one_ports", dict()) + + bus_strategies = aggregation_strategies.get("buses", dict()) + bus_strategies.setdefault("substation_lv", lambda x: bool(x.sum())) + bus_strategies.setdefault("substation_off", lambda x: bool(x.sum())) clustering = get_clustering_from_busmap( n, busmap, - aggregate_generators_weighted=True, - aggregate_generators_carriers=None, - aggregate_one_ports=["Load", "StorageUnit"], line_length_factor=1.0, + bus_strategies=bus_strategies, line_strategies=line_strategies, - generator_strategies=generator_strategies, - one_port_strategies=one_port_strategies, - scale_link_capital_costs=False, ) return clustering.network, busmap -def cluster( - n, - n_clusters, - focus_weights, - solver_name, - algorithm="hac", - feature=None, - aggregation_strategies=dict(), -): - logger.info(f"Clustering to {n_clusters} buses") - - clustering = clustering_for_n_clusters( - n, - n_clusters, - custom_busmap=False, - aggregation_strategies=aggregation_strategies, - solver_name=solver_name, - algorithm=algorithm, - feature=feature, - focus_weights=focus_weights, - ) - - return clustering.network, clustering.busmap - - def find_closest_bus(n, x, y, tol=2000): """ Find the index of the closest bus to the given coordinates within a specified tolerance. @@ -586,71 +378,28 @@ if __name__ == "__main__": if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("simplify_network", simpl="", run="all") + snakemake = mock_snakemake("simplify_network") configure_logging(snakemake) set_scenario_config(snakemake) params = snakemake.params - solver_name = snakemake.config["solving"]["solver"]["name"] n = pypsa.Network(snakemake.input.network) Nyears = n.snapshot_weightings.objective.sum() / 8760 - - # remove integer outputs for compatibility with PyPSA v0.26.0 - n.generators.drop("n_mod", axis=1, inplace=True, errors="ignore") + buses_prev, lines_prev, links_prev = len(n.buses), len(n.lines), len(n.links) linetype_380 = snakemake.config["lines"]["types"][380] n, trafo_map = simplify_network_to_380(n, linetype_380) - technology_costs = load_costs( - snakemake.input.tech_costs, - params.costs, - params.max_hours, - Nyears, - ) - - n, simplify_links_map = simplify_links( - n, - technology_costs, - params.renewable_carriers, - params.length_factor, - params.p_max_pu, - params.simplify_network["exclude_carriers"], - params.aggregation_strategies, - ) + n, simplify_links_map = simplify_links(n, params.p_max_pu) busmaps = [trafo_map, simplify_links_map] if params.simplify_network["remove_stubs"]: - n, stub_map = remove_stubs( - n, - technology_costs, - params.renewable_carriers, - params.length_factor, - params.simplify_network, - aggregation_strategies=params.aggregation_strategies, - ) + n, stub_map = remove_stubs(n, params.simplify_network) busmaps.append(stub_map) - if params.simplify_network["to_substations"]: - n, substation_map = aggregate_to_substations(n, params.aggregation_strategies) - busmaps.append(substation_map) - - # treatment of outliers (nodes without a profile for considered carrier): - # all nodes that have no profile of the given carrier are being aggregated to closest neighbor - if params.simplify_network["algorithm"] == "hac": - carriers = params.simplify_network["feature"].split("-")[0].split("+") - for carrier in carriers: - buses_i = list( - set(n.buses.index) - set(n.generators.query("carrier == @carrier").bus) - ) - logger.info( - f"clustering preparation (hac): aggregating {len(buses_i)} buses of type {carrier}." - ) - n, busmap_hac = aggregate_to_substations( - n, params.aggregation_strategies, buses_i - ) - busmaps.append(busmap_hac) + substations_i = n.buses.query("substation_lv or substation_off").index # some entries in n.buses are not updated in previous functions, therefore can be wrong. as they are not needed # and are lost when clustering (for example with the simpl wildcard), we remove them for consistency: @@ -659,8 +408,6 @@ if __name__ == "__main__": "tags", "under_construction", "onshore_bus", - "substation_lv", - "substation_off", "geometry", "underground", "project_status", @@ -668,30 +415,39 @@ if __name__ == "__main__": n.buses.drop(remove, axis=1, inplace=True, errors="ignore") n.lines.drop(remove, axis=1, errors="ignore", inplace=True) - if snakemake.wildcards.simpl: - # shapes = n.shapes - n, cluster_map = cluster( - n, - int(snakemake.wildcards.simpl), - params.focus_weights, - solver_name, - params.simplify_network["algorithm"], - params.simplify_network["feature"], - params.aggregation_strategies, + if params.simplify_network["to_substations"]: + n, substation_map = aggregate_to_substations( + n, substations_i, params.aggregation_strategies ) - # n.shapes = shapes - busmaps.append(cluster_map) + busmaps.append(substation_map) - update_p_nom_max(n) + # all buses without shapes need to be clustered to their closest neighbor for HAC + if params.cluster_network["algorithm"] == "hac": + buses_i = list(n.buses.index.difference(n.shapes.idx)) + logger.info( + "Preparing for HAC-Clustering. " + f"Aggregating {len(buses_i)} buses without Voronoi shapes to closest neighbor." + ) + n, busmap_hac = aggregate_to_substations( + n, buses_i, params.aggregation_strategies + ) + busmaps.append(busmap_hac) busmap_s = reduce(lambda x, y: x.map(y), busmaps[1:], busmaps[0]) busmap_s.to_csv(snakemake.output.busmap) for which in ["regions_onshore", "regions_offshore"]: regions = gpd.read_file(snakemake.input[which]) - clustered_regions = cluster_regions(busmaps, regions) + clustered_regions = cluster_regions(busmaps, regions, with_country=True) clustered_regions.to_file(snakemake.output[which]) # append_bus_shapes(n, clustered_regions, type=which.split("_")[1]) n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards))) n.export_to_netcdf(snakemake.output.network) + + logger.info( + f"Simplified network:\n" + f"Buses: {buses_prev} to {len(n.buses)}\n" + f"Lines: {lines_prev} to {len(n.lines)}\n" + f"Links: {links_prev} to {len(n.links)}" + ) diff --git a/scripts/solve_network.py b/scripts/solve_network.py index bdc10dd1..0cbc0ec1 100644 --- a/scripts/solve_network.py +++ b/scripts/solve_network.py @@ -51,13 +51,6 @@ logger = logging.getLogger(__name__) pypsa.pf.logger.setLevel(logging.WARNING) -def add_land_use_constraint(n, planning_horizons, config): - if "m" in snakemake.wildcards.clusters: - _add_land_use_constraint_m(n, planning_horizons, config) - else: - _add_land_use_constraint(n) - - def add_land_use_constraint_perfect(n): """ Add global constraints for tech capacity limit. @@ -121,7 +114,7 @@ def add_land_use_constraint_perfect(n): return n -def _add_land_use_constraint(n): +def add_land_use_constraint(n): # warning: this will miss existing offwind which is not classed AC-DC and has carrier 'offwind' for carrier in [ @@ -159,58 +152,6 @@ def _add_land_use_constraint(n): n.generators["p_nom_max"] = n.generators["p_nom_max"].clip(lower=0) -def _add_land_use_constraint_m(n, planning_horizons, config): - # if generators clustering is lower than network clustering, land_use accounting is at generators clusters - - grouping_years = config["existing_capacities"]["grouping_years_power"] - current_horizon = snakemake.wildcards.planning_horizons - - for carrier in [ - "solar", - "solar rooftop", - "solar-hsat", - "onwind", - "offwind-ac", - "offwind-dc", - ]: - - existing = n.generators.loc[n.generators.carrier == carrier, "p_nom"] - ind = list( - {i.split(sep=" ")[0] + " " + i.split(sep=" ")[1] for i in existing.index} - ) - - previous_years = [ - str(y) - for y in set(planning_horizons + grouping_years) - if y < int(snakemake.wildcards.planning_horizons) - ] - - for p_year in previous_years: - ind2 = [ - i for i in ind if i + " " + carrier + "-" + p_year in existing.index - ] - sel_current = [i + " " + carrier + "-" + current_horizon for i in ind2] - sel_p_year = [i + " " + carrier + "-" + p_year for i in ind2] - n.generators.loc[sel_current, "p_nom_max"] -= existing.loc[ - sel_p_year - ].rename(lambda x: x[:-4] + current_horizon) - - # check if existing capacities are larger than technical potential - existing_large = n.generators[ - n.generators["p_nom_min"] > n.generators["p_nom_max"] - ].index - if len(existing_large): - logger.warning( - f"Existing capacities larger than technical potential for {existing_large},\ - adjust technical potential to existing capacities" - ) - n.generators.loc[existing_large, "p_nom_max"] = n.generators.loc[ - existing_large, "p_nom_min" - ] - - n.generators["p_nom_max"] = n.generators["p_nom_max"].clip(lower=0) - - def add_solar_potential_constraints(n, config): """ Add constraint to make sure the sum capacity of all solar technologies (fixed, tracking, ets. ) is below the region potential. @@ -246,37 +187,17 @@ def add_solar_potential_constraints(n, config): lambda x: (x * factor) if carrier in x.name else x, axis=1 ) - if "m" in snakemake.wildcards.clusters: - location = pd.Series( - [" ".join(i.split(" ")[:2]) for i in n.generators.index], - index=n.generators.index, - ) - ggrouper = pd.Series( - n.generators.loc[solar].index.rename("bus").map(location), - index=n.generators.loc[solar].index, - ).to_xarray() - rhs = ( - n.generators.loc[solar_today, "p_nom_max"] - .groupby(n.generators.loc[solar_today].index.rename("bus").map(location)) - .sum() - - n.generators.loc[solar_hsat, "p_nom_opt"] - .groupby(n.generators.loc[solar_hsat].index.rename("bus").map(location)) - .sum() - * land_use_factors["solar-hsat"] - ).clip(lower=0) - - else: - location = pd.Series(n.buses.index, index=n.buses.index) - ggrouper = n.generators.loc[solar].bus - rhs = ( - n.generators.loc[solar_today, "p_nom_max"] - .groupby(n.generators.loc[solar_today].bus.map(location)) - .sum() - - n.generators.loc[solar_hsat, "p_nom_opt"] - .groupby(n.generators.loc[solar_hsat].bus.map(location)) - .sum() - * land_use_factors["solar-hsat"] - ).clip(lower=0) + location = pd.Series(n.buses.index, index=n.buses.index) + ggrouper = n.generators.loc[solar].bus + rhs = ( + n.generators.loc[solar_today, "p_nom_max"] + .groupby(n.generators.loc[solar_today].bus.map(location)) + .sum() + - n.generators.loc[solar_hsat, "p_nom_opt"] + .groupby(n.generators.loc[solar_hsat].bus.map(location)) + .sum() + * land_use_factors["solar-hsat"] + ).clip(lower=0) lhs = ( (n.model["Generator-p_nom"].rename(rename).loc[solar] * land_use.squeeze()) @@ -515,7 +436,7 @@ def prepare_network( n.snapshot_weightings[:] = 8760.0 / nhours if foresight == "myopic": - add_land_use_constraint(n, planning_horizons, config) + add_land_use_constraint(n) if foresight == "perfect": n = add_land_use_constraint_perfect(n) @@ -1134,7 +1055,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "solve_sector_network_perfect", configfiles="../config/test/config.perfect.yaml", - simpl="", opts="", clusters="5", ll="v1.0", diff --git a/scripts/solve_operations_network.py b/scripts/solve_operations_network.py index 4336c3a7..28e0c1b7 100644 --- a/scripts/solve_operations_network.py +++ b/scripts/solve_operations_network.py @@ -29,7 +29,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "solve_operations_network", configfiles="test/config.electricity.yaml", - simpl="", opts="", clusters="5", ll="v1.5", diff --git a/scripts/time_aggregation.py b/scripts/time_aggregation.py index 7ed69112..51ab7954 100644 --- a/scripts/time_aggregation.py +++ b/scripts/time_aggregation.py @@ -20,17 +20,17 @@ Relevant Settings Inputs ------ -- ``networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc``: the network whose +- ``networks/base_s_{clusters}_elec_l{ll}_{opts}.nc``: the network whose snapshots are to be aggregated -- ``resources/hourly_heat_demand_total_elec_s{simpl}_{clusters}.nc``: the total +- ``resources/hourly_heat_demand_total_base_s_{clusters}.nc``: the total hourly heat demand -- ``resources/solar_thermal_total_elec_s{simpl}_{clusters}.nc``: the total +- ``resources/solar_thermal_total_base_s_{clusters}.nc``: the total hourly solar thermal generation Outputs ------- -- ``snapshot_weightings_elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.csv`` +- ``snapshot_weightings_base_s_{clusters}_elec_l{ll}_{opts}.csv`` Description ----------- @@ -63,7 +63,6 @@ if __name__ == "__main__": snakemake = mock_snakemake( "time_aggregation", configfiles="test/config.overnight.yaml", - simpl="", opts="", clusters="37", ll="v1.0", diff --git a/test.sh b/test.sh index a3dfb65f..64566aa2 100755 --- a/test.sh +++ b/test.sh @@ -7,7 +7,7 @@ set -x && \ snakemake -call solve_elec_networks --configfile config/test/config.electricity.yaml --rerun-triggers=mtime && \ snakemake -call all --configfile config/test/config.overnight.yaml --rerun-triggers=mtime && \ snakemake -call all --configfile config/test/config.myopic.yaml --rerun-triggers=mtime && \ -snakemake -call all --configfile config/test/config.perfect.yaml --rerun-triggers=mtime && \ +snakemake -call make_summary_perfect --configfile config/test/config.perfect.yaml --rerun-triggers=mtime && \ snakemake -call all --configfile config/test/config.scenarios.yaml --rerun-triggers=mtime -n && \ set +x