Merge branch 'update-district-heating-cops' of https://github.com/PyPSA/pypsa-eur into update-district-heating-cops
This commit is contained in:
commit
ff12480713
@ -408,7 +408,6 @@ sector:
|
|||||||
2045: 0.8
|
2045: 0.8
|
||||||
2050: 1.0
|
2050: 1.0
|
||||||
district_heating_loss: 0.15
|
district_heating_loss: 0.15
|
||||||
# check these numbers!
|
|
||||||
forward_temperature: 90 #C
|
forward_temperature: 90 #C
|
||||||
return_temperature: 50 #C
|
return_temperature: 50 #C
|
||||||
heat_source_cooling: 6 #K
|
heat_source_cooling: 6 #K
|
||||||
@ -1063,7 +1062,7 @@ plotting:
|
|||||||
V2G: '#e5ffa8'
|
V2G: '#e5ffa8'
|
||||||
land transport EV: '#baf238'
|
land transport EV: '#baf238'
|
||||||
land transport demand: '#38baf2'
|
land transport demand: '#38baf2'
|
||||||
Li ion: '#baf238'
|
EV battery: '#baf238'
|
||||||
# hot water storage
|
# hot water storage
|
||||||
water tanks: '#e69487'
|
water tanks: '#e69487'
|
||||||
residential rural water tanks: '#f7b7a3'
|
residential rural water tanks: '#f7b7a3'
|
||||||
|
@ -10,10 +10,10 @@ district_heating,--,,`prepare_sector_network.py <https://github.com/PyPSA/pypsa-
|
|||||||
-- return_temperature,°C,float,Return temperature in district heating. Must be lower than forward temperature
|
-- return_temperature,°C,float,Return temperature in district heating. Must be lower than forward temperature
|
||||||
-- heat_source_cooling,K,float,Cooling of heat source for heat pumps
|
-- heat_source_cooling,K,float,Cooling of heat source for heat pumps
|
||||||
-- heat_pump_cop_approximation,,,
|
-- heat_pump_cop_approximation,,,
|
||||||
-- refrigerant,--,"{ammonia, isobutane}",Heat pump refrigerant assumed for COP approximation
|
-- -- refrigerant,--,"{ammonia, isobutane}",Heat pump refrigerant assumed for COP approximation
|
||||||
-- heat_exchanger_pinch_point_temperature_difference,K,float,Heat pump pinch point temperature difference in heat exchangers assumed for approximation.
|
-- -- heat_exchanger_pinch_point_temperature_difference,K,float,Heat pump pinch point temperature difference in heat exchangers assumed for approximation.
|
||||||
-- isentropic_compressor_efficiency,--,float,Isentropic efficiency of heat pump compressor assumed for approximation. Must be between 0 and 1.
|
-- -- isentropic_compressor_efficiency,--,float,Isentropic efficiency of heat pump compressor assumed for approximation. Must be between 0 and 1.
|
||||||
-- heat_loss,--,float,Heat pump heat loss assumed for approximation. Must be between 0 and 1.
|
-- -- heat_loss,--,float,Heat pump heat loss assumed for approximation. Must be between 0 and 1.
|
||||||
-- progress,--,Dictionary with planning horizons as keys., Increase of today's district heating demand to potential maximum district heating share. Progress = 0 means today's district heating share. Progress = 1 means maximum fraction of urban demand is supplied by district heating
|
-- progress,--,Dictionary with planning horizons as keys., Increase of today's district heating demand to potential maximum district heating share. Progress = 0 means today's district heating share. Progress = 1 means maximum fraction of urban demand is supplied by district heating
|
||||||
-- district_heating_loss,--,float,Share increase in district heat demand in urban central due to heat losses
|
-- district_heating_loss,--,float,Share increase in district heat demand in urban central due to heat losses
|
||||||
cluster_heat_buses,--,"{true, false}",Cluster residential and service heat buses in `prepare_sector_network.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/prepare_sector_network.py>`_ to one to save memory.
|
cluster_heat_buses,--,"{true, false}",Cluster residential and service heat buses in `prepare_sector_network.py <https://github.com/PyPSA/pypsa-eur-sec/blob/master/scripts/prepare_sector_network.py>`_ to one to save memory.
|
||||||
|
|
@ -12,6 +12,8 @@ Upcoming Release
|
|||||||
|
|
||||||
* Changed heat pump COP approximation for central heating to be based on Jensen et al. 2018 and a default forward temperature of 90C. This is more realistic for district heating than the previously used approximation method.
|
* Changed heat pump COP approximation for central heating to be based on Jensen et al. 2018 and a default forward temperature of 90C. This is more realistic for district heating than the previously used approximation method.
|
||||||
|
|
||||||
|
* Renamed the carrier of batteries in BEVs from `battery storage` to `EV battery` and the corresponding bus carrier from `Li ion` to `EV battery`. This is to avoid confusion with stationary battery storage.
|
||||||
|
|
||||||
* Changed default assumptions about waste heat usage from PtX and fuel cells in district heating.
|
* Changed default assumptions about waste heat usage from PtX and fuel cells in district heating.
|
||||||
The default value for the link efficiency scaling factor was changed from 100% to 25%.
|
The default value for the link efficiency scaling factor was changed from 100% to 25%.
|
||||||
It can be set to other values in the configuration ``sector: use_TECHNOLOGY_waste_heat``.
|
It can be set to other values in the configuration ``sector: use_TECHNOLOGY_waste_heat``.
|
||||||
|
@ -89,10 +89,6 @@ def add_brownfield(n, n_p, year):
|
|||||||
# deal with gas network
|
# deal with gas network
|
||||||
pipe_carrier = ["gas pipeline"]
|
pipe_carrier = ["gas pipeline"]
|
||||||
if snakemake.params.H2_retrofit:
|
if snakemake.params.H2_retrofit:
|
||||||
# drop capacities of previous year to avoid duplicating
|
|
||||||
to_drop = n.links.carrier.isin(pipe_carrier) & (n.links.build_year != year)
|
|
||||||
n.mremove("Link", n.links.loc[to_drop].index)
|
|
||||||
|
|
||||||
# subtract the already retrofitted from today's gas grid capacity
|
# subtract the already retrofitted from today's gas grid capacity
|
||||||
h2_retrofitted_fixed_i = n.links[
|
h2_retrofitted_fixed_i = n.links[
|
||||||
(n.links.carrier == "H2 pipeline retrofitted")
|
(n.links.carrier == "H2 pipeline retrofitted")
|
||||||
@ -115,10 +111,6 @@ def add_brownfield(n, n_p, year):
|
|||||||
index=pipe_capacity.index
|
index=pipe_capacity.index
|
||||||
).fillna(0)
|
).fillna(0)
|
||||||
n.links.loc[gas_pipes_i, "p_nom"] = remaining_capacity
|
n.links.loc[gas_pipes_i, "p_nom"] = remaining_capacity
|
||||||
else:
|
|
||||||
new_pipes = n.links.carrier.isin(pipe_carrier) & (n.links.build_year == year)
|
|
||||||
n.links.loc[new_pipes, "p_nom"] = 0.0
|
|
||||||
n.links.loc[new_pipes, "p_nom_min"] = 0.0
|
|
||||||
|
|
||||||
|
|
||||||
def disable_grid_expansion_if_limit_hit(n):
|
def disable_grid_expansion_if_limit_hit(n):
|
||||||
|
@ -250,7 +250,7 @@ def adjust_stores(n):
|
|||||||
n.stores.loc[cyclic_i, "e_cyclic_per_period"] = True
|
n.stores.loc[cyclic_i, "e_cyclic_per_period"] = True
|
||||||
n.stores.loc[cyclic_i, "e_cyclic"] = False
|
n.stores.loc[cyclic_i, "e_cyclic"] = False
|
||||||
# non cyclic store assumptions
|
# non cyclic store assumptions
|
||||||
non_cyclic_store = ["co2", "co2 stored", "solid biomass", "biogas", "Li ion"]
|
non_cyclic_store = ["co2", "co2 stored", "solid biomass", "biogas", "EV battery"]
|
||||||
co2_i = n.stores[n.stores.carrier.isin(non_cyclic_store)].index
|
co2_i = n.stores[n.stores.carrier.isin(non_cyclic_store)].index
|
||||||
n.stores.loc[co2_i, "e_cyclic_per_period"] = False
|
n.stores.loc[co2_i, "e_cyclic_per_period"] = False
|
||||||
n.stores.loc[co2_i, "e_cyclic"] = False
|
n.stores.loc[co2_i, "e_cyclic"] = False
|
||||||
|
@ -1238,12 +1238,14 @@ def add_storage_and_grids(n, costs):
|
|||||||
gas_pipes["p_nom_min"] = 0.0
|
gas_pipes["p_nom_min"] = 0.0
|
||||||
# 0.1 EUR/MWkm/a to prefer decommissioning to address degeneracy
|
# 0.1 EUR/MWkm/a to prefer decommissioning to address degeneracy
|
||||||
gas_pipes["capital_cost"] = 0.1 * gas_pipes.length
|
gas_pipes["capital_cost"] = 0.1 * gas_pipes.length
|
||||||
|
gas_pipes["p_nom_extendable"] = True
|
||||||
else:
|
else:
|
||||||
gas_pipes["p_nom_max"] = np.inf
|
gas_pipes["p_nom_max"] = np.inf
|
||||||
gas_pipes["p_nom_min"] = gas_pipes.p_nom
|
gas_pipes["p_nom_min"] = gas_pipes.p_nom
|
||||||
gas_pipes["capital_cost"] = (
|
gas_pipes["capital_cost"] = (
|
||||||
gas_pipes.length * costs.at["CH4 (g) pipeline", "fixed"]
|
gas_pipes.length * costs.at["CH4 (g) pipeline", "fixed"]
|
||||||
)
|
)
|
||||||
|
gas_pipes["p_nom_extendable"] = False
|
||||||
|
|
||||||
n.madd(
|
n.madd(
|
||||||
"Link",
|
"Link",
|
||||||
@ -1252,14 +1254,14 @@ def add_storage_and_grids(n, costs):
|
|||||||
bus1=gas_pipes.bus1 + " gas",
|
bus1=gas_pipes.bus1 + " gas",
|
||||||
p_min_pu=gas_pipes.p_min_pu,
|
p_min_pu=gas_pipes.p_min_pu,
|
||||||
p_nom=gas_pipes.p_nom,
|
p_nom=gas_pipes.p_nom,
|
||||||
p_nom_extendable=True,
|
p_nom_extendable=gas_pipes.p_nom_extendable,
|
||||||
p_nom_max=gas_pipes.p_nom_max,
|
p_nom_max=gas_pipes.p_nom_max,
|
||||||
p_nom_min=gas_pipes.p_nom_min,
|
p_nom_min=gas_pipes.p_nom_min,
|
||||||
length=gas_pipes.length,
|
length=gas_pipes.length,
|
||||||
capital_cost=gas_pipes.capital_cost,
|
capital_cost=gas_pipes.capital_cost,
|
||||||
tags=gas_pipes.name,
|
tags=gas_pipes.name,
|
||||||
carrier="gas pipeline",
|
carrier="gas pipeline",
|
||||||
lifetime=costs.at["CH4 (g) pipeline", "lifetime"],
|
lifetime=np.inf,
|
||||||
)
|
)
|
||||||
|
|
||||||
# remove fossil generators where there is neither
|
# remove fossil generators where there is neither
|
||||||
@ -1541,14 +1543,14 @@ def add_EVs(
|
|||||||
temperature,
|
temperature,
|
||||||
):
|
):
|
||||||
|
|
||||||
n.add("Carrier", "Li ion")
|
n.add("Carrier", "EV battery")
|
||||||
|
|
||||||
n.madd(
|
n.madd(
|
||||||
"Bus",
|
"Bus",
|
||||||
spatial.nodes,
|
spatial.nodes,
|
||||||
suffix=" EV battery",
|
suffix=" EV battery",
|
||||||
location=spatial.nodes,
|
location=spatial.nodes,
|
||||||
carrier="Li ion",
|
carrier="EV battery",
|
||||||
unit="MWh_el",
|
unit="MWh_el",
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1621,9 +1623,9 @@ def add_EVs(
|
|||||||
n.madd(
|
n.madd(
|
||||||
"Store",
|
"Store",
|
||||||
spatial.nodes,
|
spatial.nodes,
|
||||||
suffix=" battery storage",
|
suffix=" EV battery",
|
||||||
bus=spatial.nodes + " EV battery",
|
bus=spatial.nodes + " EV battery",
|
||||||
carrier="battery storage",
|
carrier="EV battery",
|
||||||
e_cyclic=True,
|
e_cyclic=True,
|
||||||
e_nom=e_nom,
|
e_nom=e_nom,
|
||||||
e_max_pu=1,
|
e_max_pu=1,
|
||||||
|
Loading…
Reference in New Issue
Block a user