added flexible operation
This commit is contained in:
parent
52c6ce922c
commit
bf79b4a817
@ -513,6 +513,8 @@ sector:
|
|||||||
enhanced_geothermal_performant: true # if true, adds only the cheapest patch of EGS potential to each region
|
enhanced_geothermal_performant: true # if true, adds only the cheapest patch of EGS potential to each region
|
||||||
enhanced_geothermal_flexible: true # if true, adds a storage unit simulating flexible operation of EGS, see Ricks et al. 2023
|
enhanced_geothermal_flexible: true # if true, adds a storage unit simulating flexible operation of EGS, see Ricks et al. 2023
|
||||||
enhanced_geothermal_var_cf: true # if true, adds time-dependent capacity factor to EGS, see Ricks et al. 2023
|
enhanced_geothermal_var_cf: true # if true, adds time-dependent capacity factor to EGS, see Ricks et al. 2023
|
||||||
|
enhanced_geothermal_reservoir_max_hours: 240 # relavant for flexible EGS, see Ricks et al. 2023
|
||||||
|
enhanced_geothermal_reservoir_max_boost: 0.25 # share of generation that can be added by flexible EGS, see Ricks et al. 2023
|
||||||
|
|
||||||
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#industry
|
# docs in https://pypsa-eur.readthedocs.io/en/latest/configuration.html#industry
|
||||||
industry:
|
industry:
|
||||||
|
@ -3468,6 +3468,28 @@ def add_enhanced_geothermal(
|
|||||||
efficiency=efficiency_dh * 2.,
|
efficiency=efficiency_dh * 2.,
|
||||||
p_nom_extendable=True,
|
p_nom_extendable=True,
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
n.links.at[bus + " geothermal organic rankine cycle", "efficiency"] = efficiency_orc
|
||||||
|
|
||||||
|
if snakemake.params.sector["enhanced_geothermal_flexible"]:
|
||||||
|
|
||||||
|
# this StorageUnit represents flexible operation using the geothermal reservoir.
|
||||||
|
# Hence, it is intuitively wrong to install it at the surface bus,
|
||||||
|
# this is however the more lean and computationally efficient solution.
|
||||||
|
|
||||||
|
max_hours = snakemake.params.sector["enhanced_geothermal_reservoir_max_hours"]
|
||||||
|
boost = snakemake.params.sector["enhanced_geothermal_reservoir_max_boost"]
|
||||||
|
|
||||||
|
max_hours = max_hours * boost
|
||||||
|
n.add(
|
||||||
|
"StorageUnit",
|
||||||
|
bus + ' geothermal reservoir',
|
||||||
|
bus=f"geothermal heat surface {bus}",
|
||||||
|
carrier="geothermal heat",
|
||||||
|
p_nom_extendable=True,
|
||||||
|
p_min_pu=-1. - boost,
|
||||||
|
max_hours=max_hours,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -777,6 +777,23 @@ def add_geothermal_chp_constraint(n):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def add_flexible_egs_constraint(n):
|
||||||
|
well_index = n.links.loc[n.links.carrier == 'geothermal heat'].index
|
||||||
|
storage_index = n.storage_units.loc[n.storage_units.carrier == 'geothermal heat '].index
|
||||||
|
|
||||||
|
p_nom_rhs = (
|
||||||
|
n.model["Link-p_nom"].loc[well_index]
|
||||||
|
)
|
||||||
|
p_nom_lhs = (
|
||||||
|
n.model["StorageUnit-p_nom"].loc[storage_index]
|
||||||
|
)
|
||||||
|
|
||||||
|
n.model.add_constraints(
|
||||||
|
p_nom_lhs <= p_nom_rhs,
|
||||||
|
name="Upper bounds the charging capacity of the storage unit",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def extra_functionality(n, snapshots):
|
def extra_functionality(n, snapshots):
|
||||||
"""
|
"""
|
||||||
Collects supplementary constraints which will be passed to
|
Collects supplementary constraints which will be passed to
|
||||||
@ -808,6 +825,8 @@ def extra_functionality(n, snapshots):
|
|||||||
add_retrofit_gas_boiler_constraint(n, snapshots)
|
add_retrofit_gas_boiler_constraint(n, snapshots)
|
||||||
if "geothermal district heat" in n.links.carrier:
|
if "geothermal district heat" in n.links.carrier:
|
||||||
add_geothermal_chp_constraint(n)
|
add_geothermal_chp_constraint(n)
|
||||||
|
if config["sector"]["enhanced_geothermal_flexible"]:
|
||||||
|
add_flexible_egs_constraint(n)
|
||||||
|
|
||||||
|
|
||||||
def solve_network(n, config, solving, opts="", **kwargs):
|
def solve_network(n, config, solving, opts="", **kwargs):
|
||||||
|
Loading…
Reference in New Issue
Block a user