Merge branch 'master' into update-district-heating-cops

This commit is contained in:
Amos Schledorn 2024-07-29 10:33:39 +02:00 committed by GitHub
commit da3ad1725e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 12 additions and 16 deletions

View File

@ -1063,7 +1063,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'

View File

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

View File

@ -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):

View File

@ -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

View File

@ -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,