add new default to overdimension heating in individual buildings

This allows them to cover heat demand peaks e.g. 10% higher than
those in the data.

The disadvantage of manipulating the costs is that the capacity is
then not quite right. This way at least the costs are right.

Doing it properly would require introducing artificial peaks, but this
creates new problems (e.g. what is going on with wind/solar/other
demand).
This commit is contained in:
Tom Brown 2024-01-29 12:22:54 +01:00 committed by Fabian Neumann
parent 6d94439bbb
commit 92d00a0c83
3 changed files with 20 additions and 7 deletions

View File

@ -483,6 +483,7 @@ sector:
resistive_heaters: true
oil_boilers: false
biomass_boiler: true
overdimension_individual_heating: 1.1 #to cover demand peaks bigger than data
chp: true
micro_chp: false
solar_thermal: true

View File

@ -592,7 +592,9 @@ if __name__ == "__main__":
.to_pandas()
.reindex(index=n.snapshots)
)
default_lifetime = snakemake.params.existing_capacities["default_heating_lifetime"]
default_lifetime = snakemake.params.existing_capacities[
"default_heating_lifetime"
]
add_heating_capacities_installed_before_baseyear(
n,
baseyear,

View File

@ -1680,6 +1680,8 @@ def add_heat(n, costs):
heat_demand = build_heat_demand(n)
overdim_factor = options["overdimension_individual_heating"]
district_heat_info = pd.read_csv(snakemake.input.district_heat_share, index_col=0)
dist_fraction = district_heat_info["district fraction of node"]
urban_fraction = district_heat_info["urban fraction"]
@ -1814,7 +1816,8 @@ def add_heat(n, costs):
carrier=f"{name} {heat_pump_type} heat pump",
efficiency=efficiency,
capital_cost=costs.at[costs_name, "efficiency"]
* costs.at[costs_name, "fixed"],
* costs.at[costs_name, "fixed"]
* overdim_factor,
p_nom_extendable=True,
lifetime=costs.at[costs_name, "lifetime"],
)
@ -1883,7 +1886,9 @@ def add_heat(n, costs):
bus1=nodes + f" {name} heat",
carrier=name + " resistive heater",
efficiency=costs.at[key, "efficiency"],
capital_cost=costs.at[key, "efficiency"] * costs.at[key, "fixed"],
capital_cost=costs.at[key, "efficiency"]
* costs.at[key, "fixed"]
* overdim_factor,
p_nom_extendable=True,
lifetime=costs.at[key, "lifetime"],
)
@ -1901,7 +1906,9 @@ def add_heat(n, costs):
carrier=name + " gas boiler",
efficiency=costs.at[key, "efficiency"],
efficiency2=costs.at["gas", "CO2 intensity"],
capital_cost=costs.at[key, "efficiency"] * costs.at[key, "fixed"],
capital_cost=costs.at[key, "efficiency"]
* costs.at[key, "fixed"]
* overdim_factor,
lifetime=costs.at[key, "lifetime"],
)
@ -1915,7 +1922,8 @@ def add_heat(n, costs):
bus=nodes + f" {name} heat",
carrier=name + " solar thermal",
p_nom_extendable=True,
capital_cost=costs.at[name_type + " solar thermal", "fixed"],
capital_cost=costs.at[name_type + " solar thermal", "fixed"]
* overdim_factor,
p_max_pu=solar_thermal[nodes],
lifetime=costs.at[name_type + " solar thermal", "lifetime"],
)
@ -2348,7 +2356,8 @@ def add_biomass(n, costs):
carrier=name + " biomass boiler",
efficiency=costs.at["biomass boiler", "efficiency"],
capital_cost=costs.at["biomass boiler", "efficiency"]
* costs.at["biomass boiler", "fixed"],
* costs.at["biomass boiler", "fixed"]
* options["overdimension_individual_heating"],
marginal_cost=costs.at["biomass boiler", "pelletizing cost"],
lifetime=costs.at["biomass boiler", "lifetime"],
)
@ -2806,7 +2815,8 @@ def add_industry(n, costs):
efficiency=costs.at["decentral oil boiler", "efficiency"],
efficiency2=costs.at["oil", "CO2 intensity"],
capital_cost=costs.at["decentral oil boiler", "efficiency"]
* costs.at["decentral oil boiler", "fixed"],
* costs.at["decentral oil boiler", "fixed"]
* options["overdimension_individual_heating"],
lifetime=costs.at["decentral oil boiler", "lifetime"],
)