Merge branch 'release-v0.5' into introduce_modularity_clustering

This commit is contained in:
Fabian Neumann 2022-07-27 09:04:39 +02:00 committed by GitHub
commit 8d132464bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
75 changed files with 261 additions and 181 deletions

2
.gitattributes vendored
View File

@ -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 # SPDX-License-Identifier: CC0-1.0

2
.gitignore vendored
View File

@ -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 # SPDX-License-Identifier: CC0-1.0

View File

@ -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 # SPDX-License-Identifier: CC0-1.0

View File

@ -4,15 +4,15 @@ Upstream-Contact: Tom Brown <tom.brown@kit.edu>
Source: https://github.com/pypsa/pypsa-eur Source: https://github.com/pypsa/pypsa-eur
Files: doc/img/* Files: doc/img/*
Copyright: 2019 Fabian Neumann (KIT) Copyright: 2019 Fabian Neumann (TUB, KIT)
License: CC-BY-4.0 License: CC-BY-4.0
Files: doc/configtables/* Files: doc/configtables/*
Copyright: 2019 Fabian Neumann (KIT) Copyright: 2019 Fabian Neumann (TUB, KIT)
License: CC-BY-4.0 License: CC-BY-4.0
Files: data/* Files: data/*
Copyright: 2017-2020 The PyPSA-Eur Authors Copyright: 2017-2022 The PyPSA-Eur Authors
License: CC-BY-4.0 License: CC-BY-4.0
Files: .github/* Files: .github/*
@ -20,9 +20,9 @@ Copyright: 2019 The PyPSA-Eur Authors
License: CC0-1.0 License: CC0-1.0
Files: matplotlibrc Files: matplotlibrc
Copyright: : 2017-2020 The PyPSA-Eur Authors Copyright: : 2017-2022 The PyPSA-Eur Authors
License: CC0-1.0 License: CC0-1.0
Files: borg-it Files: borg-it
Copyright: : 2017-2020 The PyPSA-Eur Authors Copyright: : 2017-2022 The PyPSA-Eur Authors
License: CC0-1.0 License: CC0-1.0

View File

@ -1,6 +1,6 @@
MIT License 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 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 this software and associated documentation files (the "Software"), to deal in

View File

@ -1,5 +1,5 @@
<!-- <!--
SPDX-FileCopyrightText: 2017-2020 The PyPSA-Eur Authors SPDX-FileCopyrightText: 2017-2022 The PyPSA-Eur Authors
SPDX-License-Identifier: CC-BY-4.0 SPDX-License-Identifier: CC-BY-4.0
--> -->

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -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 # SPDX-License-Identifier: CC0-1.0
version: 0.4.0 version: 0.5.0
tutorial: false tutorial: false
logging: logging:
@ -64,7 +64,7 @@ electricity:
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, hydro] renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, hydro]
estimate_renewable_capacities: estimate_renewable_capacities:
enable: true enable: false
# Add capacities from OPSD data # Add capacities from OPSD data
from_opsd: true from_opsd: true
# Renewable capacities are based on existing capacities reported by IRENA # Renewable capacities are based on existing capacities reported by IRENA
@ -218,7 +218,7 @@ load:
costs: costs:
year: 2030 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) rooftop_share: 0.14 # based on the potentials, assuming (0.1 kW/m2 and 10 m2/person)
fill_values: fill_values:
FOM: 0 FOM: 0

View File

@ -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 # SPDX-License-Identifier: CC0-1.0
version: 0.4.0 version: 0.5.0
tutorial: true tutorial: true
logging: logging:
@ -155,7 +155,7 @@ load:
costs: costs:
year: 2030 year: 2030
version: v0.1.0 version: v0.4.0
rooftop_share: 0.14 rooftop_share: 0.14
fill_values: fill_values:
FOM: 0 FOM: 0

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
/* SPDX-FileCopyrightText: 2017-2020 The PyPSA-Eur Authors /* SPDX-FileCopyrightText: 2017-2022 The PyPSA-Eur Authors
SPDX-License-Identifier: MIT SPDX-License-Identifier: MIT
*/ */

View File

@ -66,8 +66,8 @@ master_doc = 'index'
# General information about the project. # General information about the project.
project = u'PyPSA-Eur' 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 (TUB, FIAS), David Schlachtberger (FIAS), Tom Brown (TUB, KIT, FIAS); 2019-2022 Fabian Neumann (TUB, KIT)'
author = u'Jonas Hoersch (KIT, FIAS), Fabian Hofmann (FIAS), David Schlachtberger (FIAS), Tom Brown (KIT, FIAS), Fabian Neumann (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 # The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the # |version| and |release|, also used in various other places throughout the

View File

@ -1,19 +1,29 @@
,Unit,Values,Description ,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 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. 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``. 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,,, operational_reserve,,,"Settings for reserve requirements following like `GenX <https://genxproject.github.io/GenX/dev/core/#Reserves>`_"
-- 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. -- activate,bool,"true or false","Whether to take operational reserve requirements into account during optimisation"
-- 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. -- epsilon_load,--,float,share of total load
-- 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. -- epsilon_vres,--,float,share of total renewable supply
-- 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``. -- contingency,MW,float,fixed reserve capacity
max_hours,,, 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 <https://pypsa.readthedocs.io/en/latest/components.html#storage-unit>`_. -- battery,h,float,Maximum state of charge capacity of the battery in terms of hours at full output capacity ``p_nom``. Cf. `PyPSA documentation <https://pypsa.readthedocs.io/en/latest/components.html#storage-unit>`_.
-- 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 <https://pypsa.readthedocs.io/en/latest/components.html#storage-unit>`_. -- 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 <https://pypsa.readthedocs.io/en/latest/components.html#storage-unit>`_.
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 <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html>`_ strings here, e.g. Country not in ['Germany']",Filter query for the default powerplant database. powerplants_filter,--,"use `pandas.query <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html>`_ strings here, e.g. Country not in ['Germany']",Filter query for the default powerplant database.
custom_powerplants,--,"use `pandas.query <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html>`_ strings here, e.g. Country in ['Germany']",Filter query for the custom powerplant database. custom_powerplants,--,"use `pandas.query <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html>`_ 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. renewable_carriers,--,"Any subset of {solar, onwind, offwind-ac, offwind-dc, hydro}",List of renewable generators to include in the model.
estimate_renewable_capacities,,, 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 <years>'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"
Can't render this file because it has a wrong number of fields in line 7.

View File

@ -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." 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`" 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." 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."

1 Unit Values Description
10 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.
11 potential -- One of {'simple', 'conservative'} Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`
12 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.

View File

@ -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." 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`" 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." 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."

1 Unit Values Description
10 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.
11 potential -- One of {'simple', 'conservative'} Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`
12 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.

View File

@ -11,4 +11,3 @@ corine,,,
natura,bool,"{true, false}","Switch to exclude `Natura 2000 <https://en.wikipedia.org/wiki/Natura_2000>`_ natural protection areas. Area is excluded if ``true``." natura,bool,"{true, false}","Switch to exclude `Natura 2000 <https://en.wikipedia.org/wiki/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`" 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." 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."

1 Unit Values Description
11 natura bool {true, false} Switch to exclude `Natura 2000 <https://en.wikipedia.org/wiki/Natura_2000>`_ natural protection areas. Area is excluded if ``true``.
12 potential -- One of {'simple', 'conservative'} Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`
13 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.

View File

@ -12,4 +12,3 @@ corine,--,"Any subset of the `CORINE Land Cover code list <http://www.eea.europa
natura,bool,"{true, false}","Switch to exclude `Natura 2000 <https://en.wikipedia.org/wiki/Natura_2000>`_ natural protection areas. Area is excluded if ``true``." natura,bool,"{true, false}","Switch to exclude `Natura 2000 <https://en.wikipedia.org/wiki/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`" 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." 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."

1 Unit Values Description
12 natura bool {true, false} Switch to exclude `Natura 2000 <https://en.wikipedia.org/wiki/Natura_2000>`_ natural protection areas. Area is excluded if ``true``.
13 potential -- One of {'simple', 'conservative'} Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`
14 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.

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0
@ -241,8 +241,7 @@ Define additional generator attribute for conventional carrier types. If a scala
.. literalinclude:: ../config.default.yaml .. literalinclude:: ../config.default.yaml
:language: yaml :language: yaml
:start-at: load: :lines: 212-217
:end-before: costs:
.. csv-table:: .. csv-table::
:header-rows: 1 :header-rows: 1
@ -257,7 +256,7 @@ Define additional generator attribute for conventional carrier types. If a scala
.. literalinclude:: ../config.default.yaml .. literalinclude:: ../config.default.yaml
:language: yaml :language: yaml
:start-after: scaling_factor: :start-after: scaling_factor:
:end-before: solving: :end-before: clustering:
.. csv-table:: .. csv-table::
:header-rows: 1 :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. 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``. 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_cf:
``solving`` ``solving``

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0
@ -7,7 +7,11 @@
Cost Assumptions Cost Assumptions
################## ##################
The database of cost assumptions is retrieved from the repository `PyPSA/technology-data <https://github.com/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 <https://github.com/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:``. 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. 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 <https://ens.dk/en/our-services/projections-and-models/technology-data>`_.
Modifying Cost Assumptions Modifying Cost Assumptions
========================== ==========================

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0
@ -71,6 +71,7 @@ PyPSA is known to work with the free software
- `Ipopt <https://coin-or.github.io/Ipopt/INSTALL.html>`_ - `Ipopt <https://coin-or.github.io/Ipopt/INSTALL.html>`_
- `Cbc <https://projects.coin-or.org/Cbc#DownloadandInstall>`_ - `Cbc <https://projects.coin-or.org/Cbc#DownloadandInstall>`_
- `GLPK <https://www.gnu.org/software/glpk/>`_ (`WinGLKP <http://winglpk.sourceforge.net/>`_) - `GLPK <https://www.gnu.org/software/glpk/>`_ (`WinGLKP <http://winglpk.sourceforge.net/>`_)
- `HiGHS <https://highs.dev/>`_
and the non-free, commercial software (for some of which free academic licenses are available) and the non-free, commercial software (for some of which free academic licenses are available)

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 REM SPDX-License-Identifier: MIT
@ECHO OFF @ECHO OFF

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0
@ -10,95 +10,171 @@ Release Notes
Upcoming Release Upcoming Release
================ ================
* Add an efficiency factor of 88.55% to offshore wind capacity factors * new feature
as a proxy for wake losses. More rigorous modelling is `planned <https://github.com/PyPSA/pypsa-eur/issues/153>`_
[`#277 <https://github.com/PyPSA/pypsa-eur/pull/277>`_].
* The default deployment density of AC- and DC-connected offshore wind capacity is reduced from 3 MW/sqkm PyPSA-Eur 0.5.0 (26th July 2022)
to a more conservative estimate of 2 MW/sqkm [`#280 <https://github.com/PyPSA/pypsa-eur/pull/280>`_]. =====================================
* Following discussion in `#285 <https://github.com/PyPSA/pypsa-eur/issues/285>`_ we have disabled the **New Features**
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 <https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#standard-resources>`_ ``mem_mb`` rather than ``mem``.
* Network building is made deterministic by supplying a fixed random state to network clustering routines.
* New network topology extracted from the ENTSO-E interactive map. * New network topology extracted from the ENTSO-E interactive map.
* The unused argument ``simple_hvdc_costs`` in :mod:`add_electricity` was removed. * Added existing renewable capacities for all countries based on IRENA
statistics (IRENASTAT) using new ``powerplantmatching`` version:
* 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:
* The corresponding ``config`` entries changed, cf. ``config.default.yaml``: * The corresponding ``config`` entries changed, cf. ``config.default.yaml``:
* old: ``estimate_renewable_capacities_from_capacity_stats`` * old: ``estimate_renewable_capacities_from_capacity_stats``
* new: ``estimate_renewable_capacities`` * new: ``estimate_renewable_capacities``
* The estimation is endabled by setting the subkey ``enable`` to ``True``. * The estimation is endabled by setting the subkey ``enable`` to ``True``.
* Configuration of reference year for capacities can be configured (default: ``2020``) * Configuration of reference year for capacities can be configured (default:
* 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. ``2020``)
* Uniform expansion limit of renewable build-up based on existing capacities can be configured using ``expansion_limit`` option * The list of renewables provided by the OPSD database can be used as a basis,
(default: ``false``; limited to determined renewable potentials) using the tag ``from_opsd: True``. This adds the renewables from the
* Distribution of country-level capacities proportional to maximum annual energy yield for each bus region 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
<https://genxproject.github.io/GenX/dev/core/#Reserves>`_. Can be activated
with config setting ``electricity: operational_reserve:``.
* Add operational reserve margin constraint analogous to `GenX implementation <https://genxproject.github.io/GenX/dev/core/#Reserves>`_. * Implement country-specific Energy Availability Factors (EAFs) for nuclear
Can be activated with config setting ``electricity: operational_reserve:``. 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:
`<carrier>+m<factor>`, e.g. `gas+m2.5`, will multiply the default marginal
* Add configuration option to implement arbitrary generator attributes for conventional generation technologies. cost for gas by factor 2.5.
* 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.
* The powerplants that have been shut down before 2021 are filtered out.
* ``powerplantmatching>=0.5.1`` is now required for ``IRENASTATS``.
* 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.
* Fix crs bug. Change crs 4236 to 4326.
* Update rasterio version to correctly calculate exclusion raster
* Remove rules to build or retrieve rasterized NATURA 2000 dataset. Renewable potential calculation now directly uses the shapefiles.
* Cache data and cutouts folders. This cache will be updated weekly.
* 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<number>`, e.g. `Ep180`, will set the EUR/tCO2 price.
* Add option to alter marginal costs of a carrier through `{opts}` wildcard: `<carrier>+m<factor>`, e.g. `gas+m2.5`, will multiply the default marginal cost for gas by factor 2.5.
* Clustering strategies for generators and buses have moved from distinct scripts to configurables to unify the process and make it more transparent.
* 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.
* 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.
* Greedy modularity clustering was introduced. Distance metric is based on electrical distance taking into account the impedance of all transmission lines of the network. * Greedy modularity clustering was introduced. Distance metric is based on electrical distance taking into account the impedance of all transmission lines of the network.
* Techno-economic parameters of technologies (e.g. costs and efficiencies) will now be retrieved from a separate repository `PyPSA/technology-data <https://github.com/pypsa/technology-data>`_ * Techno-economic parameters of technologies (e.g. costs and efficiencies) will
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:``. now be retrieved from a separate repository `PyPSA/technology-data
The location of this data changed from ``data/costs.csv`` to ``resources/costs.csv`` <https://github.com/pypsa/technology-data>`_ that collects assumptions from a
[`#184 <https://github.com/PyPSA/pypsa-eur/pull/184>`_]. 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
<https://github.com/PyPSA/pypsa-eur/pull/184>`_].
* A new section ``conventional`` was added to the config file. This section
contains configurations for conventional carriers.
* Add configuration option to implement arbitrary generator attributes for
conventional generation technologies.
* Add option to set CO2 emission prices through `{opts}` wildcard: `Ep<number>`,
e.g. `Ep180`, will set the EUR/tCO2 price.
**Changes**
* Add an efficiency factor of 88.55% to offshore wind capacity factors as a
proxy for wake losses. More rigorous modelling is `planned
<https://github.com/PyPSA/pypsa-eur/issues/153>`_ [`#277
<https://github.com/PyPSA/pypsa-eur/pull/277>`_].
* Following discussion in `#285
<https://github.com/PyPSA/pypsa-eur/issues/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
<https://github.com/PyPSA/pypsa-eur/pull/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.
* 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
<https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#standard-resources>`_
``mem_mb`` rather than ``mem``.
* The powerplants that have been shut down by 2021 are filtered out.
* Updated historical `EIA hydro generation data <https://www.eia.gov/international/data/world>`_.
* 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.
* ``powerplantmatching>=0.5.1`` is now required for ``IRENASTATS``.
* Update rasterio version to correctly calculate exclusion raster.
* It is now possible to run the workflow with only landlocked countries.
* Bugfixes for manual load adjustments across years.
* Enable parallel computing with new dask version.
* Restore compatibility of ``mock_snakemake`` with lastest Snakemake versions.
* Script ``build_bus_regions``: move voronoi partition from vresutils to script.
* 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) Synchronisation Release - Ukraine and Moldova (17th March 2022)

View File

@ -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 # SPDX-License-Identifier: CC0-1.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0
@ -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 .. literalinclude:: ../config.tutorial.yaml
:language: 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 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). on the commercial solvers Gurobi or CPLEX (for which free academic licenses are available).
.. literalinclude:: ../config.tutorial.yaml .. literalinclude:: ../config.tutorial.yaml
:language: yaml :language: yaml
:lines: 187,197,198 :lines: 188,198,199
.. note:: .. note::
@ -272,8 +272,6 @@ the wildcards given in ``scenario`` in the configuration file ``config.yaml`` ar
:start-at: scenario: :start-at: scenario:
:end-before: countries: :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? How to analyse solved networks?
=============================== ===============================

View File

@ -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 SPDX-License-Identifier: CC-BY-4.0

View File

@ -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 # SPDX-License-Identifier: CC0-1.0

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
@ -53,7 +53,6 @@ dependencies:
- tqdm - tqdm
- pytz - pytz
- tabula-py - tabula-py
- mergedeep
- pyxlsb - pyxlsb
- pip: - pip:

View File

@ -1,10 +1,9 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
import pandas as pd import pandas as pd
from pathlib import Path from pathlib import Path
from collections import OrderedDict
REGION_COLS = ['geometry', 'name', 'x', 'y', 'country'] REGION_COLS = ['geometry', 'name', 'x', 'y', 'country']

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2021 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
@ -77,10 +77,8 @@ from _helpers import configure_logging
import pypsa import pypsa
import powerplantmatching as pm import powerplantmatching as pm
import pandas as pd import pandas as pd
import numpy as np
from powerplantmatching.export import map_country_bus from powerplantmatching.export import map_country_bus
from scipy.spatial import cKDTree as KDTree
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
@ -70,7 +70,6 @@ Description
import logging import logging
from _helpers import configure_logging from _helpers import configure_logging
import os
import numpy as np import numpy as np
from operator import attrgetter from operator import attrgetter
from functools import reduce from functools import reduce

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
@ -125,8 +125,6 @@ import logging
from _helpers import configure_logging, update_p_nom_max, get_aggregation_strategies from _helpers import configure_logging, update_p_nom_max, get_aggregation_strategies
import pypsa import pypsa
import os
import shapely
import pandas as pd import pandas as pd
import numpy as np import numpy as np
@ -137,9 +135,8 @@ import seaborn as sns
from functools import reduce from functools import reduce
from pypsa.networkclustering import (busmap_by_kmeans, busmap_by_spectral_clustering, from pypsa.networkclustering import (busmap_by_kmeans, busmap_by_hac,
busmap_by_hac, busmap_by_greedy_modularity, busmap_by_greedy_modularity, get_clustering_from_busmap)
_make_consense, get_clustering_from_busmap)
import warnings import warnings
warnings.filterwarnings(action='ignore', category=UserWarning) warnings.filterwarnings(action='ignore', category=UserWarning)
@ -306,12 +303,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) 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): def busmap_for_country(x):
prefix = x.name[0] + x.name[1] + ' ' 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]}")
@ -321,16 +312,12 @@ def busmap_for_n_clusters(n, n_clusters, solver_name, focus_weights=None, algori
if algorithm == "kmeans": if algorithm == "kmeans":
return prefix + busmap_by_kmeans(n, weight, n_clusters[x.name], buses_i=x.index, **algorithm_kwds) 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": elif algorithm == "hac":
return prefix + busmap_by_hac(n, n_clusters[x.name], buses_i=x.index, feature=feature.loc[x.index]) return prefix + busmap_by_hac(n, n_clusters[x.name], buses_i=x.index, feature=feature.loc[x.index])
elif algorithm == "modularity": elif algorithm == "modularity":
return prefix + busmap_by_greedy_modularity(n, n_clusters[x.name], buses_i=x.index) return prefix + busmap_by_greedy_modularity(n, n_clusters[x.name], buses_i=x.index)
else: 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) return (n.buses.groupby(['country', 'sub_network'], group_keys=False)
.apply(busmap_for_country).squeeze().rename('busmap')) .apply(busmap_for_country).squeeze().rename('busmap'))

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,5 +1,5 @@
# Copyright 2019-2020 Fabian Hofmann (FIAS) # Copyright 2019-2022 Fabian Hofmann (TUB, FIAS)
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
@ -99,7 +99,7 @@ from functools import reduce
import pypsa import pypsa
from pypsa.io import import_components_from_dataframe, import_series_from_dataframe 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__) logger = logging.getLogger(__name__)

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: : 2017-2020 The PyPSA-Eur Authors # SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
# #
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT

View File

@ -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 # SPDX-License-Identifier: CC0-1.0
version: 0.4.0 version: 0.5.0
tutorial: true tutorial: true
logging: logging:
level: INFO level: INFO
@ -153,7 +153,7 @@ load:
costs: costs:
year: 2030 year: 2030
version: v0.1.0 version: v0.4.0
rooftop_share: 0.14 rooftop_share: 0.14
fill_values: fill_values:
FOM: 0 FOM: 0