Merge branch 'master' into retrofit-gas-pipelines

This commit is contained in:
lisazeyen 2021-06-17 06:38:47 +02:00
commit feefaa3d41
9 changed files with 49 additions and 16 deletions

View File

@ -14,7 +14,7 @@ problems that distort the results. See the github repository
[issues](https://github.com/PyPSA/pypsa-eur-sec/issues) for some of [issues](https://github.com/PyPSA/pypsa-eur-sec/issues) for some of
the problems (please feel free to help or make suggestions). There is the problems (please feel free to help or make suggestions). There is
neither documentation nor a paper yet, but we hope to have a preprint neither documentation nor a paper yet, but we hope to have a preprint
out by summer 2020. We cannot support this model if you choose to use out by autumn 2021. We cannot support this model if you choose to use
it. it.
@ -33,6 +33,14 @@ them:
![sector diagram](graphics/multisector_figure.png) ![sector diagram](graphics/multisector_figure.png)
Each of these sectors is built up on the transmission network nodes
from [PyPSA-Eur](https://github.com/PyPSA/pypsa-eur):
![network diagram](https://github.com/PyPSA/pypsa-eur/blob/master/doc/img/base.png?raw=true)
For computational reasons the model is usually clustered down
to 50-200 nodes.
PyPSA-Eur-Sec was initially based on the model PyPSA-Eur-Sec-30 described PyPSA-Eur-Sec was initially based on the model PyPSA-Eur-Sec-30 described
in the paper [Synergies of sector coupling and transmission in the paper [Synergies of sector coupling and transmission

View File

@ -291,7 +291,7 @@ rule build_retro_cost:
input: input:
building_stock="data/retro/data_building_stock.csv", building_stock="data/retro/data_building_stock.csv",
data_tabula="data/retro/tabula-calculator-calcsetbuilding.csv", data_tabula="data/retro/tabula-calculator-calcsetbuilding.csv",
air_temperature = "resources/temp_air_total_{network}_s{simpl}_{clusters}.nc", air_temperature = "resources/temp_air_total_elec_s{simpl}_{clusters}.nc",
u_values_PL="data/retro/u_values_poland.csv", u_values_PL="data/retro/u_values_poland.csv",
tax_w="data/retro/electricity_taxes_eu.csv", tax_w="data/retro/electricity_taxes_eu.csv",
construction_index="data/retro/comparative_level_investment.csv", construction_index="data/retro/comparative_level_investment.csv",

View File

@ -1,4 +1,4 @@
version: 0.4.0 version: 0.5.0
logging_level: INFO logging_level: INFO

View File

@ -70,9 +70,9 @@ author = u'2019-2020 Tom Brown (KIT), Marta Victoria (Aarhus University), Lisa Z
# built documents. # built documents.
# #
# The short X.Y version. # The short X.Y version.
version = u'0.4' version = u'0.5'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = u'0.4.0' release = u'0.5.0'
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.

View File

@ -4,8 +4,8 @@ PyPSA-Eur-Sec: A Sector-Coupled Open Optimisation Model of the European Energy S
.. image:: https://img.shields.io/github/v/release/pypsa/pypsa-eur-sec?include_prereleases .. image:: https://img.shields.io/github/v/release/pypsa/pypsa-eur-sec?include_prereleases
:alt: GitHub release (latest by date including pre-releases) :alt: GitHub release (latest by date including pre-releases)
.. image:: https://readthedocs.org/projects/pypsa-eur/badge/?version=latest .. image:: https://readthedocs.org/projects/pypsa-eur-sec/badge/?version=latest
:target: https://pypsa-eur.readthedocs.io/en/latest/?badge=latest :target: https://pypsa-eur-sec.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status :alt: Documentation Status
.. image:: https://img.shields.io/github/license/pypsa/pypsa-eur-sec .. image:: https://img.shields.io/github/license/pypsa/pypsa-eur-sec

View File

@ -3,16 +3,31 @@ Release Notes
########################################## ##########################################
Future release Future release
=================== ==============
* Include new features here.
PyPSA-Eur-Sec 0.5.0 (21st May 2021)
===================================
This release includes improvements to the cost database for building retrofits, carbon budget management and wildcard settings, as well as an important bugfix for the emissions from land transport.
This release is known to work with `PyPSA-Eur <https://github.com/PyPSA/pypsa-eur>`_ Version 0.3.0 and `Technology Data <https://github.com/PyPSA/technology-data>`_ Version 0.2.0.
Please note that the data bundle has also been updated.
New features and bugfixes:
* For the myopic investment option, a carbon budget and a type of decay (exponential or beta) can be selected in the ``config.yaml`` file to distribute the budget across the ``planning_horizons``. For example, ``cb40ex0`` in the ``{sector_opts}`` wildcard will distribute a carbon budget of 40 GtCO2 following an exponential decay with initial growth rate 0.
* The cost database for retrofitting of the thermal envelope of buildings has been updated. Now, for calculating the space heat savings of a building, losses by thermal bridges and ventilation are included as well as heat gains (internal and by solar radiation). See the section :ref:`retro` for more details on the retrofitting module. * The cost database for retrofitting of the thermal envelope of buildings has been updated. Now, for calculating the space heat savings of a building, losses by thermal bridges and ventilation are included as well as heat gains (internal and by solar radiation). See the section :ref:`retro` for more details on the retrofitting module.
* For the myopic investment option, a carbon budget and a type of decay (exponential or beta) can be selected in the ``config.yaml`` file to distribute the budget across the ``planning_horizons``. For example, ``cb40ex0`` in the ``{sector_opts}`` wildcard will distribute a carbon budget of 40 GtCO2 following an exponential decay with initial growth rate 0.
* Added an option to alter the capital cost or maximum capacity of carriers by a factor via ``carrier+factor`` in the ``{sector_opts}`` wildcard. This can be useful for exploring uncertain cost parameters. Example: ``solar+c0.5`` reduces the ``capital_cost`` of solar to 50\% of original values. Similarly ``solar+p3`` multiplies the ``p_nom_max`` by 3. * Added an option to alter the capital cost or maximum capacity of carriers by a factor via ``carrier+factor`` in the ``{sector_opts}`` wildcard. This can be useful for exploring uncertain cost parameters. Example: ``solar+c0.5`` reduces the ``capital_cost`` of solar to 50\% of original values. Similarly ``solar+p3`` multiplies the ``p_nom_max`` by 3.
* Rename the bus for European liquid hydrocarbons from ``Fischer-Tropsch`` to ``EU oil``, since it can be supplied not just with the Fischer-Tropsch process, but also with fossil oil. * Rename the bus for European liquid hydrocarbons from ``Fischer-Tropsch`` to ``EU oil``, since it can be supplied not just with the Fischer-Tropsch process, but also with fossil oil.
* Bugfix: The new separation of land transport by carrier in Version 0.4.0 failed to account for the carbon dioxide emissions from internal combustion engines. This is now treated as a negative load on the atmospheric carbon dioxide bus, just like aviation emissions. * Bugfix: The new separation of land transport by carrier in Version 0.4.0 failed to account for the carbon dioxide emissions from internal combustion engines in land transport. This is now treated as a negative load on the atmospheric carbon dioxide bus, just like aviation emissions.
* Bugfix: Fix reading in of ``pypsa-eur/resources/powerplants.csv`` to PyPSA-Eur Version 0.3.0 (use column attribute name ``DateIn`` instead of old ``YearDecommissioned``). * Bugfix: Fix reading in of ``pypsa-eur/resources/powerplants.csv`` to PyPSA-Eur Version 0.3.0 (use column attribute name ``DateIn`` instead of old ``YearDecommissioned``).
* Bugfix: Make sure that ``Store`` components (battery and H2) are also removed from PyPSA-Eur, so they can be added later by PyPSA-Eur-Sec. * Bugfix: Make sure that ``Store`` components (battery and H2) are also removed from PyPSA-Eur, so they can be added later by PyPSA-Eur-Sec.
Thanks to Lisa Zeyen (KIT) for the retrofitting improvements and Marta Victoria (Aarhus University) for the carbon budget and wildcard management.
PyPSA-Eur-Sec 0.4.0 (11th December 2020) PyPSA-Eur-Sec 0.4.0 (11th December 2020)
========================================= =========================================

View File

@ -253,7 +253,8 @@ def prepare_building_stock_data():
axis=1, inplace=True, errors="ignore") axis=1, inplace=True, errors="ignore")
u_values = u_values.apply(lambda x: x.replace(rename_sectors)) u_values.subsector.replace(rename_sectors, inplace=True)
u_values.btype.replace(rename_sectors, inplace=True)
# for missing weighting of surfaces of building types assume MFH # for missing weighting of surfaces of building types assume MFH
u_values["assumed_subsector"] = u_values.subsector u_values["assumed_subsector"] = u_values.subsector
@ -841,7 +842,7 @@ if __name__ == "__main__":
building_stock="data/retro/data_building_stock.csv", building_stock="data/retro/data_building_stock.csv",
data_tabula="data/retro/tabula-calculator-calcsetbuilding.csv", data_tabula="data/retro/tabula-calculator-calcsetbuilding.csv",
u_values_PL="data/retro/u_values_poland.csv", u_values_PL="data/retro/u_values_poland.csv",
air_temperature = "resources/temp_air_total_{network}_s{simpl}_{clusters}.nc", air_temperature = "resources/temp_air_total_elec_s{simpl}_{clusters}.nc",
tax_w="data/retro/electricity_taxes_eu.csv", tax_w="data/retro/electricity_taxes_eu.csv",
construction_index="data/retro/comparative_level_investment.csv", construction_index="data/retro/comparative_level_investment.csv",
floor_area_missing="data/retro/floor_area_missing.csv", floor_area_missing="data/retro/floor_area_missing.csv",

View File

@ -177,7 +177,7 @@ def plot_balances():
balances_df = pd.read_csv(snakemake.input.balances,index_col=list(range(3)),header=list(range(n_header))) balances_df = pd.read_csv(snakemake.input.balances,index_col=list(range(3)),header=list(range(n_header)))
balances = {i.replace(" ","_") : [i] for i in balances_df.index.levels[0]} balances = {i.replace(" ","_") : [i] for i in balances_df.index.levels[0]}
balances["energy"] = balances_df.index.levels[0].symmetric_difference(co2_carriers) balances["energy"] = [i for i in balances_df.index.levels[0] if i not in co2_carriers]
for k,v in balances.items(): for k,v in balances.items():

View File

@ -1154,6 +1154,12 @@ def add_land_transport(network):
if ice_share > 0: if ice_share > 0:
if "EU oil" not in network.buses.index:
network.madd("Bus",
["EU oil"],
location="EU",
carrier="oil")
network.madd("Load", network.madd("Load",
nodes, nodes,
suffix=" land transport oil", suffix=" land transport oil",
@ -1542,6 +1548,8 @@ def add_biomass(network):
bus1="EU gas", bus1="EU gas",
bus2="co2 atmosphere", bus2="co2 atmosphere",
carrier="biogas to gas", carrier="biogas to gas",
capital_cost=costs.loc["biogas upgrading", "fixed"],
marginal_cost=costs.loc["biogas upgrading", "VOM"],
efficiency2=-costs.at['gas','CO2 intensity'], efficiency2=-costs.at['gas','CO2 intensity'],
p_nom_extendable=True) p_nom_extendable=True)
@ -1769,6 +1777,7 @@ def add_industry(network):
#remove today's industrial electricity demand by scaling down total electricity demand #remove today's industrial electricity demand by scaling down total electricity demand
for ct in n.buses.country.unique(): for ct in n.buses.country.unique():
loads = n.loads.index[(n.loads.index.str[:2] == ct) & (n.loads.carrier == "electricity")] loads = n.loads.index[(n.loads.index.str[:2] == ct) & (n.loads.carrier == "electricity")]
if n.loads_t.p_set[loads].empty: continue
factor = 1 - industrial_demand.loc[loads,"current electricity"].sum()/n.loads_t.p_set[loads].sum().sum() factor = 1 - industrial_demand.loc[loads,"current electricity"].sum()/n.loads_t.p_set[loads].sum().sum()
n.loads_t.p_set[loads] *= factor n.loads_t.p_set[loads] *= factor
@ -1915,7 +1924,7 @@ if __name__ == "__main__":
retro_cost_energy = "resources/retro_cost_elec_s{simpl}_{clusters}.csv", retro_cost_energy = "resources/retro_cost_elec_s{simpl}_{clusters}.csv",
floor_area = "resources/floor_area_elec_s{simpl}_{clusters}.csv" floor_area = "resources/floor_area_elec_s{simpl}_{clusters}.csv"
), ),
output=['results/version-cb48be3/prenetworks/{network}_s{simpl}_{clusters}_lv{lv}__{sector_opts}_{planning_horizons}.nc'] output=['results/version-cb48be3/prenetworks/elec_s{simpl}_{clusters}_lv{lv}__{sector_opts}_{planning_horizons}.nc']
) )
import yaml import yaml
with open('config.yaml', encoding='utf8') as f: with open('config.yaml', encoding='utf8') as f: