add option for exogenously retrofitting, space heat demand is reduced before adding losses in DH
This commit is contained in:
parent
75ff2d19ee
commit
301d74f059
@ -78,9 +78,10 @@ sector:
|
|||||||
'shipping_average_efficiency' : 0.4 #For conversion of fuel oil to propulsion in 2011
|
'shipping_average_efficiency' : 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||||
'time_dep_hp_cop' : True
|
'time_dep_hp_cop' : True
|
||||||
'space_heating_fraction' : 1.0 #fraction of space heating active
|
'space_heating_fraction' : 1.0 #fraction of space heating active
|
||||||
'retrofitting' : False
|
'retrofitting' :
|
||||||
'retroI-fraction' : 0.25
|
'retro_exogen': True # space heat demand savings exogenously
|
||||||
'retroII-fraction' : 0.55
|
'dE': 0.4 # reduction of space heat demand (applied before losses in DH)
|
||||||
|
'retro_endogen': False # co-optimise space heat savings
|
||||||
'retrofitting-cost_factor' : 1.0
|
'retrofitting-cost_factor' : 1.0
|
||||||
'tes' : True
|
'tes' : True
|
||||||
'tes_tau' : 3.
|
'tes_tau' : 3.
|
||||||
|
@ -78,9 +78,10 @@ sector:
|
|||||||
'shipping_average_efficiency' : 0.4 #For conversion of fuel oil to propulsion in 2011
|
'shipping_average_efficiency' : 0.4 #For conversion of fuel oil to propulsion in 2011
|
||||||
'time_dep_hp_cop' : True
|
'time_dep_hp_cop' : True
|
||||||
'space_heating_fraction' : 1.0 #fraction of space heating active
|
'space_heating_fraction' : 1.0 #fraction of space heating active
|
||||||
'retrofitting' : False
|
'retrofitting' :
|
||||||
'retroI-fraction' : 0.25
|
'retro_exogen': True # space heat demand savings exogenously
|
||||||
'retroII-fraction' : 0.55
|
'dE': [0.0, 0.1, 0.2, 0.5] # reduction of space heat demand per year (applied before losses in DH)
|
||||||
|
'retro_endogen': False # co-optimise space heat savings
|
||||||
'retrofitting-cost_factor' : 1.0
|
'retrofitting-cost_factor' : 1.0
|
||||||
'tes' : True
|
'tes' : True
|
||||||
'tes_tau' : 3.
|
'tes_tau' : 3.
|
||||||
|
@ -1056,7 +1056,21 @@ 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))
|
||||||
|
|
||||||
for name in ["residential rural","services rural","residential urban decentral","services urban decentral","urban central"]:
|
# building retrofitting, exogenously reduce space heat demand
|
||||||
|
if options["retrofitting"]["retro_exogen"]:
|
||||||
|
dE = options["retrofitting"]["dE"]
|
||||||
|
if snakemake.config["foresight"]=='myopic':
|
||||||
|
year = int(snakemake.wildcards.planning_horizons[-4:])
|
||||||
|
dE = dE[snakemake.config["scenario"]["planning_horizons"].index(year)]
|
||||||
|
print("retrofitting exogenously, assumed space heat reduction of ",
|
||||||
|
dE)
|
||||||
|
for sector in sectors:
|
||||||
|
heat_demand[sector + " space"] = heat_demand[sector + " space"].apply(lambda x: retro_exogen(x, dE))
|
||||||
|
|
||||||
|
heat_systems = ["residential rural", "services rural",
|
||||||
|
"residential urban decentral","services urban decentral",
|
||||||
|
"urban central"]
|
||||||
|
for name in heat_systems:
|
||||||
|
|
||||||
name_type = "central" if name == "urban central" else "decentral"
|
name_type = "central" if name == "urban central" else "decentral"
|
||||||
|
|
||||||
@ -1079,6 +1093,7 @@ def add_heat(network):
|
|||||||
if sector in name:
|
if sector in name:
|
||||||
heat_load = heat_demand[[sector + " water",sector + " space"]].groupby(level=1,axis=1).sum()[nodes[name]].multiply(factor)
|
heat_load = heat_demand[[sector + " water",sector + " space"]].groupby(level=1,axis=1).sum()[nodes[name]].multiply(factor)
|
||||||
|
|
||||||
|
|
||||||
if name == "urban central":
|
if name == "urban central":
|
||||||
heat_load = heat_demand.groupby(level=1,axis=1).sum()[nodes[name]].multiply(urban_fraction[nodes[name]]*(1+options['district_heating_loss']))
|
heat_load = heat_demand.groupby(level=1,axis=1).sum()[nodes[name]].multiply(urban_fraction[nodes[name]]*(1+options['district_heating_loss']))
|
||||||
|
|
||||||
@ -1269,66 +1284,6 @@ def add_heat(network):
|
|||||||
lifetime=costs.at['micro CHP','lifetime'])
|
lifetime=costs.at['micro CHP','lifetime'])
|
||||||
|
|
||||||
|
|
||||||
#NB: this currently doesn't work for pypsa-eur model
|
|
||||||
if options['retrofitting']:
|
|
||||||
|
|
||||||
retro_nodes = pd.Index(["DE"])
|
|
||||||
|
|
||||||
space_heat_demand = space_heat_demand[retro_nodes]
|
|
||||||
|
|
||||||
square_metres = population[retro_nodes]/population['DE']*5.7e9 #HPI 3.4e9m^2 for DE res, 2.3e9m^2 for tert https://doi.org/10.1016/j.rser.2013.09.012
|
|
||||||
|
|
||||||
space_peak = space_heat_demand.max()
|
|
||||||
|
|
||||||
space_pu = space_heat_demand.divide(space_peak)
|
|
||||||
|
|
||||||
network.add("Carrier", "retrofitting")
|
|
||||||
|
|
||||||
network.madd('Generator',
|
|
||||||
retro_nodes,
|
|
||||||
suffix=' retrofitting I',
|
|
||||||
bus=retro_nodes+' heat',
|
|
||||||
carrier="retrofitting",
|
|
||||||
p_nom_extendable=True,
|
|
||||||
p_nom_max=options['retroI-fraction']*space_peak*(1-urban_fraction),
|
|
||||||
p_max_pu=space_pu,
|
|
||||||
p_min_pu=space_pu,
|
|
||||||
capital_cost=options['retrofitting-cost_factor']*costs.at['retrofitting I','fixed']*square_metres/(options['retroI-fraction']*space_peak))
|
|
||||||
|
|
||||||
network.madd('Generator',
|
|
||||||
retro_nodes,
|
|
||||||
suffix=' retrofitting II',
|
|
||||||
bus=retro_nodes+' heat',
|
|
||||||
carrier="retrofitting",
|
|
||||||
p_nom_extendable=True,
|
|
||||||
p_nom_max=options['retroII-fraction']*space_peak*(1-urban_fraction),
|
|
||||||
p_max_pu=space_pu,
|
|
||||||
p_min_pu=space_pu,
|
|
||||||
capital_cost=options['retrofitting-cost_factor']*costs.at['retrofitting II','fixed']*square_metres/(options['retroII-fraction']*space_peak))
|
|
||||||
|
|
||||||
network.madd('Generator',
|
|
||||||
retro_nodes,
|
|
||||||
suffix=' urban retrofitting I',
|
|
||||||
bus=retro_nodes+' urban heat',
|
|
||||||
carrier="retrofitting",
|
|
||||||
p_nom_extendable=True,
|
|
||||||
p_nom_max=options['retroI-fraction']*space_peak*urban_fraction,
|
|
||||||
p_max_pu=space_pu,
|
|
||||||
p_min_pu=space_pu,
|
|
||||||
capital_cost=options['retrofitting-cost_factor']*costs.at['retrofitting I','fixed']*square_metres/(options['retroI-fraction']*space_peak))
|
|
||||||
|
|
||||||
network.madd('Generator',
|
|
||||||
retro_nodes,
|
|
||||||
suffix=' urban retrofitting II',
|
|
||||||
bus=retro_nodes+' urban heat',
|
|
||||||
carrier="retrofitting",
|
|
||||||
p_nom_extendable=True,
|
|
||||||
p_nom_max=options['retroII-fraction']*space_peak*urban_fraction,
|
|
||||||
p_max_pu=space_pu,
|
|
||||||
p_min_pu=space_pu,
|
|
||||||
capital_cost=options['retrofitting-cost_factor']*costs.at['retrofitting II','fixed']*square_metres/(options['retroII-fraction']*space_peak))
|
|
||||||
|
|
||||||
|
|
||||||
def create_nodes_for_heat_sector():
|
def create_nodes_for_heat_sector():
|
||||||
sectors = ["residential", "services"]
|
sectors = ["residential", "services"]
|
||||||
# stores the different groups of nodes
|
# stores the different groups of nodes
|
||||||
|
Loading…
Reference in New Issue
Block a user