From e523cb4cb542fc6c7eada1069f58dc245ca6239c Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 26 Jul 2022 15:01:21 +0200 Subject: [PATCH 1/5] doc: minor updates --- config.default.yaml | 4 ++-- config.tutorial.yaml | 2 +- doc/configtables/electricity.csv | 26 ++++++++++++++++++-------- doc/configtables/offwind-ac.csv | 1 - doc/configtables/offwind-dc.csv | 1 - doc/configtables/onwind.csv | 1 - doc/configtables/solar.csv | 1 - doc/configuration.rst | 22 +++++++++++++++++++--- doc/costs.rst | 9 +++++---- doc/installation.rst | 1 + doc/tutorial.rst | 6 ++---- envs/environment.yaml | 1 - test/config.test1.yaml | 2 +- 13 files changed, 49 insertions(+), 28 deletions(-) diff --git a/config.default.yaml b/config.default.yaml index 61621153..1d31beaa 100755 --- a/config.default.yaml +++ b/config.default.yaml @@ -64,7 +64,7 @@ electricity: renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, hydro] estimate_renewable_capacities: - enable: true + enable: false # Add capacities from OPSD data from_opsd: true # Renewable capacities are based on existing capacities reported by IRENA @@ -218,7 +218,7 @@ load: costs: year: 2030 - version: v0.1.0 + version: v0.4.0 rooftop_share: 0.14 # based on the potentials, assuming (0.1 kW/m2 and 10 m2/person) fill_values: FOM: 0 diff --git a/config.tutorial.yaml b/config.tutorial.yaml index 223486b7..751b361d 100755 --- a/config.tutorial.yaml +++ b/config.tutorial.yaml @@ -155,7 +155,7 @@ load: costs: year: 2030 - version: v0.1.0 + version: v0.4.0 rooftop_share: 0.14 fill_values: FOM: 0 diff --git a/doc/configtables/electricity.csv b/doc/configtables/electricity.csv index 5abae842..eb9a2379 100644 --- a/doc/configtables/electricity.csv +++ b/doc/configtables/electricity.csv @@ -1,19 +1,29 @@ ,Unit,Values,Description -voltages,kV,"Any subset of {220., 300., 380.}",Voltage levels to consider when +voltages,kV,"Any subset of {220., 300., 380.}",Voltage levels to consider +gaslimit,MWhth,"float or false",Global gas usage limit co2limit,:math:`t_{CO_2-eq}/a`,float,Cap on total annual system carbon dioxide emissions co2base,:math:`t_{CO_2-eq}/a`,float,Reference value of total annual system carbon dioxide emissions if relative emission reduction target is specified in ``{opts}`` wildcard. agg_p_nom_limits,file,path,Reference to ``.csv`` file specifying per carrier generator nominal capacity constraints for individual countries if ``'CCL'`` is in ``{opts}`` wildcard. Defaults to ``data/agg_p_nom_minmax.csv``. -extendable_carriers,,, --- Generator,--,"Any extendable carrier",Defines existing or non-existing conventional and renewable power plants to be extendable during the optimization. Conventional generators can only be built/expanded where already existent today. If a listed conventional carrier is not included in the ``conventional_carriers`` list, the lower limit of the capacity expansion is set to 0. --- StorageUnit,--,"Any subset of {'battery','H2'}",Adds extendable storage units (battery and/or hydrogen) at every node/bus after clustering without capacity limits and with zero initial capacity. --- Store,--,"Any subset of {'battery','H2'}",Adds extendable storage units (battery and/or hydrogen) at every node/bus after clustering without capacity limits and with zero initial capacity. --- Link,--,Any subset of {'H2 pipeline'},Adds extendable links (H2 pipelines only) at every connection where there are lines or HVDC links without capacity limits and with zero initial capacity. Hydrogen pipelines require hydrogen storage to be modelled as ``Store``. +operational_reserve,,,"Settings for reserve requirements following like `GenX `_" +-- activate,bool,"true or false","Whether to take operational reserve requirements into account during optimisation" +-- epsilon_load,--,float,share of total load +-- epsilon_vres,--,float,share of total renewable supply +-- contingency,MW,float,fixed reserve capacity max_hours,,, -- battery,h,float,Maximum state of charge capacity of the battery in terms of hours at full output capacity ``p_nom``. Cf. `PyPSA documentation `_. -- H2,h,float,Maximum state of charge capacity of the hydrogen storage in terms of hours at full output capacity ``p_nom``. Cf. `PyPSA documentation `_. +extendable_carriers,,, +-- Generator,--,"Any extendable carrier","Defines existing or non-existing conventional and renewable power plants to be extendable during the optimization. Conventional generators can only be built/expanded where already existent today. If a listed conventional carrier is not included in the ``conventional_carriers`` list, the lower limit of the capacity expansion is set to 0." +-- StorageUnit,--,"Any subset of {'battery','H2'}",Adds extendable storage units (battery and/or hydrogen) at every node/bus after clustering without capacity limits and with zero initial capacity. +-- Store,--,"Any subset of {'battery','H2'}",Adds extendable storage units (battery and/or hydrogen) at every node/bus after clustering without capacity limits and with zero initial capacity. +-- Link,--,Any subset of {'H2 pipeline'},Adds extendable links (H2 pipelines only) at every connection where there are lines or HVDC links without capacity limits and with zero initial capacity. Hydrogen pipelines require hydrogen storage to be modelled as ``Store``. powerplants_filter,--,"use `pandas.query `_ strings here, e.g. Country not in ['Germany']",Filter query for the default powerplant database. custom_powerplants,--,"use `pandas.query `_ strings here, e.g. Country in ['Germany']",Filter query for the custom powerplant database. -conventional_carriers,--,"Any subset of {nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass}",List of conventional power plants to include in the model from ``resources/powerplants.csv``. If an included carrier is also listed in `extendable_carriers`, the capacity is taken as a lower bound. +conventional_carriers,--,"Any subset of {nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass}","List of conventional power plants to include in the model from ``resources/powerplants.csv``. If an included carrier is also listed in `extendable_carriers`, the capacity is taken as a lower bound." renewable_carriers,--,"Any subset of {solar, onwind, offwind-ac, offwind-dc, hydro}",List of renewable generators to include in the model. estimate_renewable_capacities,,, -"-- Fueltype [ppm], e.g. Wind",,"list of fueltypes strings in PyPSA-Eur, e.g. [onwind, offwind-ac, offwind-dc]",converts ppm Fueltype to PyPSA-EUR Fueltype +-- enable,,bool,"Activate routine to estimate renewable capacities" +-- from_opsd,--,bool,"Add capacities from OPSD data" +-- year,--,bool,"Renewable capacities are based on existing capacities reported by IRENA for the specified year" +-- expansion_limit,--,float or false,"Artificially limit maximum capacities to factor * (IRENA capacities), i.e. 110% of 's capacities => expansion_limit: 1.1 false: Use estimated renewable potentials determine by the workflow" +-- technology_mapping,,,"Mapping between powerplantmatching and PyPSA-Eur technology names" \ No newline at end of file diff --git a/doc/configtables/offwind-ac.csv b/doc/configtables/offwind-ac.csv index e5bbc847..def73e4c 100644 --- a/doc/configtables/offwind-ac.csv +++ b/doc/configtables/offwind-ac.csv @@ -10,4 +10,3 @@ 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." potential,--,"One of {'simple', 'conservative'}","Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`" 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." -keep_all_available_areas,bool,"{'true', 'false'}","Use all availabe weather cells for renewable profile and potential generation. The default ignores weather cells where only less than 1 MW can be installed." diff --git a/doc/configtables/offwind-dc.csv b/doc/configtables/offwind-dc.csv index 06b82ba0..17edafca 100644 --- a/doc/configtables/offwind-dc.csv +++ b/doc/configtables/offwind-dc.csv @@ -10,4 +10,3 @@ 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." potential,--,"One of {'simple', 'conservative'}","Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`" 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." -keep_all_available_areas,bool,"{'true', 'false'}","Use all availabe weather cells for renewable profile and potential generation. The default ignores weather cells where only less than 1 MW can be installed." diff --git a/doc/configtables/onwind.csv b/doc/configtables/onwind.csv index 31884183..c5f9da20 100644 --- a/doc/configtables/onwind.csv +++ b/doc/configtables/onwind.csv @@ -11,4 +11,3 @@ corine,,, natura,bool,"{true, false}","Switch to exclude `Natura 2000 `_ natural protection areas. Area is excluded if ``true``." potential,--,"One of {'simple', 'conservative'}","Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`" 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." -keep_all_available_areas,bool,"{'true', 'false'}","Use all availabe weather cells for renewable profile and potential generation. The default ignores weather cells where only less than 1 MW can be installed." diff --git a/doc/configtables/solar.csv b/doc/configtables/solar.csv index 7be39c04..9aa24268 100644 --- a/doc/configtables/solar.csv +++ b/doc/configtables/solar.csv @@ -12,4 +12,3 @@ corine,--,"Any subset of the `CORINE Land Cover code list `_ natural protection areas. Area is excluded if ``true``." potential,--,"One of {'simple', 'conservative'}","Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`" 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." -keep_all_available_areas,bool,"{'true', 'false'}","Use all availabe weather cells for renewable profile and potential generation. The default ignores weather cells where only less than 1 MW can be installed." diff --git a/doc/configuration.rst b/doc/configuration.rst index f7e07c2b..a982fd09 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -241,8 +241,7 @@ Define additional generator attribute for conventional carrier types. If a scala .. literalinclude:: ../config.default.yaml :language: yaml - :start-at: load: - :end-before: costs: + :lines: 212-217 .. csv-table:: :header-rows: 1 @@ -257,7 +256,7 @@ Define additional generator attribute for conventional carrier types. If a scala .. literalinclude:: ../config.default.yaml :language: yaml :start-after: scaling_factor: - :end-before: solving: + :end-before: clustering: .. csv-table:: :header-rows: 1 @@ -268,6 +267,23 @@ Define additional generator attribute for conventional carrier types. If a scala To change cost assumptions in more detail (i.e. other than ``marginal_cost`` and ``capital_cost``), consider modifying cost assumptions directly in ``resources/costs.csv`` as this is not yet supported through the config file. You can also build multiple different cost databases. Make a renamed copy of ``resources/costs.csv`` (e.g. ``data/costs-optimistic.csv``) and set the variable ``COSTS=data/costs-optimistic.csv`` in the ``Snakefile``. + +.. _clustering_cf: + +``clustering`` +============== + +.. literalinclude:: ../config.default.yaml + :language: yaml + :start-after: co2: + :end-before: solving: + +.. csv-table:: + :header-rows: 1 + :widths: 25,7,22,30 + :file: configtables/clustering.csv + + .. _solving_cf: ``solving`` diff --git a/doc/costs.rst b/doc/costs.rst index ef0b4d37..4b11146f 100644 --- a/doc/costs.rst +++ b/doc/costs.rst @@ -7,7 +7,11 @@ Cost Assumptions ################## -The database of cost assumptions is retrieved from the repository `PyPSA/technology-data `_ and then saved to``resources/costs.csv``. Cost assumptions of previous PyPSA-Eur versions can be restored by setting in the ``Snakefile``: ``COSTS="data/costs.csv". +The database of cost assumptions is retrieved from the repository +`PyPSA/technology-data `_ and then +saved to ``resources/costs.csv``. Cost assumptions of previous PyPSA-Eur +versions can be restored by setting in the ``Snakefile``: +``COSTS="data/costs.csv"``. The ``config.yaml`` provides options to choose a reference year (``costs: year:``) and use a specific version of the repository ``costs: version:``. @@ -32,9 +36,6 @@ with a discount rate of :math:`r` over the economic lifetime :math:`n` using the Based on the parameters above the ``marginal_cost`` and ``capital_cost`` of the system components are calculated. -.. note:: - - Another great resource for cost assumptions is the `cost database from the Danish Energy Agency `_. Modifying Cost Assumptions ========================== diff --git a/doc/installation.rst b/doc/installation.rst index aea25a42..4e4eed73 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -71,6 +71,7 @@ PyPSA is known to work with the free software - `Ipopt `_ - `Cbc `_ - `GLPK `_ (`WinGLKP `_) +- `HiGHS `_ and the non-free, commercial software (for some of which free academic licenses are available) diff --git a/doc/tutorial.rst b/doc/tutorial.rst index 7b41b2f0..5d996348 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -83,14 +83,14 @@ For example, we may want to use the ERA-5 dataset for solar and not the default .. literalinclude:: ../config.tutorial.yaml :language: yaml - :lines: 62,105,106 + :lines: 63,106,107 Finally, it is possible to pick a solver. For instance, this tutorial uses the open-source solvers CBC and Ipopt and does not rely on the commercial solvers Gurobi or CPLEX (for which free academic licenses are available). .. literalinclude:: ../config.tutorial.yaml :language: yaml - :lines: 187,197,198 + :lines: 188,198,199 .. note:: @@ -272,8 +272,6 @@ the wildcards given in ``scenario`` in the configuration file ``config.yaml`` ar :start-at: scenario: :end-before: countries: -In this example we would not only solve a 6-node model of Germany but also a 2-node model. - How to analyse solved networks? =============================== diff --git a/envs/environment.yaml b/envs/environment.yaml index e60a2261..176c6781 100644 --- a/envs/environment.yaml +++ b/envs/environment.yaml @@ -53,7 +53,6 @@ dependencies: - tqdm - pytz - tabula-py - - mergedeep - pyxlsb - pip: diff --git a/test/config.test1.yaml b/test/config.test1.yaml index 3f179078..a67cadc5 100755 --- a/test/config.test1.yaml +++ b/test/config.test1.yaml @@ -153,7 +153,7 @@ load: costs: year: 2030 - version: v0.1.0 + version: v0.4.0 rooftop_share: 0.14 fill_values: FOM: 0 From 8fc0c57ed69d0a07101ccfcabb4baeff40ac7a13 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 26 Jul 2022 15:05:59 +0200 Subject: [PATCH 2/5] update copyright years --- .gitattributes | 2 +- .gitignore | 2 +- .readthedocs.yml | 2 +- .reuse/dep5 | 6 +++--- LICENSES/MIT.txt | 2 +- README.md | 2 +- Snakefile | 2 +- config.default.yaml | 4 ++-- config.tutorial.yaml | 4 ++-- doc/Makefile | 2 +- doc/_static/theme_overrides.css | 2 +- doc/conf.py | 2 +- doc/configuration.rst | 2 +- doc/contributing.rst | 2 +- doc/costs.rst | 2 +- doc/index.rst | 2 +- doc/installation.rst | 2 +- doc/introduction.rst | 2 +- doc/limitations.rst | 2 +- doc/make.bat | 2 +- doc/plotting.rst | 2 +- doc/preparation.rst | 2 +- doc/preparation/add_electricity.rst | 2 +- doc/preparation/base_network.rst | 2 +- doc/preparation/build_bus_regions.rst | 2 +- doc/preparation/build_cutout.rst | 2 +- doc/preparation/build_hydro_profile.rst | 2 +- doc/preparation/build_load_data.rst | 2 +- doc/preparation/build_natura_raster.rst | 2 +- doc/preparation/build_powerplants.rst | 2 +- doc/preparation/build_renewable_profiles.rst | 2 +- doc/preparation/build_shapes.rst | 2 +- doc/preparation/prepare_links_p_nom.rst | 2 +- doc/preparation/retrieve.rst | 2 +- doc/release_notes.rst | 2 +- doc/requirements.txt | 2 +- doc/simplification.rst | 2 +- doc/simplification/add_extra_components.rst | 2 +- doc/simplification/cluster_network.rst | 2 +- doc/simplification/prepare_network.rst | 2 +- doc/simplification/simplify_network.rst | 2 +- doc/solving.rst | 2 +- doc/solving/solve_network.rst | 2 +- doc/solving/solve_operations_network.rst | 2 +- doc/tutorial.rst | 2 +- doc/wildcards.rst | 2 +- envs/environment.fixed.yaml | 2 +- envs/environment.yaml | 2 +- scripts/_helpers.py | 2 +- scripts/add_extra_components.py | 2 +- scripts/base_network.py | 2 +- scripts/build_bus_regions.py | 2 +- scripts/build_cutout.py | 2 +- scripts/build_hydro_profile.py | 2 +- scripts/build_natura_raster.py | 2 +- scripts/build_powerplants.py | 2 +- scripts/build_renewable_profiles.py | 2 +- scripts/build_shapes.py | 2 +- scripts/cluster_network.py | 2 +- scripts/make_summary.py | 2 +- scripts/plot_network.py | 2 +- scripts/plot_p_nom_max.py | 2 +- scripts/plot_summary.py | 2 +- scripts/prepare_links_p_nom.py | 2 +- scripts/prepare_network.py | 2 +- scripts/retrieve_databundle.py | 4 ++-- scripts/simplify_network.py | 2 +- scripts/solve_network.py | 2 +- scripts/solve_operations_network.py | 2 +- test/config.test1.yaml | 4 ++-- 70 files changed, 76 insertions(+), 76 deletions(-) diff --git a/.gitattributes b/.gitattributes index 6d21b21b..9e85b38b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: CC0-1.0 diff --git a/.gitignore b/.gitignore index 559dde47..80f91408 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: CC0-1.0 diff --git a/.readthedocs.yml b/.readthedocs.yml index d6b81a40..a492403f 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: CC0-1.0 diff --git a/.reuse/dep5 b/.reuse/dep5 index eb64a172..df28a631 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -12,7 +12,7 @@ Copyright: 2019 Fabian Neumann (KIT) License: CC-BY-4.0 Files: data/* -Copyright: 2017-2020 The PyPSA-Eur Authors +Copyright: 2017-2022 The PyPSA-Eur Authors License: CC-BY-4.0 Files: .github/* @@ -20,9 +20,9 @@ Copyright: 2019 The PyPSA-Eur Authors License: CC0-1.0 Files: matplotlibrc -Copyright: : 2017-2020 The PyPSA-Eur Authors +Copyright: : 2017-2022 The PyPSA-Eur Authors License: CC0-1.0 Files: borg-it -Copyright: : 2017-2020 The PyPSA-Eur Authors +Copyright: : 2017-2022 The PyPSA-Eur Authors License: CC0-1.0 diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt index dc10fd32..ef8a01cb 100644 --- a/LICENSES/MIT.txt +++ b/LICENSES/MIT.txt @@ -1,6 +1,6 @@ MIT License -Copyright 2017-2021 The PyPSA-Eur Authors +Copyright 2017-2022 The PyPSA-Eur Authors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/README.md b/README.md index ab4d63b3..8d42e4d2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ diff --git a/Snakefile b/Snakefile index 14849b5e..ce2b9889 100644 --- a/Snakefile +++ b/Snakefile @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/config.default.yaml b/config.default.yaml index 1d31beaa..b37297af 100755 --- a/config.default.yaml +++ b/config.default.yaml @@ -1,8 +1,8 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: CC0-1.0 -version: 0.4.0 +version: 0.5.0 tutorial: false logging: diff --git a/config.tutorial.yaml b/config.tutorial.yaml index 751b361d..99e7836b 100755 --- a/config.tutorial.yaml +++ b/config.tutorial.yaml @@ -1,8 +1,8 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: CC0-1.0 -version: 0.4.0 +version: 0.5.0 tutorial: true logging: diff --git a/doc/Makefile b/doc/Makefile index 75df2f48..d9bd3d5d 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/doc/_static/theme_overrides.css b/doc/_static/theme_overrides.css index a4c9818d..febf442a 100644 --- a/doc/_static/theme_overrides.css +++ b/doc/_static/theme_overrides.css @@ -1,4 +1,4 @@ -/* SPDX-FileCopyrightText: 2017-2020 The PyPSA-Eur Authors +/* SPDX-FileCopyrightText: 2017-2022 The PyPSA-Eur Authors SPDX-License-Identifier: MIT */ diff --git a/doc/conf.py b/doc/conf.py index 01dd6bc8..3208002c 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -66,7 +66,7 @@ master_doc = 'index' # General information about the project. project = u'PyPSA-Eur' -copyright = u'2017-2020 Jonas Hoersch (KIT, FIAS), Fabian Hofmann (FIAS), David Schlachtberger (FIAS), Tom Brown (KIT, FIAS); 2019-2020 Fabian Neumann (KIT)' +copyright = u'2017-2022 Jonas Hoersch (KIT, FIAS), Fabian Hofmann (FIAS), David Schlachtberger (FIAS), Tom Brown (KIT, FIAS); 2019-2022 Fabian Neumann (KIT)' author = u'Jonas Hoersch (KIT, FIAS), Fabian Hofmann (FIAS), David Schlachtberger (FIAS), Tom Brown (KIT, FIAS), Fabian Neumann (KIT)' # The version info for the project you're documenting, acts as replacement for diff --git a/doc/configuration.rst b/doc/configuration.rst index a982fd09..e5188da2 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/contributing.rst b/doc/contributing.rst index d57f1212..3962da0c 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/costs.rst b/doc/costs.rst index 4b11146f..10b91e06 100644 --- a/doc/costs.rst +++ b/doc/costs.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/index.rst b/doc/index.rst index 5ee1db5b..ef7f478a 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/installation.rst b/doc/installation.rst index 4e4eed73..da1497e6 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/introduction.rst b/doc/introduction.rst index bc4f267f..8e64b682 100644 --- a/doc/introduction.rst +++ b/doc/introduction.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/limitations.rst b/doc/limitations.rst index 3b6c03d7..99c22aed 100644 --- a/doc/limitations.rst +++ b/doc/limitations.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/make.bat b/doc/make.bat index 35dcecc2..2d7118ab 100644 --- a/doc/make.bat +++ b/doc/make.bat @@ -1,4 +1,4 @@ -REM SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors +REM SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors REM SPDX-License-Identifier: MIT @ECHO OFF diff --git a/doc/plotting.rst b/doc/plotting.rst index 6b0ce392..e31cb68f 100644 --- a/doc/plotting.rst +++ b/doc/plotting.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation.rst b/doc/preparation.rst index dba5e981..74e53b05 100644 --- a/doc/preparation.rst +++ b/doc/preparation.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/add_electricity.rst b/doc/preparation/add_electricity.rst index 0f3d431f..cec1228c 100644 --- a/doc/preparation/add_electricity.rst +++ b/doc/preparation/add_electricity.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/base_network.rst b/doc/preparation/base_network.rst index 1afc4e05..85e19707 100644 --- a/doc/preparation/base_network.rst +++ b/doc/preparation/base_network.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/build_bus_regions.rst b/doc/preparation/build_bus_regions.rst index 16aab725..7bb761e8 100644 --- a/doc/preparation/build_bus_regions.rst +++ b/doc/preparation/build_bus_regions.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/build_cutout.rst b/doc/preparation/build_cutout.rst index da2c04d1..2e6cb4a3 100644 --- a/doc/preparation/build_cutout.rst +++ b/doc/preparation/build_cutout.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/build_hydro_profile.rst b/doc/preparation/build_hydro_profile.rst index 77b12915..b940c39f 100644 --- a/doc/preparation/build_hydro_profile.rst +++ b/doc/preparation/build_hydro_profile.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/build_load_data.rst b/doc/preparation/build_load_data.rst index 03535981..3a42410e 100644 --- a/doc/preparation/build_load_data.rst +++ b/doc/preparation/build_load_data.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2020-2021 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2020-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/build_natura_raster.rst b/doc/preparation/build_natura_raster.rst index e3ec4364..b60be2f4 100644 --- a/doc/preparation/build_natura_raster.rst +++ b/doc/preparation/build_natura_raster.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/build_powerplants.rst b/doc/preparation/build_powerplants.rst index 19cce03b..e3d5dcef 100644 --- a/doc/preparation/build_powerplants.rst +++ b/doc/preparation/build_powerplants.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/build_renewable_profiles.rst b/doc/preparation/build_renewable_profiles.rst index 27e61583..82ac1312 100644 --- a/doc/preparation/build_renewable_profiles.rst +++ b/doc/preparation/build_renewable_profiles.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/build_shapes.rst b/doc/preparation/build_shapes.rst index 6bed0109..fc142879 100644 --- a/doc/preparation/build_shapes.rst +++ b/doc/preparation/build_shapes.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/prepare_links_p_nom.rst b/doc/preparation/prepare_links_p_nom.rst index 7ae9c3b4..78e7324d 100644 --- a/doc/preparation/prepare_links_p_nom.rst +++ b/doc/preparation/prepare_links_p_nom.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/preparation/retrieve.rst b/doc/preparation/retrieve.rst index 42479284..31ae25b9 100644 --- a/doc/preparation/retrieve.rst +++ b/doc/preparation/retrieve.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/release_notes.rst b/doc/release_notes.rst index 3d999f3f..d30978b9 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2021 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/requirements.txt b/doc/requirements.txt index 2b461718..4aa053b3 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2019-2021 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2019-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: CC0-1.0 diff --git a/doc/simplification.rst b/doc/simplification.rst index 280b1da0..3ac12d4f 100644 --- a/doc/simplification.rst +++ b/doc/simplification.rst @@ -1,7 +1,7 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/simplification/add_extra_components.rst b/doc/simplification/add_extra_components.rst index c1337b44..8ca30574 100644 --- a/doc/simplification/add_extra_components.rst +++ b/doc/simplification/add_extra_components.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/simplification/cluster_network.rst b/doc/simplification/cluster_network.rst index 52fc5840..80c9068d 100644 --- a/doc/simplification/cluster_network.rst +++ b/doc/simplification/cluster_network.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/simplification/prepare_network.rst b/doc/simplification/prepare_network.rst index d7e22e03..037f8190 100644 --- a/doc/simplification/prepare_network.rst +++ b/doc/simplification/prepare_network.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/simplification/simplify_network.rst b/doc/simplification/simplify_network.rst index 128a697f..9bbd66c6 100644 --- a/doc/simplification/simplify_network.rst +++ b/doc/simplification/simplify_network.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/solving.rst b/doc/solving.rst index 87fdc040..55707d79 100644 --- a/doc/solving.rst +++ b/doc/solving.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/solving/solve_network.rst b/doc/solving/solve_network.rst index 4b0b9861..4fe18368 100644 --- a/doc/solving/solve_network.rst +++ b/doc/solving/solve_network.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/solving/solve_operations_network.rst b/doc/solving/solve_operations_network.rst index b5bbc89f..d51fd5ab 100644 --- a/doc/solving/solve_operations_network.rst +++ b/doc/solving/solve_operations_network.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/tutorial.rst b/doc/tutorial.rst index 5d996348..916dae0e 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/doc/wildcards.rst b/doc/wildcards.rst index 2290de67..09dc53e9 100644 --- a/doc/wildcards.rst +++ b/doc/wildcards.rst @@ -1,5 +1,5 @@ .. - SPDX-FileCopyrightText: 2019-2020 The PyPSA-Eur Authors + SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors SPDX-License-Identifier: CC-BY-4.0 diff --git a/envs/environment.fixed.yaml b/envs/environment.fixed.yaml index 3fe3d51a..b025b9a3 100644 --- a/envs/environment.fixed.yaml +++ b/envs/environment.fixed.yaml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: CC0-1.0 diff --git a/envs/environment.yaml b/envs/environment.yaml index 176c6781..cffb2754 100644 --- a/envs/environment.yaml +++ b/envs/environment.yaml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/_helpers.py b/scripts/_helpers.py index dc638915..8dd2acd5 100644 --- a/scripts/_helpers.py +++ b/scripts/_helpers.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/add_extra_components.py b/scripts/add_extra_components.py index c9a9b7cb..dd4f23c0 100644 --- a/scripts/add_extra_components.py +++ b/scripts/add_extra_components.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/base_network.py b/scripts/base_network.py index 1d105225..e6bf8b56 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/build_bus_regions.py b/scripts/build_bus_regions.py index 8869c9f4..e51f34f2 100644 --- a/scripts/build_bus_regions.py +++ b/scripts/build_bus_regions.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/build_cutout.py b/scripts/build_cutout.py index 5ab085a1..fb353d65 100644 --- a/scripts/build_cutout.py +++ b/scripts/build_cutout.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2021 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/build_hydro_profile.py b/scripts/build_hydro_profile.py index eed3431e..c130e220 100644 --- a/scripts/build_hydro_profile.py +++ b/scripts/build_hydro_profile.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/build_natura_raster.py b/scripts/build_natura_raster.py index 7fa9d544..410e3661 100644 --- a/scripts/build_natura_raster.py +++ b/scripts/build_natura_raster.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/build_powerplants.py b/scripts/build_powerplants.py index a5dbf57b..1c3990af 100755 --- a/scripts/build_powerplants.py +++ b/scripts/build_powerplants.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/build_renewable_profiles.py b/scripts/build_renewable_profiles.py index 5db87c78..49e481ca 100644 --- a/scripts/build_renewable_profiles.py +++ b/scripts/build_renewable_profiles.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/build_shapes.py b/scripts/build_shapes.py index 09230ddc..35d564b3 100644 --- a/scripts/build_shapes.py +++ b/scripts/build_shapes.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/cluster_network.py b/scripts/cluster_network.py index 1ef2f2e5..b76b703f 100644 --- a/scripts/cluster_network.py +++ b/scripts/cluster_network.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/make_summary.py b/scripts/make_summary.py index 2cd15fbc..7c14a36d 100644 --- a/scripts/make_summary.py +++ b/scripts/make_summary.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/plot_network.py b/scripts/plot_network.py index 71a6e627..5844a959 100755 --- a/scripts/plot_network.py +++ b/scripts/plot_network.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/plot_p_nom_max.py b/scripts/plot_p_nom_max.py index e79ad274..0f76a2f3 100644 --- a/scripts/plot_p_nom_max.py +++ b/scripts/plot_p_nom_max.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/plot_summary.py b/scripts/plot_summary.py index bc2bd30c..49fa0770 100644 --- a/scripts/plot_summary.py +++ b/scripts/plot_summary.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/prepare_links_p_nom.py b/scripts/prepare_links_p_nom.py index b83089d6..ef6647ad 100644 --- a/scripts/prepare_links_p_nom.py +++ b/scripts/prepare_links_p_nom.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/prepare_network.py b/scripts/prepare_network.py index 4946e8ca..2248fa57 100755 --- a/scripts/prepare_network.py +++ b/scripts/prepare_network.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/retrieve_databundle.py b/scripts/retrieve_databundle.py index 5f05c575..1ed420bb 100644 --- a/scripts/retrieve_databundle.py +++ b/scripts/retrieve_databundle.py @@ -1,5 +1,5 @@ -# Copyright 2019-2020 Fabian Hofmann (FIAS) -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# Copyright 2019-2022 Fabian Hofmann (FIAS) +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/simplify_network.py b/scripts/simplify_network.py index fafae8ba..2bba1077 100644 --- a/scripts/simplify_network.py +++ b/scripts/simplify_network.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/solve_network.py b/scripts/solve_network.py index b3280a94..3208d209 100755 --- a/scripts/solve_network.py +++ b/scripts/solve_network.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/scripts/solve_operations_network.py b/scripts/solve_operations_network.py index 47bb713f..bcd75890 100644 --- a/scripts/solve_operations_network.py +++ b/scripts/solve_operations_network.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT diff --git a/test/config.test1.yaml b/test/config.test1.yaml index a67cadc5..ab741ccd 100755 --- a/test/config.test1.yaml +++ b/test/config.test1.yaml @@ -1,8 +1,8 @@ -# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: CC0-1.0 -version: 0.4.0 +version: 0.5.0 tutorial: true logging: level: INFO From 6027ade0ed0c150e1c05d2a0f8e0bc8464b39bb1 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 26 Jul 2022 15:30:07 +0200 Subject: [PATCH 3/5] prepare release notes --- doc/release_notes.rst | 181 ++++++++++++++++++++++++++++++------------ 1 file changed, 129 insertions(+), 52 deletions(-) diff --git a/doc/release_notes.rst b/doc/release_notes.rst index d30978b9..cf53d5dd 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -10,92 +10,169 @@ Release Notes Upcoming Release ================ -* Add an efficiency factor of 88.55% to offshore wind capacity factors - as a proxy for wake losses. More rigorous modelling is `planned `_ - [`#277 `_]. +* new feature -* The default deployment density of AC- and DC-connected offshore wind capacity is reduced from 3 MW/sqkm - to a more conservative estimate of 2 MW/sqkm [`#280 `_]. +PyPSA-Eur 0.5.0 (26th July 2022) +===================================== -* Following discussion in `#285 `_ we have disabled the - correction factor for solar PV capacity factors by default while satellite data is used. - A correction factor of 0.854337 is recommended if reanalysis data like ERA5 is used. - -* Resource definitions for memory usage now follow `Snakemake standard resource definition `_ ``mem_mb`` rather than ``mem``. - -* Network building is made deterministic by supplying a fixed random state to network clustering routines. +**New Features** * New network topology extracted from the ENTSO-E interactive map. -* The unused argument ``simple_hvdc_costs`` in :mod:`add_electricity` was removed. - -* Iterative solving with impedance updates is skipped if there are no expandable lines. - -* Switch from Germany to Belgium for continuous integration and tutorial to save resources. - -* Use updated SARAH-2 and ERA5 cutouts with slightly wider scope to east and additional variables. - -* Added existing renewable capacities for all countries based on IRENA statistics (IRENASTAT) using new ``powerplantmatching`` version: +* Added existing renewable capacities for all countries based on IRENA + statistics (IRENASTAT) using new ``powerplantmatching`` version: * The corresponding ``config`` entries changed, cf. ``config.default.yaml``: * old: ``estimate_renewable_capacities_from_capacity_stats`` * new: ``estimate_renewable_capacities`` * The estimation is endabled by setting the subkey ``enable`` to ``True``. - * Configuration of reference year for capacities can be configured (default: ``2020``) - * The list of renewables provided by the OPSD database can be used as a basis, using the tag ``from_opsd: True``. This adds the renewables from the database and fills up the missing capacities with the heuristic distribution. - * Uniform expansion limit of renewable build-up based on existing capacities can be configured using ``expansion_limit`` option - (default: ``false``; limited to determined renewable potentials) - * Distribution of country-level capacities proportional to maximum annual energy yield for each bus region + * Configuration of reference year for capacities can be configured (default: + ``2020``) + * The list of renewables provided by the OPSD database can be used as a basis, + using the tag ``from_opsd: True``. This adds the renewables from the + database and fills up the missing capacities with the heuristic + distribution. + * Uniform expansion limit of renewable build-up based on existing capacities + can be configured using ``expansion_limit`` option (default: ``false``; + limited to determined renewable potentials) + * Distribution of country-level capacities proportional to maximum annual + energy yield for each bus region + * The config key ``renewable_capacities_from_OPSD`` is deprecated and was moved + under the section, ``estimate_renewable_capacities``. To enable it, set + ``from_opsd`` to `True`. -* The config key ``renewable_capacities_from_OPSD`` is deprecated and was moved under the section, ``estimate_renewable_capacities``. To enable it, set ``from_opsd`` to `True`. +* Add operational reserve margin constraint analogous to `GenX implementation + `_. Can be activated + with config setting ``electricity: operational_reserve:``. -* Add operational reserve margin constraint analogous to `GenX implementation `_. - Can be activated with config setting ``electricity: operational_reserve:``. +* Implement country-specific Energy Availability Factors (EAFs) for nuclear + power plants based on IAEA 2018-2020 reported country averages. These are + specified ``data/nuclear_p_max_pu.csv`` and translate to static ``p_max_pu`` + values. -* Add function to add global constraint on use of gas in :mod:`prepare_network`. This can be activated by including the keyword ``CH4L`` in the ``{opts}`` wildcard which enforces the limit set in ``electricity: gaslimit:`` given in MWh thermal. Alternatively, it is possible to append a number in the `{opts}` wildcard, e.g. `CH4L200` which limits the gas use to 200 TWh thermal. +* Add function to add global constraint on use of gas in :mod:`prepare_network`. + This can be activated by including the keyword ``CH4L`` in the ``{opts}`` + wildcard which enforces the limit set in ``electricity: gaslimit:`` given in + MWh thermal. Alternatively, it is possible to append a number in the `{opts}` + wildcard, e.g. `CH4L200` which limits the gas use to 200 TWh thermal. -* A new section ``conventional`` was added to the config file. This section contains configurations for conventional carriers. +* Add option to alter marginal costs of a carrier through `{opts}` wildcard: + `+m`, e.g. `gas+m2.5`, will multiply the default marginal + cost for gas by factor 2.5. -* Add configuration option to implement arbitrary generator attributes for conventional generation technologies. +* Hierarchical clustering was introduced. Distance metric is calculated from + renewable potentials on hourly (feature entry ends with `-time`) or annual + (feature entry in config end with `-cap`) values. -* Implement country-specific Energy Availability Factors (EAFs) for nuclear power plants based on IAEA 2018-2020 reported country averages. These are specified ``data/nuclear_p_max_pu.csv`` and translate to static ``p_max_pu`` values. +* Techno-economic parameters of technologies (e.g. costs and efficiencies) will + now be retrieved from a separate repository `PyPSA/technology-data + `_ that collects assumptions from a + variety of sources. It is activated by default with ``enable: + retrieve_cost_data: true`` and controlled with ``costs: year:`` and ``costs: + version:``. The location of this data changed from ``data/costs.csv`` to + ``resources/costs.csv`` [`#184 + `_]. -* The powerplants that have been shut down before 2021 are filtered out. +* A new section ``conventional`` was added to the config file. This section + contains configurations for conventional carriers. -* ``powerplantmatching>=0.5.1`` is now required for ``IRENASTATS``. +* Add configuration option to implement arbitrary generator attributes for + conventional generation technologies. -* The inclusion of renewable carriers is now specified in the config entry ``renewable_carriers``. Before this was done by commenting/uncommenting sub-sections in the `renewable` config section. +* Add option to set CO2 emission prices through `{opts}` wildcard: `Ep`, + e.g. `Ep180`, will set the EUR/tCO2 price. -* Now, all carriers that should be extendable have to be listed in the config entry ``extendable_carriers``. Before, renewable carriers were always set to be extendable. For backwards compatibility, the workflow is still looking at the listed carriers under the ``renewable`` key. In the future, all of them have to be listed under ``extendable_carriers``. +**Changes** -* It is now possible to set conventional power plants as extendable by adding them to the list of extendable ``Generator`` carriers in the config. +* Add an efficiency factor of 88.55% to offshore wind capacity factors as a + proxy for wake losses. More rigorous modelling is `planned + `_ [`#277 + `_]. -* Listing conventional carriers in ``extendable_carriers`` but not in ``conventional_carriers``, sets the corresponding conventional power plants as extendable without a lower capacity bound of today's capacities. +* Following discussion in `#285 + `_ we have disabled the + correction factor for solar PV capacity factors by default while satellite + data is used. A correction factor of 0.854337 is recommended if reanalysis + data like ERA5 is used. + +* The default deployment density of AC- and DC-connected offshore wind capacity + is reduced from 3 MW/sqkm to a more conservative estimate of 2 MW/sqkm [`#280 + `_]. + +* The inclusion of renewable carriers is now specified in the config entry + ``renewable_carriers``. Before this was done by commenting/uncommenting + sub-sections in the `renewable` config section. + +* Now, all carriers that should be extendable have to be listed in the config + entry ``extendable_carriers``. Before, renewable carriers were always set to + be extendable. For backwards compatibility, the workflow is still looking at + the listed carriers under the ``renewable`` key. In the future, all of them + have to be listed under ``extendable_carriers``. + +* It is now possible to set conventional power plants as extendable by adding + them to the list of extendable ``Generator`` carriers in the config. + +* Listing conventional carriers in ``extendable_carriers`` but not in + ``conventional_carriers``, sets the corresponding conventional power plants as + extendable without a lower capacity bound of today's capacities. * Now, conventional carriers have an assigned capital cost by default. -* The ``build_year`` and ``lifetime`` column are now defined for conventional power plants. +* The ``build_year`` and ``lifetime`` column are now defined for conventional + power plants. + +* Use updated SARAH-2 and ERA5 cutouts with slightly wider scope to east and + additional variables. + +* Resource definitions for memory usage now follow `Snakemake standard resource + definition + `_ + ``mem_mb`` rather than ``mem``. + +* The powerplants that have been shut down by 2021 are filtered out. + +* Updated historical `EIA hydro generation data `_. + +* Network building is made deterministic by supplying a fixed random state to + network clustering routines. + +* Clustering strategies for generator and bus attributes can now be specified directly in the ``config.yaml``. + +* Iterative solving with impedance updates is skipped if there are no expandable + lines. + +* The unused argument ``simple_hvdc_costs`` in :mod:`add_electricity` was + removed. + +* Switch from Germany to Belgium for continuous integration and tutorial to save + resources. + +* It is now possible to skip the progressbar for land eligibility calculations for additional speedup. + +**Bugs and Compatibility** * Fix crs bug. Change crs 4236 to 4326. -* Update rasterio version to correctly calculate exclusion raster +* ``powerplantmatching>=0.5.1`` is now required for ``IRENASTATS``. -* Remove rules to build or retrieve rasterized NATURA 2000 dataset. Renewable potential calculation now directly uses the shapefiles. +* Update rasterio version to correctly calculate exclusion raster. -* Cache data and cutouts folders. This cache will be updated weekly. +* It is now possible to run the workflow with only landlocked countries. -* Add rule to automatically retrieve Natura2000 natural protection areas. Switch of file format to GPKG. -* Add option to set CO2 emission prices through `{opts}` wildcard: `Ep`, e.g. `Ep180`, will set the EUR/tCO2 price. +* Bugfixes for manual load adjustments across years. -* Add option to alter marginal costs of a carrier through `{opts}` wildcard: `+m`, e.g. `gas+m2.5`, will multiply the default marginal cost for gas by factor 2.5. +* Enable parallel computing with new dask version. -* Clustering strategies for generators and buses have moved from distinct scripts to configurables to unify the process and make it more transparent. +* Restore compatibility of ``mock_snakemake`` with lastest Snakemake versions. -* Hierarchical clustering was introduced. Distance metric is calculated from renewable potentials on hourly (feature entry ends with `-time`) or annual (feature entry in config end with `-cap`) values. +* Script ``build_bus_regions``: move voronoi partition from vresutils to script. -* Techno-economic parameters of technologies (e.g. costs and efficiencies) will now be retrieved from a separate repository `PyPSA/technology-data `_ - that collects assumptions from a variety of sources. It is activated by default with ``enable: retrieve_cost_data: true`` and controlled with ``costs: year:`` and ``costs: version:``. - The location of this data changed from ``data/costs.csv`` to ``resources/costs.csv`` - [`#184 `_]. +* Script ``add_electricity``: remove ``vresutils.costdata.annuity`` dependency. + +* Fix the plot_network snakemake rule. + +* Compatibility with pandas 1.4. Address deprecations. + +* Restore Windows compatibility by using ``shutil.move`` rather than ``mv``. Synchronisation Release - Ukraine and Moldova (17th March 2022) From 87388d4b4a0363ac68b5d305a58e9e8ccedbb01d Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Tue, 26 Jul 2022 15:32:48 +0200 Subject: [PATCH 4/5] update author affiliations --- .reuse/dep5 | 4 ++-- doc/conf.py | 4 ++-- scripts/retrieve_databundle.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.reuse/dep5 b/.reuse/dep5 index df28a631..8ddff0f7 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -4,11 +4,11 @@ Upstream-Contact: Tom Brown Source: https://github.com/pypsa/pypsa-eur Files: doc/img/* -Copyright: 2019 Fabian Neumann (KIT) +Copyright: 2019 Fabian Neumann (TUB, KIT) License: CC-BY-4.0 Files: doc/configtables/* -Copyright: 2019 Fabian Neumann (KIT) +Copyright: 2019 Fabian Neumann (TUB, KIT) License: CC-BY-4.0 Files: data/* diff --git a/doc/conf.py b/doc/conf.py index 3208002c..2a3398fb 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -66,8 +66,8 @@ master_doc = 'index' # General information about the project. project = u'PyPSA-Eur' -copyright = u'2017-2022 Jonas Hoersch (KIT, FIAS), Fabian Hofmann (FIAS), David Schlachtberger (FIAS), Tom Brown (KIT, FIAS); 2019-2022 Fabian Neumann (KIT)' -author = u'Jonas Hoersch (KIT, FIAS), Fabian Hofmann (FIAS), David Schlachtberger (FIAS), Tom Brown (KIT, FIAS), Fabian Neumann (KIT)' +copyright = u'2017-2022 Jonas Hoersch (KIT, FIAS), Fabian Hofmann (TUB, FIAS), David Schlachtberger (FIAS), Tom Brown (TUB, KIT, FIAS); 2019-2022 Fabian Neumann (TUB, KIT)' +author = u'Jonas Hoersch (KIT, FIAS), Fabian Hofmann (TUB, FIAS), David Schlachtberger (FIAS), Tom Brown (TUB, KIT, FIAS), Fabian Neumann (TUB, KIT)' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/scripts/retrieve_databundle.py b/scripts/retrieve_databundle.py index 1ed420bb..2b106823 100644 --- a/scripts/retrieve_databundle.py +++ b/scripts/retrieve_databundle.py @@ -1,4 +1,4 @@ -# Copyright 2019-2022 Fabian Hofmann (FIAS) +# Copyright 2019-2022 Fabian Hofmann (TUB, FIAS) # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT From cdd063d3b050851a7621dca10851375fb16e3382 Mon Sep 17 00:00:00 2001 From: Fabian Neumann Date: Wed, 27 Jul 2022 09:02:34 +0200 Subject: [PATCH 5/5] scripts: remove deprecated clustering methods, remove unused imports --- scripts/_helpers.py | 1 - scripts/build_powerplants.py | 2 -- scripts/build_shapes.py | 1 - scripts/cluster_network.py | 17 ++--------------- scripts/simplify_network.py | 2 +- 5 files changed, 3 insertions(+), 20 deletions(-) diff --git a/scripts/_helpers.py b/scripts/_helpers.py index 8dd2acd5..0871f622 100644 --- a/scripts/_helpers.py +++ b/scripts/_helpers.py @@ -4,7 +4,6 @@ import pandas as pd from pathlib import Path -from collections import OrderedDict REGION_COLS = ['geometry', 'name', 'x', 'y', 'country'] diff --git a/scripts/build_powerplants.py b/scripts/build_powerplants.py index 1c3990af..056c2649 100755 --- a/scripts/build_powerplants.py +++ b/scripts/build_powerplants.py @@ -77,10 +77,8 @@ from _helpers import configure_logging import pypsa import powerplantmatching as pm import pandas as pd -import numpy as np from powerplantmatching.export import map_country_bus -from scipy.spatial import cKDTree as KDTree logger = logging.getLogger(__name__) diff --git a/scripts/build_shapes.py b/scripts/build_shapes.py index 35d564b3..c2c081b4 100644 --- a/scripts/build_shapes.py +++ b/scripts/build_shapes.py @@ -70,7 +70,6 @@ Description import logging from _helpers import configure_logging -import os import numpy as np from operator import attrgetter from functools import reduce diff --git a/scripts/cluster_network.py b/scripts/cluster_network.py index b76b703f..76fc8398 100644 --- a/scripts/cluster_network.py +++ b/scripts/cluster_network.py @@ -125,8 +125,6 @@ import logging from _helpers import configure_logging, update_p_nom_max, get_aggregation_strategies import pypsa -import os -import shapely import pandas as pd import numpy as np @@ -137,8 +135,7 @@ import seaborn as sns from functools import reduce -from pypsa.networkclustering import (busmap_by_kmeans, busmap_by_spectral_clustering, - busmap_by_hac, _make_consense, get_clustering_from_busmap) +from pypsa.networkclustering import (busmap_by_kmeans, busmap_by_hac, get_clustering_from_busmap) import warnings warnings.filterwarnings(action='ignore', category=UserWarning) @@ -305,12 +302,6 @@ def busmap_for_n_clusters(n, n_clusters, solver_name, focus_weights=None, algori n_clusters = distribute_clusters(n, n_clusters, focus_weights=focus_weights, solver_name=solver_name) - def reduce_network(n, buses): - nr = pypsa.Network() - nr.import_components_from_dataframe(buses, "Bus") - nr.import_components_from_dataframe(n.lines.loc[n.lines.bus0.isin(buses.index) & n.lines.bus1.isin(buses.index)], "Line") - return nr - def busmap_for_country(x): prefix = x.name[0] + x.name[1] + ' ' logger.debug(f"Determining busmap for country {prefix[:-1]}") @@ -320,14 +311,10 @@ def busmap_for_n_clusters(n, n_clusters, solver_name, focus_weights=None, algori if algorithm == "kmeans": return prefix + busmap_by_kmeans(n, weight, n_clusters[x.name], buses_i=x.index, **algorithm_kwds) - elif algorithm == "spectral": - return prefix + busmap_by_spectral_clustering(reduce_network(n, x), n_clusters[x.name], **algorithm_kwds) - elif algorithm == "louvain": - return prefix + busmap_by_louvain(reduce_network(n, x), n_clusters[x.name], **algorithm_kwds) elif algorithm == "hac": return prefix + busmap_by_hac(n, n_clusters[x.name], buses_i=x.index, feature=feature.loc[x.index]) else: - raise ValueError(f"`algorithm` must be one of 'kmeans', 'hac', 'spectral' or 'louvain'. Is {algorithm}.") + raise ValueError(f"`algorithm` must be one of 'kmeans' or 'hac'. Is {algorithm}.") return (n.buses.groupby(['country', 'sub_network'], group_keys=False) .apply(busmap_for_country).squeeze().rename('busmap')) diff --git a/scripts/simplify_network.py b/scripts/simplify_network.py index 2bba1077..bbd8c2cf 100644 --- a/scripts/simplify_network.py +++ b/scripts/simplify_network.py @@ -99,7 +99,7 @@ from functools import reduce import pypsa from pypsa.io import import_components_from_dataframe, import_series_from_dataframe -from pypsa.networkclustering import busmap_by_stubs, aggregategenerators, aggregateoneport, get_clustering_from_busmap, _make_consense +from pypsa.networkclustering import busmap_by_stubs, aggregategenerators, aggregateoneport, get_clustering_from_busmap logger = logging.getLogger(__name__)