commit
c87b45a763
1
.gitignore
vendored
1
.gitignore
vendored
@ -26,6 +26,7 @@ gurobi.log
|
|||||||
/data/switzerland*
|
/data/switzerland*
|
||||||
/data/.nfs*
|
/data/.nfs*
|
||||||
/data/Industrial_Database.csv
|
/data/Industrial_Database.csv
|
||||||
|
/data/retro/tabula-calculator-calcsetbuilding.csv
|
||||||
|
|
||||||
*.org
|
*.org
|
||||||
|
|
||||||
|
@ -281,14 +281,15 @@ rule build_industrial_demand:
|
|||||||
rule build_retro_cost:
|
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",
|
||||||
|
air_temperature = "resources/temp_air_total_{network}_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",
|
||||||
average_surface="data/retro/average_surface_components.csv",
|
|
||||||
floor_area_missing="data/retro/floor_area_missing.csv",
|
floor_area_missing="data/retro/floor_area_missing.csv",
|
||||||
clustered_pop_layout="resources/pop_layout_elec_s{simpl}_{clusters}.csv",
|
clustered_pop_layout="resources/pop_layout_elec_s{simpl}_{clusters}.csv",
|
||||||
cost_germany="data/retro/retro_cost_germany.csv",
|
cost_germany="data/retro/retro_cost_germany.csv",
|
||||||
window_assumptions="data/retro/window_assumptions.csv"
|
window_assumptions="data/retro/window_assumptions.csv",
|
||||||
output:
|
output:
|
||||||
retro_cost="resources/retro_cost_elec_s{simpl}_{clusters}.csv",
|
retro_cost="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"
|
||||||
|
@ -119,20 +119,25 @@ sector:
|
|||||||
'time_dep_hp_cop' : True #time dependent heat pump coefficient of performance
|
'time_dep_hp_cop' : True #time dependent heat pump coefficient of performance
|
||||||
'heat_pump_sink_T' : 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
'heat_pump_sink_T' : 55. # Celsius, based on DTU / large area radiators; used in build_cop_profiles.py
|
||||||
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
# conservatively high to cover hot water and space heating in poorly-insulated buildings
|
||||||
'retrofitting' :
|
'reduce_space_heat_exogenously': True # reduces space heat demand by a given factor (applied before losses in DH)
|
||||||
'retro_exogen': True # space heat demand savings exogenously
|
# this can represent e.g. building renovation, building demolition, or if
|
||||||
'dE': # reduction of space heat demand (applied before losses in DH)
|
# the factor is negative: increasing floor area, increased thermal comfort, population growth
|
||||||
2020 : 0.
|
'reduce_space_heat_exogenously_factor': # per unit reduction in space heat demand
|
||||||
2030 : 0.15
|
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
|
||||||
2040 : 0.3
|
2020: 0.10 # this results in a space heat demand reduction of 10%
|
||||||
2050 : 0.4
|
2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
|
||||||
|
2030: 0.09
|
||||||
|
2035: 0.11
|
||||||
|
2040: 0.16
|
||||||
|
2045: 0.21
|
||||||
|
2050: 0.29
|
||||||
|
'retrofitting' : # co-optimises building renovation to reduce space heat demand
|
||||||
'retro_endogen': False # co-optimise space heat savings
|
'retro_endogen': False # co-optimise space heat savings
|
||||||
'cost_factor' : 1.0
|
'cost_factor' : 1.0 # weight costs for building renovation
|
||||||
'interest_rate': 0.04 # for investment in building components
|
'interest_rate': 0.04 # for investment in building components
|
||||||
'annualise_cost': True # annualise the investment costs
|
'annualise_cost': True # annualise the investment costs
|
||||||
'tax_weighting': False # weight costs depending on taxes in countries
|
'tax_weighting': False # weight costs depending on taxes in countries
|
||||||
'construction_index': True # weight costs depending on labour/material costs per ct
|
'construction_index': True # weight costs depending on labour/material costs per country
|
||||||
'l_strength': ["0.076", "0.197"] # additional insulation thickness[m], determines number of retro steps(=generators per bus) and maximum possible savings
|
|
||||||
'tes' : True
|
'tes' : True
|
||||||
'tes_tau' : 3.
|
'tes_tau' : 3.
|
||||||
'boilers' : True
|
'boilers' : True
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
,Dwelling,Ceilling,Standard component surfaces (m2),component,surfaces,(m2),,
|
|
||||||
Building type,Space(m²),Height(m),Roof,Facade,Floor,Windows,,
|
|
||||||
Single/two family house,120,2.5,90,166,63,29,,
|
|
||||||
Large apartment house,1457,2.5,354,1189,354,380,,
|
|
||||||
Apartment house,5276,,598.337,2992.1,598.337,756,tabula ,http://webtool.building-typology.eu/#pdfes
|
|
||||||
,,,,,,,,
|
|
||||||
"Source: https://link.springer.com/article/10.1007/s12053-010-9090-6 ,p.4",,,,,,,,
|
|
|
@ -22,5 +22,5 @@ U-values Poland,u_values_poland.csv,unknown,https://data.europa.eu/euodp/de/data
|
|||||||
Floor area missing in hotmaps building stock data,floor_area_missing.csv,unknown,https://data.europa.eu/euodp/de/data/dataset/building-stock-observatory
|
Floor area missing in hotmaps building stock data,floor_area_missing.csv,unknown,https://data.europa.eu/euodp/de/data/dataset/building-stock-observatory
|
||||||
Comparative level investment,comparative_level_investment.csv,Eurostat,https://ec.europa.eu/eurostat/statistics-explained/index.php?title=Comparative_price_levels_for_investment
|
Comparative level investment,comparative_level_investment.csv,Eurostat,https://ec.europa.eu/eurostat/statistics-explained/index.php?title=Comparative_price_levels_for_investment
|
||||||
Electricity taxes,electricity_taxes_eu.csv,Eurostat,https://appsso.eurostat.ec.europa.eu/nui/show.do?dataset=nrg_pc_204&lang=en
|
Electricity taxes,electricity_taxes_eu.csv,Eurostat,https://appsso.eurostat.ec.europa.eu/nui/show.do?dataset=nrg_pc_204&lang=en
|
||||||
Average surface components,average_surface_components.csv,unknown,http://webtool.building-typology.eu/#bm
|
Building topologies and corresponding standard values,tabula-calculator-calcsetbuilding.csv,unknown,https://episcope.eu/fileadmin/tabula/public/calc/tabula-calculator.xlsx
|
||||||
Retrofitting thermal envelope costs for Germany,retro_cost_germany.csv,unkown,https://www.iwu.de/forschung/handlungslogiken/kosten-energierelevanter-bau-und-anlagenteile-bei-modernisierung/
|
Retrofitting thermal envelope costs for Germany,retro_cost_germany.csv,unkown,https://www.iwu.de/forschung/handlungslogiken/kosten-energierelevanter-bau-und-anlagenteile-bei-modernisierung/
|
||||||
|
|
@ -73,8 +73,8 @@ To download and extract the data bundle on the command line:
|
|||||||
|
|
||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
projects/pypsa-eur-sec/data % wget "https://nworbmot.org/pypsa-eur-sec-data-bundle-210125.tar.gz"
|
projects/pypsa-eur-sec/data % wget "https://nworbmot.org/pypsa-eur-sec-data-bundle-210418.tar.gz"
|
||||||
projects/pypsa-eur-sec/data % tar xvzf pypsa-eur-sec-data-bundle-210125.tar.gz
|
projects/pypsa-eur-sec/data % tar xvzf pypsa-eur-sec-data-bundle-210418.tar.gz
|
||||||
|
|
||||||
|
|
||||||
The data licences and sources are given in the following table.
|
The data licences and sources are given in the following table.
|
||||||
|
@ -6,6 +6,7 @@ Future release
|
|||||||
===================
|
===================
|
||||||
|
|
||||||
* 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.
|
* 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.
|
||||||
* 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. This is now treated as a negative load on the atmospheric carbon dioxide bus, just like aviation emissions.
|
||||||
@ -137,4 +138,4 @@ To make a new release of the data bundle, make an archive of the files in ``data
|
|||||||
|
|
||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
data % tar pczf pypsa-eur-sec-data-bundle-YYMMDD.tar.gz eea/UNFCCC_v23.csv switzerland-sfoe biomass eurostat-energy_balances-* jrc-idees-2015 emobility urban_percent.csv timezone_mappings.csv heat_load_profile_DK_AdamJensen.csv WindWaveWEC_GLTB.xlsx myb1-2017-nitro.xls Industrial_Database.csv
|
data % tar pczf pypsa-eur-sec-data-bundle-YYMMDD.tar.gz eea/UNFCCC_v23.csv switzerland-sfoe biomass eurostat-energy_balances-* jrc-idees-2015 emobility urban_percent.csv timezone_mappings.csv heat_load_profile_DK_AdamJensen.csv WindWaveWEC_GLTB.xlsx myb1-2017-nitro.xls Industrial_Database.csv retro/tabula-calculator-calcsetbuilding.csv
|
||||||
|
@ -108,6 +108,43 @@ Small for decentral applications.
|
|||||||
|
|
||||||
Big water pit storage for district heating.
|
Big water pit storage for district heating.
|
||||||
|
|
||||||
|
.. _retro:
|
||||||
|
|
||||||
|
Retrofitting of the thermal envelope of buildings
|
||||||
|
===================================================
|
||||||
|
Co-optimising building renovation is only enabled if in the ``config.yaml`` the
|
||||||
|
option :mod:`retro_endogen: True`. To reduce the computational burden
|
||||||
|
default setting is
|
||||||
|
|
||||||
|
.. literalinclude:: ../config.default.yaml
|
||||||
|
:language: yaml
|
||||||
|
:lines: 134-135
|
||||||
|
|
||||||
|
Renovation of the thermal envelope reduces the space heating demand and is
|
||||||
|
optimised at each node for every heat bus. Renovation measures through additional
|
||||||
|
insulation material and replacement of energy inefficient windows are considered.
|
||||||
|
|
||||||
|
In a first step, costs per energy savings are estimated in :mod:`build_retro_cost.py`.
|
||||||
|
They depend on the insulation condition of the building stock and costs for
|
||||||
|
renovation of the building elements.
|
||||||
|
In a second step, for those cost per energy savings two possible renovation
|
||||||
|
strengths are determined: a moderate renovation with lower costs and lower
|
||||||
|
maximum possible space heat savings, and an ambitious renovation with associated
|
||||||
|
higher costs and higher efficiency gains. They are added by step-wise
|
||||||
|
linearisation in form of two additional generations in
|
||||||
|
:mod:`prepare_sector_network.py`.
|
||||||
|
|
||||||
|
Settings in the config.yaml concerning the endogenously optimisation of building
|
||||||
|
renovation
|
||||||
|
|
||||||
|
.. literalinclude:: ../config.default.yaml
|
||||||
|
:language: yaml
|
||||||
|
:lines: 136-140
|
||||||
|
|
||||||
|
Further information are given in the publication
|
||||||
|
|
||||||
|
`Mitigating heat demand peaks in buildings in a highly renewable European energy system, (2021) <https://arxiv.org/abs/2012.01831>`_.
|
||||||
|
|
||||||
|
|
||||||
Hydrogen demand
|
Hydrogen demand
|
||||||
==================
|
==================
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -285,7 +285,7 @@ def calculate_supply(n,label,supply):
|
|||||||
|
|
||||||
for c in n.iterate_components(n.one_port_components):
|
for c in n.iterate_components(n.one_port_components):
|
||||||
|
|
||||||
items = c.df.index[c.df.bus.map(bus_map)]
|
items = c.df.index[c.df.bus.map(bus_map).fillna(False)]
|
||||||
|
|
||||||
if len(items) == 0:
|
if len(items) == 0:
|
||||||
continue
|
continue
|
||||||
@ -330,7 +330,7 @@ def calculate_supply_energy(n,label,supply_energy):
|
|||||||
|
|
||||||
for c in n.iterate_components(n.one_port_components):
|
for c in n.iterate_components(n.one_port_components):
|
||||||
|
|
||||||
items = c.df.index[c.df.bus.map(bus_map)]
|
items = c.df.index[c.df.bus.map(bus_map).fillna(False)]
|
||||||
|
|
||||||
if len(items) == 0:
|
if len(items) == 0:
|
||||||
continue
|
continue
|
||||||
@ -629,4 +629,3 @@ if __name__ == "__main__":
|
|||||||
cumulative_cost.to_csv(snakemake.config['summary_dir'] + '/' + snakemake.config['run'] + '/csvs/cumulative_cost.csv')
|
cumulative_cost.to_csv(snakemake.config['summary_dir'] + '/' + snakemake.config['run'] + '/csvs/cumulative_cost.csv')
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -248,6 +248,14 @@ def remove_elec_base_techs(n):
|
|||||||
n.carriers.drop(to_remove, inplace=True, errors="ignore")
|
n.carriers.drop(to_remove, inplace=True, errors="ignore")
|
||||||
|
|
||||||
|
|
||||||
|
def remove_non_electric_buses(n):
|
||||||
|
"""
|
||||||
|
remove buses from pypsa-eur with carriers which are not AC buses
|
||||||
|
"""
|
||||||
|
print("drop buses from PyPSA-Eur with carrier: ", n.buses[~n.buses.carrier.isin(["AC", "DC"])].carrier.unique())
|
||||||
|
n.buses = n.buses[n.buses.carrier.isin(["AC", "DC"])]
|
||||||
|
|
||||||
|
|
||||||
def add_co2_tracking(n):
|
def add_co2_tracking(n):
|
||||||
|
|
||||||
|
|
||||||
@ -1174,11 +1182,10 @@ def add_heat(network):
|
|||||||
|
|
||||||
urban_fraction = options['central_fraction']*pop_layout["urban"]/(pop_layout[["urban","rural"]].sum(axis=1))
|
urban_fraction = options['central_fraction']*pop_layout["urban"]/(pop_layout[["urban","rural"]].sum(axis=1))
|
||||||
|
|
||||||
# building retrofitting, exogenously reduce space heat demand
|
# exogenously reduce space heat demand
|
||||||
if options["retrofitting"]["retro_exogen"]:
|
if options["reduce_space_heat_exogenously"]:
|
||||||
dE = get_parameter(options["retrofitting"]["dE"])
|
dE = get_parameter(options["reduce_space_heat_exogenously_factor"])
|
||||||
print("retrofitting exogenously, assumed space heat reduction of ",
|
print("assumed space heat reduction of {} %".format(dE*100))
|
||||||
dE)
|
|
||||||
for sector in sectors:
|
for sector in sectors:
|
||||||
heat_demand[sector + " space"] = (1-dE)*heat_demand[sector + " space"]
|
heat_demand[sector + " space"] = (1-dE)*heat_demand[sector + " space"]
|
||||||
|
|
||||||
@ -1908,8 +1915,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/elec_s{simpl}_{clusters}_lv{lv}__{sector_opts}_{planning_horizons}.nc']
|
output=['results/version-cb48be3/prenetworks/{network}_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:
|
||||||
@ -1949,6 +1955,8 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
n.loads["carrier"] = "electricity"
|
n.loads["carrier"] = "electricity"
|
||||||
|
|
||||||
|
remove_non_electric_buses(n)
|
||||||
|
|
||||||
n.buses["location"] = n.buses.index
|
n.buses["location"] = n.buses.index
|
||||||
|
|
||||||
update_wind_solar_costs(n, costs)
|
update_wind_solar_costs(n, costs)
|
||||||
|
Loading…
Reference in New Issue
Block a user