Source code for egon.data.datasets.scenario_parameters.parameters

"""The module containing all parameters for the scenario table"""

import pandas as pd

from egon.data.datasets import load_sources_and_targets


[docs] def read_csv(year): _, targets = load_sources_and_targets("ScenarioParameters") source = targets.files["data_dir"] return pd.read_csv(f"{source}costs_{year}.csv")
[docs] def read_costs(df, technology, parameter, value_only=True): result = df.loc[ (df.technology == technology) & (df.parameter == parameter) ].squeeze() # Rescale costs to EUR/MW if "EUR/kW" in result.unit: result.value *= 1e3 result.unit = result.unit.replace("kW", "MW") if value_only: return result.value else: return result
[docs] def annualize_capital_costs(overnight_costs, lifetime, p): """ Parameters ---------- overnight_costs : float Overnight investment costs in EUR/MW or EUR/MW/km lifetime : int Number of years in which payments will be made p : float Interest rate in p.u. Returns ------- float Annualized capital costs in EUR/MW/a or EUR/MW/km/a """ # Calculate present value of an annuity (PVA) PVA = (1 / p) - (1 / (p * (1 + p) ** lifetime)) return overnight_costs / PVA
[docs] def global_settings(scenario): """Returns global paramaters for the selected scenario. Parameters ---------- scenario : str Name of the scenario. Returns ------- parameters : dict List of global parameters """ if scenario == "eGon2035": parameters = { "weather_year": 2011, "population_year": 2035, "fuel_costs": { # Netzentwicklungsplan Strom 2035, Version 2021, 1. Entwurf, p. 39, table 6 "oil": 73.8, # [EUR/MWh] "gas": 25.6, # [EUR/MWh] "coal": 20.2, # [EUR/MWh] "lignite": 4.0, # [EUR/MWh] "nuclear": 1.7, # [EUR/MWh] "biomass": 40, # Dummyvalue, ToDo: Find a suitable source }, "co2_costs": 76.5, # [EUR/t_CO2] "co2_emissions": { # Netzentwicklungsplan Strom 2035, Version 2021, 1. Entwurf, p. 40, table 8 "waste": 0.165, # [t_CO2/MW_th] "lignite": 0.393, # [t_CO2/MW_th] "gas": 0.201, # [t_CO2/MW_th] "nuclear": 0.0, # [t_CO2/MW_th] "oil": 0.288, # [t_CO2/MW_th] "coal": 0.335, # [t_CO2/MW_th] "other_non_renewable": 0.268, # [t_CO2/MW_th] }, "interest_rate": 0.05, # [p.u.] } elif scenario == "eGon100RE": parameters = { "weather_year": 2011, "population_year": 2050, "fuel_costs": { # Netzentwicklungsplan Strom 2035, Version 2021, 1. Entwurf, p. 39, table 6 "oil": 73.8, # [EUR/MWh] "gas": 25.6, # [EUR/MWh] "coal": 20.2, # [EUR/MWh] "lignite": 4.0, # [EUR/MWh] "nuclear": 1.7, # [EUR/MWh] }, "co2_costs": 76.5, # [EUR/t_CO2] "co2_emissions": { # Netzentwicklungsplan Strom 2035, Version 2021, 1. Entwurf, p. 40, table 8 "waste": 0.165, # [t_CO2/MW_th] "lignite": 0.393, # [t_CO2/MW_th] "gas": 0.201, # [t_CO2/MW_th] "nuclear": 0.0, # [t_CO2/MW_th] "oil": 0.288, # [t_CO2/MW_th] "coal": 0.335, # [t_CO2/MW_th] "other_non_renewable": 0.268, # [t_CO2/MW_th] }, "interest_rate": 0.05, # [p.u.] } elif scenario == "eGon2021": parameters = { "weather_year": 2011, "population_year": 2021, } elif scenario == "status2023": parameters = { "weather_year": 2023, "population_year": 2019, # TODO: check if possible for 2023 "fuel_costs": { # TYNDP 2020, data for 2023 (https://2020.entsos-tyndp-scenarios.eu/fuel-commodities-and-carbon-prices/) "oil": 16.4 * 3.6, # [EUR/MWh] "gas": 6.1 * 3.6, # [EUR/MWh] "coal": 3.4 * 3.6, # [EUR/MWh] "lignite": 1.1 * 3.6, # [EUR/MWh] "nuclear": 0.47 * 3.6, # [EUR/MWh] "biomass": read_costs(read_csv(2020), "biomass", "fuel"), }, "co2_costs": 83.66, # [EUR/t_CO2], source: # https://www.iwr.de/news/co2-emissionshandel-deutschland-erzielt-2023-rekordeinnahmen-von-ueber-18-mrd-euro-news38528 "co2_emissions": { # Netzentwicklungsplan Strom 2037, Genehmigtr Scenariorahmen, p. 66, table 21 # https://www.netzentwicklungsplan.de/sites/default/files/2023-01/Szenariorahmen_2037_Genehmigung.pdf "waste": 0.165, # [t_CO2/MW_th] "lignite": 0.393, # [t_CO2/MW_th] "gas": 0.201, # [t_CO2/MW_th] "nuclear": 0.0, # [t_CO2/MW_th] "oil": 0.288, # [t_CO2/MW_th] "coal": 0.337, # [t_CO2/MW_th] "other_non_renewable": 0.268, # [t_CO2/MW_th] }, "interest_rate": 0.05, # [p.u.] } elif scenario == "status2019": parameters = { "weather_year": 2011, "population_year": 2019, "fuel_costs": { # TYNDP 2020, data for 2020 (https://2020.entsos-tyndp-scenarios.eu/fuel-commodities-and-carbon-prices/) "oil": 12.9 * 3.6, # [EUR/MWh] "gas": 5.6 * 3.6, # [EUR/MWh] "coal": 3.0 * 3.6, # [EUR/MWh] "lignite": 1.1 * 3.6, # [EUR/MWh] "nuclear": 0.47 * 3.6, # [EUR/MWh] "biomass": read_costs(read_csv(2020), "biomass", "fuel"), }, "co2_costs": 24.7, # [EUR/t_CO2], source: # https://de.statista.com/statistik/daten/studie/1304069/umfrage/preisentwicklung-von-co2-emissionsrechten-in-eu/ "co2_emissions": { # Netzentwicklungsplan Strom 2035, Version 2021, 1. Entwurf, p. 40, table 8 "waste": 0.165, # [t_CO2/MW_th] "lignite": 0.393, # [t_CO2/MW_th] "gas": 0.201, # [t_CO2/MW_th] "nuclear": 0.0, # [t_CO2/MW_th] "oil": 0.288, # [t_CO2/MW_th] "coal": 0.335, # [t_CO2/MW_th] "other_non_renewable": 0.268, # [t_CO2/MW_th] }, "interest_rate": 0.05, # [p.u.] } else: print(f"Scenario name {scenario} is not valid.") return parameters
[docs] def electricity(scenario): """Returns paramaters of the electricity sector for the selected scenario. Parameters ---------- scenario : str Name of the scenario. Returns ------- parameters : dict List of parameters of electricity sector """ if scenario == "eGon2035": costs = read_csv(2035) parameters = {"grid_topology": "Status Quo"} # Insert effciencies in p.u. parameters["efficiency"] = { "oil": read_costs(costs, "oil", "efficiency"), "battery": { "store": read_costs(costs, "battery inverter", "efficiency") ** 0.5, "dispatch": read_costs(costs, "battery inverter", "efficiency") ** 0.5, "standing_loss": 0, "max_hours": 6, "cyclic_state_of_charge": True, }, "pumped_hydro": { "store": read_costs(costs, "PHS", "efficiency") ** 0.5, "dispatch": read_costs(costs, "PHS", "efficiency") ** 0.5, "standing_loss": 0, "max_hours": 6, "cyclic_state_of_charge": True, }, } # Warning: Electrical parameters are set in osmTGmod, editing these values will not change the data! parameters["electrical_parameters"] = { "ac_line_110kV": { "s_nom": 260, # [MVA] "R": 0.109, # [Ohm/km] "L": 1.2, # [mH/km] }, "ac_cable_110kV": { "s_nom": 280, # [MVA] "R": 0.0177, # [Ohm/km] "L": 0.3, # [mH/km] }, "ac_line_220kV": { "s_nom": 520, # [MVA] "R": 0.109, # [Ohm/km] "L": 1.0, # [mH/km] }, "ac_cable_220kV": { "s_nom": 550, # [MVA] "R": 0.0176, # [Ohm/km] "L": 0.3, # [mH/km] }, "ac_line_380kV": { "s_nom": 1790, # [MVA] "R": 0.028, # [Ohm/km] "L": 0.8, # [mH/km] }, "ac_cable_380kV": { "s_nom": 925, # [MVA] "R": 0.0175, # [Ohm/km] "L": 0.3, # [mH/km] }, } # Insert overnight investment costs # Source for eHV grid costs: Netzentwicklungsplan Strom 2035, Version 2021, 2. Entwurf # Source for HV lines and cables: Dena Verteilnetzstudie 2021, p. 146 parameters["overnight_cost"] = { "ac_ehv_overhead_line": 2.5e6 / ( 2 * parameters["electrical_parameters"]["ac_line_380kV"]["s_nom"] ), # [EUR/km/MW] "ac_ehv_cable": 11.5e6 / ( 2 * parameters["electrical_parameters"]["ac_cable_380kV"][ "s_nom" ] ), # [EUR/km/MW] "ac_hv_overhead_line": 0.06e6 / parameters["electrical_parameters"]["ac_line_110kV"][ "s_nom" ], # [EUR/km/MW] "ac_hv_cable": 0.8e6 / parameters["electrical_parameters"]["ac_cable_110kV"][ "s_nom" ], # [EUR/km/MW] "dc_overhead_line": 0.5e3, # [EUR/km/MW] "dc_cable": 3.25e3, # [EUR/km/MW] "dc_inverter": 0.3e6, # [EUR/MW] "transformer_380_110": 17.33e3, # [EUR/MVA] "transformer_380_220": 13.33e3, # [EUR/MVA] "transformer_220_110": 17.5e3, # [EUR/MVA] "battery inverter": read_costs( costs, "battery inverter", "investment" ), "battery storage": read_costs( costs, "battery storage", "investment" ), } parameters["lifetime"] = { "ac_ehv_overhead_line": read_costs( costs, "HVAC overhead", "lifetime" ), "ac_ehv_cable": read_costs(costs, "HVAC overhead", "lifetime"), "ac_hv_overhead_line": read_costs( costs, "HVAC overhead", "lifetime" ), "ac_hv_cable": read_costs(costs, "HVAC overhead", "lifetime"), "dc_overhead_line": read_costs(costs, "HVDC overhead", "lifetime"), "dc_cable": read_costs(costs, "HVDC overhead", "lifetime"), "dc_inverter": read_costs(costs, "HVDC inverter pair", "lifetime"), "transformer_380_110": read_costs( costs, "HVAC overhead", "lifetime" ), "transformer_380_220": read_costs( costs, "HVAC overhead", "lifetime" ), "transformer_220_110": read_costs( costs, "HVAC overhead", "lifetime" ), "battery inverter": read_costs( costs, "battery inverter", "lifetime" ), "battery storage": read_costs( costs, "battery storage", "lifetime" ), } # Insert annualized capital costs # lines in EUR/km/MW/a # transfermer, inverter, battery in EUR/MW/a parameters["capital_cost"] = {} for comp in parameters["overnight_cost"].keys(): parameters["capital_cost"][comp] = annualize_capital_costs( parameters["overnight_cost"][comp], parameters["lifetime"][comp], global_settings("eGon2035")["interest_rate"], ) parameters["capital_cost"]["battery"] = ( parameters["capital_cost"]["battery inverter"] + parameters["efficiency"]["battery"]["max_hours"] * parameters["capital_cost"]["battery storage"] ) # Insert marginal_costs in EUR/MWh # marginal cost can include fuel, C02 and operation and maintenance costs parameters["marginal_cost"] = { "oil": global_settings(scenario)["fuel_costs"]["oil"] / read_costs(costs, "oil", "efficiency") + read_costs(costs, "oil", "VOM") + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["oil"] / read_costs(costs, "oil", "efficiency"), "other_non_renewable": global_settings(scenario)["fuel_costs"][ "gas" ] / read_costs(costs, "OCGT", "efficiency") + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["other_non_renewable"] / read_costs(costs, "OCGT", "efficiency"), "lignite": global_settings(scenario)["fuel_costs"]["lignite"] / read_costs(costs, "lignite", "efficiency") + read_costs(costs, "lignite", "VOM") + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["lignite"] / read_costs(costs, "lignite", "efficiency"), "coal": global_settings(scenario)["fuel_costs"]["coal"] / read_costs(costs, "coal", "efficiency") + read_costs(costs, "coal", "VOM") + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["coal"] / read_costs(costs, "coal", "efficiency"), "nuclear": global_settings(scenario)["fuel_costs"]["nuclear"] / read_costs(costs, "nuclear", "efficiency") + read_costs(costs, "nuclear", "VOM"), "biomass": global_settings(scenario)["fuel_costs"]["biomass"] / read_costs(costs, "biomass", "efficiency") + read_costs(costs, "biomass CHP", "VOM"), "wind_offshore": read_costs(costs, "offwind", "VOM"), "wind_onshore": read_costs(costs, "onwind", "VOM"), "solar": read_costs(costs, "solar", "VOM"), } parameters["annual_demand"] = { "households": 119.0 * 1e6, # MWh source: NEP 2021 "CTS": 135.3 * 1e6, # MWh source: NEP 2021 "industry": 225.4 * 1e6, # MWh source: NEP 2021 } elif scenario == "eGon100RE": costs = read_csv(2050) parameters = {"grid_topology": "Status Quo"} # Insert effciencies in p.u. parameters["efficiency"] = { "battery": { "store": read_costs(costs, "battery inverter", "efficiency") ** 0.5, "dispatch": read_costs(costs, "battery inverter", "efficiency") ** 0.5, "standing_loss": 0, "max_hours": 6, "cyclic_state_of_charge": True, }, "pumped_hydro": { "store": read_costs(costs, "PHS", "efficiency") ** 0.5, "dispatch": read_costs(costs, "PHS", "efficiency") ** 0.5, "standing_loss": 0, "max_hours": 6, "cyclic_state_of_charge": True, }, } # Warning: Electrical parameters are set in osmTGmod, editing these values will not change the data! parameters["electrical_parameters"] = { "ac_line_110kV": { "s_nom": 260, # [MVA] "R": 0.109, # [Ohm/km] "L": 1.2, # [mH/km] }, "ac_cable_110kV": { "s_nom": 280, # [MVA] "R": 0.0177, # [Ohm/km] "L": 0.3, # [mH/km] }, "ac_line_220kV": { "s_nom": 520, # [MVA] "R": 0.109, # [Ohm/km] "L": 1.0, # [mH/km] }, "ac_cable_220kV": { "s_nom": 550, # [MVA] "R": 0.0176, # [Ohm/km] "L": 0.3, # [mH/km] }, "ac_line_380kV": { "s_nom": 1790, # [MVA] "R": 0.028, # [Ohm/km] "L": 0.8, # [mH/km] }, "ac_cable_380kV": { "s_nom": 925, # [MVA] "R": 0.0175, # [Ohm/km] "L": 0.3, # [mH/km] }, } # Insert overnight investment costs # Source for transformer costs: Netzentwicklungsplan Strom 2035, Version 2021, 2. Entwurf # Source for HV lines and cables: Dena Verteilnetzstudie 2021, p. 146 parameters["overnight_cost"] = { "ac_ehv_overhead_line": read_costs( costs, "HVAC overhead", "investment" ), # [EUR/km/MW] "ac_hv_overhead_line": 0.06e6 / parameters["electrical_parameters"]["ac_line_110kV"][ "s_nom" ], # [EUR/km/MW] "ac_hv_cable": 0.8e6 / parameters["electrical_parameters"]["ac_cable_110kV"][ "s_nom" ], # [EUR/km/MW] "dc_overhead_line": read_costs( costs, "HVDC overhead", "investment" ), "dc_cable": read_costs(costs, "HVDC overhead", "investment"), "dc_inverter": read_costs( costs, "HVDC inverter pair", "investment" ), "transformer_380_110": 17.33e3, # [EUR/MVA] "transformer_380_220": 13.33e3, # [EUR/MVA] "transformer_220_110": 17.5e3, # [EUR/MVA] "battery inverter": read_costs( costs, "battery inverter", "investment" ), "battery storage": read_costs( costs, "battery storage", "investment" ), } parameters["lifetime"] = { "ac_ehv_overhead_line": read_costs( costs, "HVAC overhead", "lifetime" ), "ac_ehv_cable": read_costs(costs, "HVAC overhead", "lifetime"), "ac_hv_overhead_line": read_costs( costs, "HVAC overhead", "lifetime" ), "ac_hv_cable": read_costs(costs, "HVAC overhead", "lifetime"), "dc_overhead_line": read_costs(costs, "HVDC overhead", "lifetime"), "dc_cable": read_costs(costs, "HVDC overhead", "lifetime"), "dc_inverter": read_costs(costs, "HVDC inverter pair", "lifetime"), "transformer_380_110": read_costs( costs, "HVAC overhead", "lifetime" ), "transformer_380_220": read_costs( costs, "HVAC overhead", "lifetime" ), "transformer_220_110": read_costs( costs, "HVAC overhead", "lifetime" ), "battery inverter": read_costs( costs, "battery inverter", "lifetime" ), "battery storage": read_costs( costs, "battery storage", "lifetime" ), } # Insert annualized capital costs # lines in EUR/km/MW/a # transfermer, inverter, battery in EUR/MW/a parameters["capital_cost"] = {} for comp in parameters["overnight_cost"].keys(): parameters["capital_cost"][comp] = annualize_capital_costs( parameters["overnight_cost"][comp], parameters["lifetime"][comp], global_settings("eGon2035")["interest_rate"], ) parameters["capital_cost"]["battery"] = ( parameters["capital_cost"]["battery inverter"] + parameters["efficiency"]["battery"]["max_hours"] * parameters["capital_cost"]["battery storage"] ) # Insert marginal_costs in EUR/MWh # marginal cost can include fuel, C02 and operation and maintenance costs parameters["marginal_cost"] = { "wind_offshore": read_costs(costs, "offwind", "VOM"), "wind_onshore": read_costs(costs, "onwind", "VOM"), "solar": read_costs(costs, "solar", "VOM"), } parameters["annual_demand"] = { "households": 90.4 * 1e6, # MWh source: NEP 2023, scenario B 2045 "CTS": 146.7 * 1e6, # MWh source: reduce overall demand from # demandregio (without traffic) # by share of heat according to JRC IDEES "industry": 382.9 * 1e6, # MWh source: data from demandregio } elif scenario == "eGon2021": parameters = {} elif (scenario == "status2019") or (scenario == "status2023"): costs = read_csv(2020) parameters = {"grid_topology": "Status Quo"} # Insert effciencies in p.u. parameters["efficiency"] = { "oil": read_costs(costs, "oil", "efficiency"), "battery": { "store": read_costs(costs, "battery inverter", "efficiency") ** 0.5, "dispatch": read_costs(costs, "battery inverter", "efficiency") ** 0.5, "standing_loss": 0, "max_hours": 6, "cyclic_state_of_charge": True, }, "pumped_hydro": { "store": read_costs(costs, "PHS", "efficiency") ** 0.5, "dispatch": read_costs(costs, "PHS", "efficiency") ** 0.5, "standing_loss": 0, "max_hours": 6, "cyclic_state_of_charge": True, }, } # Warning: Electrical parameters are set in osmTGmod, editing these values will not change the data! parameters["electrical_parameters"] = { "ac_line_110kV": { "s_nom": 260, # [MVA] "R": 0.109, # [Ohm/km] "L": 1.2, # [mH/km] }, "ac_cable_110kV": { "s_nom": 280, # [MVA] "R": 0.0177, # [Ohm/km] "L": 0.3, # [mH/km] }, "ac_line_220kV": { "s_nom": 520, # [MVA] "R": 0.109, # [Ohm/km] "L": 1.0, # [mH/km] }, "ac_cable_220kV": { "s_nom": 550, # [MVA] "R": 0.0176, # [Ohm/km] "L": 0.3, # [mH/km] }, "ac_line_380kV": { "s_nom": 1790, # [MVA] "R": 0.028, # [Ohm/km] "L": 0.8, # [mH/km] }, "ac_cable_380kV": { "s_nom": 925, # [MVA] "R": 0.0175, # [Ohm/km] "L": 0.3, # [mH/km] }, } # Insert overnight investment costs # Source for eHV grid costs: Netzentwicklungsplan Strom 2035, Version 2021, 2. Entwurf # Source for HV lines and cables: Dena Verteilnetzstudie 2021, p. 146 parameters["overnight_cost"] = { "ac_ehv_overhead_line": 2.5e6 / ( 2 * parameters["electrical_parameters"]["ac_line_380kV"]["s_nom"] ), # [EUR/km/MW] "ac_ehv_cable": 11.5e6 / ( 2 * parameters["electrical_parameters"]["ac_cable_380kV"][ "s_nom" ] ), # [EUR/km/MW] "ac_hv_overhead_line": 0.06e6 / parameters["electrical_parameters"]["ac_line_110kV"][ "s_nom" ], # [EUR/km/MW] "ac_hv_cable": 0.8e6 / parameters["electrical_parameters"]["ac_cable_110kV"][ "s_nom" ], # [EUR/km/MW] "dc_overhead_line": 0.5e3, # [EUR/km/MW] "dc_cable": 3.25e3, # [EUR/km/MW] "dc_inverter": 0.3e6, # [EUR/MW] "transformer_380_110": 17.33e3, # [EUR/MVA] "transformer_380_220": 13.33e3, # [EUR/MVA] "transformer_220_110": 17.5e3, # [EUR/MVA] "battery inverter": read_costs( costs, "battery inverter", "investment" ), "battery storage": read_costs( costs, "battery storage", "investment" ), } parameters["lifetime"] = { "ac_ehv_overhead_line": read_costs( costs, "HVAC overhead", "lifetime" ), "ac_ehv_cable": read_costs(costs, "HVAC overhead", "lifetime"), "ac_hv_overhead_line": read_costs( costs, "HVAC overhead", "lifetime" ), "ac_hv_cable": read_costs(costs, "HVAC overhead", "lifetime"), "dc_overhead_line": read_costs(costs, "HVDC overhead", "lifetime"), "dc_cable": read_costs(costs, "HVDC overhead", "lifetime"), "dc_inverter": read_costs(costs, "HVDC inverter pair", "lifetime"), "transformer_380_110": read_costs( costs, "HVAC overhead", "lifetime" ), "transformer_380_220": read_costs( costs, "HVAC overhead", "lifetime" ), "transformer_220_110": read_costs( costs, "HVAC overhead", "lifetime" ), "battery inverter": read_costs( costs, "battery inverter", "lifetime" ), "battery storage": read_costs( costs, "battery storage", "lifetime" ), } # Insert annualized capital costs # lines in EUR/km/MW/a # transfermer, inverter, battery in EUR/MW/a parameters["capital_cost"] = {} for comp in parameters["overnight_cost"].keys(): parameters["capital_cost"][comp] = annualize_capital_costs( parameters["overnight_cost"][comp], parameters["lifetime"][comp], global_settings("status2019")["interest_rate"], ) parameters["capital_cost"]["battery"] = ( parameters["capital_cost"]["battery inverter"] + parameters["efficiency"]["battery"]["max_hours"] * parameters["capital_cost"]["battery storage"] ) parameters["marginal_cost"] = { "oil": global_settings(scenario)["fuel_costs"]["oil"] / read_costs(costs, "oil", "efficiency") + read_costs(costs, "oil", "VOM") + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["oil"] / read_costs(costs, "oil", "efficiency"), "other_non_renewable": global_settings(scenario)["fuel_costs"][ "gas" ] / read_costs(costs, "OCGT", "efficiency") + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["other_non_renewable"] / read_costs(costs, "OCGT", "efficiency"), "lignite": global_settings(scenario)["fuel_costs"]["lignite"] / read_costs(costs, "lignite", "efficiency") + read_costs(costs, "lignite", "VOM") + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["lignite"] / read_costs(costs, "lignite", "efficiency"), "coal": global_settings(scenario)["fuel_costs"]["coal"] / read_costs(costs, "coal", "efficiency") + read_costs(costs, "coal", "VOM") + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["coal"] / read_costs(costs, "coal", "efficiency"), "OCGT": global_settings(scenario)["fuel_costs"]["gas"] / read_costs(costs, "OCGT", "efficiency") + read_costs(costs, "OCGT", "VOM") + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["gas"] / read_costs(costs, "OCGT", "efficiency"), "nuclear": global_settings(scenario)["fuel_costs"]["nuclear"] / read_costs(costs, "nuclear", "efficiency") + read_costs(costs, "nuclear", "VOM"), "biomass": global_settings(scenario)["fuel_costs"]["biomass"] / read_costs(costs, "biomass CHP", "efficiency") + read_costs(costs, "biomass CHP", "VOM"), "wind_offshore": read_costs(costs, "offwind", "VOM"), "wind_onshore": read_costs(costs, "onwind", "VOM"), "solar": read_costs(costs, "solar", "VOM"), } if scenario == "status2023": parameters["annual_demand"] = { "households": 130.48 * 1e6, # MWh, source: BDEW 2023 "CTS": 121.16 * 1e6, # MWh "industry": 200.38 * 1e6, # MWh } else: print(f"Scenario name {scenario} is not valid.") return parameters
[docs] def gas(scenario): """Returns paramaters of the gas sector for the selected scenario. Parameters ---------- scenario : str Name of the scenario. Returns ------- parameters : dict List of parameters of gas sector """ if scenario == "eGon2035": costs = read_csv(2035) parameters = { "main_gas_carrier": "CH4", "H2_feedin_volumetric_fraction": 0.15, } # Insert effciencies in p.u. parameters["efficiency"] = { "power_to_H2": 0.6805, # source: project internal assumption Fraunhofer ISE "H2_to_power": read_costs(costs, "fuel cell", "efficiency"), "CH4_to_H2": read_costs(costs, "SMR", "efficiency"), "H2_feedin": 1, "H2_to_CH4": read_costs(costs, "methanation", "efficiency"), "OCGT": read_costs(costs, "OCGT", "efficiency"), "power_to_Heat": 0.2, # overall efficiency (20% electrical Input converted into waste-heat); source: project internal assumption Fraunhofer ISE "power_to_O2": 0.04, # O2-transfer efficiency; source: Sayed Sadat, Modeling Regional Utilization of the electrolysers Co-Products Oxygen and Heat in Germany, 2024 } # Insert overnight investment costs parameters["overnight_cost"] = { "power_to_H2_system": 452_000, # [EUR/MW] source: project internal assumption Fraunhofer ISE "power_to_H2_stack": 0.21 * 452_000, # [EUR/MW] source: project internal assumption Fraunhofer ISE "power_to_H2_OPEX": 0.03 * 452_000, # [EUR/MW/a] 3% of CAPEX, source: project internal assumption Fraunhofer ISE "H2_to_power": read_costs(costs, "fuel cell", "investment"), "CH4_to_H2": read_costs(costs, "SMR", "investment"), "H2_to_CH4": read_costs(costs, "methanation", "investment"), "H2_feedin": 0, "H2_underground": read_costs( costs, "hydrogen storage underground", "investment" ), "H2_overground": read_costs( costs, "hydrogen storage tank incl. compressor", "investment" ), "H2_pipeline": read_costs( costs, "H2 (g) pipeline", "investment" ), # [EUR/MW/km] "Heat_exchanger": 25_000, # [EUR/MW_th] cost assumption for one additional heat_exchanger; source: project internal cost assumption by Fraunhofer ISE "Heat_pipeline": 400_000, # [EUR/MW/km]; average value for DN100-pipeline; source: L. Zimmermann, MODELLIERUNG DER ABWÄRMENUTZUNG VON ELEKTROLYSEUREN IN DEUTSCHLAND FÜR EINE TECHNO - ÖKONOMISCHE OPTIMIERUNG EINES SEKTOR - GEKOPPELTEN ENERGIESYSTEM, 2024 "O2_components": 5000, # [EUR] ; source: Sayed Sadat, Modeling Regional Utilization of the electrolysers Co-Products Oxygen and Heat in Germany, 2024 } # overnight_costs for O2_pipeinecosts related to pipeline_diameter parameters["O2_pipeline_costs"] = { 0.5: 500_000, # EUR/km 0.4: 450_000, # EUR/km 0.3: 400_000, # EUR/km 0.2: 350_000, # EUR/km 0.0: 300_000, # EUR/km (costs for any other pipeline diameter) } # Insert lifetime parameters["lifetime"] = { "power_to_H2_system": 25, # source: project internal assumption Fraunhofer ISE "power_to_H2_stack": 15, # 85000 hours ~ 15 years; source: project internal assumption Fraunhofer ISE "power_to_H2_OPEX": 1, # given as OPEX/year "H2_to_power": read_costs(costs, "fuel cell", "lifetime"), "CH4_to_H2": read_costs(costs, "SMR", "lifetime"), "H2_to_CH4": read_costs(costs, "methanation", "lifetime"), "H2_feedin": read_costs(costs, "CH4 (g) pipeline", "lifetime"), "H2_underground": read_costs( costs, "hydrogen storage underground", "lifetime" ), "H2_overground": read_costs( costs, "hydrogen storage tank incl. compressor", "lifetime" ), "H2_pipeline": read_costs(costs, "H2 (g) pipeline", "lifetime"), "Heat_exchanger": 20, # assumption based on lifetime heat_exchanger; source: E. van der Roest, R. Bol, T. Fens und A. van Wijk, „Utilisation of waste heat from PEM electrolysers - Unlocking local optimisation, 2023 "Heat_pipeline": 20, "O2_components": 25, # source: Sayed Sadat, Modeling Regional Utilization of the electrolysers Co-Products Oxygen and Heat in Germany, 2024 } # Insert annualized capital costs parameters["capital_cost"] = {} parameters["O2_capital_cost"] = {} for comp in parameters["overnight_cost"].keys(): parameters["capital_cost"][comp] = annualize_capital_costs( parameters["overnight_cost"][comp], parameters["lifetime"][comp], global_settings("eGon2035")["interest_rate"], ) for diameter in parameters["O2_pipeline_costs"].keys(): parameters["O2_capital_cost"][diameter] = annualize_capital_costs( parameters["O2_pipeline_costs"][diameter], parameters["lifetime"]["O2_components"], global_settings("eGon2035")["interest_rate"], ) parameters["marginal_cost"] = { "CH4": global_settings(scenario)["fuel_costs"]["gas"] + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["gas"], "OCGT": read_costs(costs, "OCGT", "VOM"), "biogas": global_settings(scenario)["fuel_costs"]["gas"], "chp_gas": read_costs(costs, "central gas CHP", "VOM"), } # Insert max gas production (generator) over the year parameters["max_gas_generation_overtheyear"] = { "CH4": 36000000, # [MWh] Netzentwicklungsplan Gas 2020–2030 "biogas": 10000000, # [MWh] Netzentwicklungsplan Gas 2020–2030 } elif scenario == "eGon100RE": costs = read_csv(2050) interest_rate = 0.07 # [p.u.] parameters = { "main_gas_carrier": "H2", "retrofitted_CH4pipeline-to-H2pipeline_share": 0.23, # p-e-s result, this value is overwritten if p-e-s is run } # Insert effciencies in p.u. parameters["efficiency"] = { "power_to_H2": 0.709, "H2_to_power": read_costs(costs, "fuel cell", "efficiency"), "CH4_to_H2": read_costs(costs, "SMR", "efficiency"), "H2_to_CH4": read_costs(costs, "methanation", "efficiency"), "OCGT": read_costs(costs, "OCGT", "efficiency"), "power_to_Heat": 0.2, # source: project internal assumption Fraunhofer ISE "power_to_O2": 0.015, # source: Sayed Sadat, Modeling Regional Utilization of the electrolysers Co-Products Oxygen and Heat in Germany, 2024 } # Insert FOM in % parameters["FOM"] = { "H2_underground": read_costs( costs, "hydrogen storage underground", "FOM" ), "H2_overground": read_costs( costs, "hydrogen storage tank incl. compressor", "FOM" ), "power_to_H2_system": 3, # 3% of CAPEX, source: project internal assumption Fraunhofer ISE "power_to_H2_stack": 3, # 3% of CAPEX source: project internal assumption Fraunhofer ISE "H2_to_power": read_costs(costs, "fuel cell", "FOM"), "CH4_to_H2": read_costs(costs, "SMR", "FOM"), "H2_to_CH4": read_costs(costs, "methanation", "FOM"), "H2_pipeline": 3, # 3% of CAPEX "Heat_exchanger": 3, # 3% of CAPEX "Heat_pipeline": 3, # 3% of CAPEX "O2_components": 3, # 3% of CAPEX "H2_pipeline_retrofit": read_costs( costs, "H2 (g) pipeline repurposed", "FOM" ), } # Insert overnight investment costs parameters["overnight_cost"] = { "power_to_H2_system": 357_000, # [EUR/MW] source: project internal assumption Fraunhofer ISE "power_to_H2_stack": 0.21 * 357_000, # [EUR/MW] source: project internal assumption Fraunhofer ISE "H2_to_power": read_costs(costs, "fuel cell", "investment"), "CH4_to_H2": read_costs(costs, "SMR", "investment"), "H2_to_CH4": read_costs(costs, "methanation", "investment"), "H2_underground": read_costs( costs, "hydrogen storage underground", "investment" ), "H2_overground": read_costs( costs, "hydrogen storage tank incl. compressor", "investment" ), "H2_pipeline": read_costs( costs, "H2 (g) pipeline", "investment" ), # [EUR/MW/km] "H2_pipeline_retrofit": read_costs( costs, "H2 (g) pipeline repurposed", "FOM" ), "Heat_exchanger": 25_000, # [EUR/MW_th] cost assumption for one additional heat_exchanger; source: project internal cost assumption by Fraunhofer ISE "Heat_pipeline": 400_000, # [EUR/MW/km]; average value for DN100-pipeline; source: L. Zimmermann, MODELLIERUNG DER ABWÄRMENUTZUNG VON ELEKTROLYSEUREN IN DEUTSCHLAND FÜR EINE TECHNO - ÖKONOMISCHE OPTIMIERUNG EINES SEKTOR - GEKOPPELTEN ENERGIESYSTEM, 2024 "O2_components": 5000, # [EUR] ; source toDO: ask sayed } # overnight_costs for O2_pipeinecosts related to pipeline_diameter parameters["O2_pipeline_costs"] = { 0.5: 500_000, # EUR/km 0.4: 450_000, # EUR/km 0.3: 400_000, # EUR/km 0.2: 350_000, # EUR/km 0: 300_000, # EUR/km (costs for any other pipeline diameter) } # Insert lifetime parameters["lifetime"] = { "power_to_H2_system": 30, # source: project internal assumption Fraunhofer ISE "power_to_H2_stack": 20, # 110_000 hours ~ 20 years; source: project internal assumption Fraunhofer ISE "H2_to_power": read_costs(costs, "fuel cell", "lifetime"), "CH4_to_H2": read_costs(costs, "SMR", "lifetime"), "H2_to_CH4": read_costs(costs, "methanation", "lifetime"), "H2_feedin": read_costs(costs, "CH4 (g) pipeline", "lifetime"), "H2_underground": read_costs( costs, "hydrogen storage underground", "lifetime" ), "H2_overground": read_costs( costs, "hydrogen storage tank incl. compressor", "lifetime" ), "H2_pipeline": read_costs(costs, "H2 (g) pipeline", "lifetime"), "H2_pipeline_retrofit": read_costs( costs, "H2 (g) pipeline repurposed", "lifetime" ), "Heat_exchanger": 20, # assumption based on lifetime heat_exchanger; source: E. van der Roest, R. Bol, T. Fens und A. van Wijk, „Utilisation of waste heat from PEM electrolysers - Unlocking local optimisation, 2023 "Heat_pipeline": 20, "O2_components": 25, # source toDO: ask sayed } # Insert costs parameters["capital_cost"] = {} parameters["O2_capital_cost"] = {} for comp in parameters["overnight_cost"].keys(): parameters["capital_cost"][comp] = annualize_capital_costs( parameters["overnight_cost"][comp], parameters["lifetime"][comp], interest_rate, ) + parameters["overnight_cost"][comp] * ( parameters["FOM"][comp] / 100 ) for comp in ["H2_to_power", "H2_to_CH4"]: parameters["capital_cost"][comp] = ( annualize_capital_costs( parameters["overnight_cost"][comp], parameters["lifetime"][comp], interest_rate, ) + parameters["overnight_cost"][comp] * (parameters["FOM"][comp] / 100) ) * parameters["efficiency"][comp] for diameter in parameters["O2_pipeline_costs"].keys(): parameters["O2_capital_cost"][diameter] = annualize_capital_costs( parameters["O2_pipeline_costs"][diameter], parameters["lifetime"]["O2_components"], interest_rate, ) parameters["marginal_cost"] = { "OCGT": read_costs(costs, "OCGT", "VOM"), "biogas": read_costs(costs, "biogas", "fuel"), "chp_gas": read_costs(costs, "central gas CHP", "VOM"), } elif scenario == "eGon2021": parameters = {} elif scenario == "status2019": costs = read_csv(2020) parameters = { "main_gas_carrier": "CH4", } parameters["marginal_cost"] = { "CH4": global_settings(scenario)["fuel_costs"]["gas"] + global_settings(scenario)["co2_costs"] * global_settings(scenario)["co2_emissions"]["gas"], "OCGT": read_costs(costs, "OCGT", "VOM"), "biogas": global_settings(scenario)["fuel_costs"]["gas"], "chp_gas": read_costs(costs, "central gas CHP", "VOM"), } # Insert effciencies in p.u. parameters["efficiency"] = { "OCGT": read_costs(costs, "OCGT", "efficiency"), } else: print(f"Scenario name {scenario} is not valid.") return parameters
[docs] def mobility(scenario): """Returns parameters of the mobility sector for the selected scenario. Parameters ---------- scenario : str Name of the scenario. Returns ------- parameters : dict List of parameters of mobility sector Notes ----- For a detailed description of the parameters see module :mod:`egon.data.datasets.emobility.motorized_individual_travel`. """ if scenario == "eGon2035": parameters = { "motorized_individual_travel": { "NEP C 2035": { "ev_count": 15100000, "bev_mini_share": 0.1589, "bev_medium_share": 0.3533, "bev_luxury_share": 0.1053, "phev_mini_share": 0.0984, "phev_medium_share": 0.2189, "phev_luxury_share": 0.0652, "model_parameters": {}, } } } elif scenario == "eGon100RE": # eGon100RE has 3 Scenario variations # * allocation will always be done for all scenarios # * model data will be written to tables `egon_etrago_*` only # for the variation as speciefied in `datasets.yml` parameters = { "motorized_individual_travel": { "Reference 2050": { "ev_count": 25065000, "bev_mini_share": 0.1589, "bev_medium_share": 0.3533, "bev_luxury_share": 0.1053, "phev_mini_share": 0.0984, "phev_medium_share": 0.2189, "phev_luxury_share": 0.0652, "model_parameters": {}, }, "Mobility Transition 2050": { "ev_count": 37745000, "bev_mini_share": 0.1589, "bev_medium_share": 0.3533, "bev_luxury_share": 0.1053, "phev_mini_share": 0.0984, "phev_medium_share": 0.2189, "phev_luxury_share": 0.0652, "model_parameters": {}, }, "Electrification 2050": { "ev_count": 47700000, "bev_mini_share": 0.1589, "bev_medium_share": 0.3533, "bev_luxury_share": 0.1053, "phev_mini_share": 0.0984, "phev_medium_share": 0.2189, "phev_luxury_share": 0.0652, "model_parameters": {}, }, } } elif scenario == "eGon2021": parameters = {} elif scenario == "status2019": parameters = { "motorized_individual_travel": { "status2019": { "ev_count": 200000, "bev_mini_share": 0.1589, "bev_medium_share": 0.3533, "bev_luxury_share": 0.1053, "phev_mini_share": 0.0984, "phev_medium_share": 0.2189, "phev_luxury_share": 0.0652, "model_parameters": {}, } } } elif scenario == "status2023": parameters = { "motorized_individual_travel": { "status2023": { "ev_count": 2577664, "bev_mini_share": 0.1535, "bev_medium_share": 0.3412, "bev_luxury_share": 0.1017, "phev_mini_share": 0.1038, "phev_medium_share": 0.2310, "phev_luxury_share": 0.0688, "model_parameters": {}, } } } else: print(f"Scenario name {scenario} is not valid.") parameters = dict() return parameters
[docs] def heat(scenario): """Returns paramaters of the heat sector for the selected scenario. Parameters ---------- scenario : str Name of the scenario. Returns ------- parameters : dict List of parameters of heat sector """ if scenario == "eGon2035": costs = read_csv(2035) parameters = { "DE_demand_reduction_residential": 0.854314018923104, "DE_demand_reduction_service": 0.498286864771128, "DE_district_heating_share": 0.14, } # Insert efficiency in p.u. parameters["efficiency"] = { "water_tank_charger": read_costs( costs, "water tank charger", "efficiency" ), "water_tank_discharger": read_costs( costs, "water tank discharger", "efficiency" ), "central_resistive_heater": read_costs( costs, "central resistive heater", "efficiency" ), "central_gas_boiler": read_costs( costs, "central gas boiler", "efficiency" ), "rural_resistive_heater": read_costs( costs, "decentral resistive heater", "efficiency" ), "rural_gas_boiler": read_costs( costs, "decentral gas boiler", "efficiency" ), } # Insert overnight investment costs, in EUR/MWh parameters["overnight_cost"] = { "central_water_tank": read_costs( costs, "central water tank storage", "investment" ), "rural_water_tank": read_costs( costs, "decentral water tank storage", "investment" ), } # Insert lifetime parameters["lifetime"] = { "central_water_tank": read_costs( costs, "central water tank storage", "lifetime" ), "rural_water_tank": read_costs( costs, "decentral water tank storage", "lifetime" ), } # Insert annualized capital costs parameters["capital_cost"] = {} for comp in parameters["overnight_cost"].keys(): parameters["capital_cost"][comp] = annualize_capital_costs( parameters["overnight_cost"][comp], parameters["lifetime"][comp], global_settings("eGon2035")["interest_rate"], ) # Insert marginal_costs in EUR/MWh # marginal cost can include fuel, C02 and operation and maintenance costs parameters["marginal_cost"] = { "central_heat_pump": read_costs( costs, "central air-sourced heat pump", "VOM" ), "central_gas_chp": read_costs(costs, "central gas CHP", "VOM"), "central_gas_boiler": read_costs( costs, "central gas boiler", "VOM" ), "central_resistive_heater": read_costs( costs, "central resistive heater", "VOM" ), "geo_thermal": 2.9, # Danish Energy Agency "water_tank_charger": 0, # Danish Energy Agency "water_tank_discharger": 0, # Danish Energy Agency "rural_heat_pump": 0, # Danish Energy Agency, Technology Data for Individual Heating Plants } elif scenario == "eGon100RE": costs = read_csv(2050) parameters = { "DE_demand_residential_MWh": 536692489.8152325 * 0.71542, # [MWh], source: pypsa-eur run from 2024/12/23: # total heat demand muliplied by residential share from resources/pop_weighted_heat_totals "DE_demand_service_MWh": 536692489.8152325 * (1 - 0.71542), # [MWh], source: pypsa-eur run from 2024/12/23: # total heat demand muliplied by service share from resources/pop_weighted_heat_totals "DE_district_heating_share": 0.42311285313808533, # [%], source: pypsa-eur run from 2024/12/23 } parameters["marginal_cost"] = { "central_heat_pump": read_costs( costs, "central air-sourced heat pump", "VOM" ), "central_gas_chp": read_costs(costs, "central gas CHP", "VOM"), "central_gas_boiler": read_costs( costs, "central gas boiler", "VOM" ), "central_resistive_heater": read_costs( costs, "central resistive heater", "VOM" ), "geo_thermal": 2.7, # Danish Energy Agency "water_tank_charger": 0, # Danish Energy Agency "water_tank_discharger": 0, # Danish Energy Agency "rural_heat_pump": 0, # Danish Energy Agency, Technology Data for Individual Heating Plants } # Insert efficiency in p.u. parameters["efficiency"] = { "water_tank_charger": read_costs( costs, "water tank charger", "efficiency" ), "water_tank_discharger": read_costs( costs, "water tank discharger", "efficiency" ), "central_resistive_heater": read_costs( costs, "central resistive heater", "efficiency" ), "central_gas_boiler": read_costs( costs, "central gas boiler", "efficiency" ), "rural_resistive_heater": read_costs( costs, "decentral resistive heater", "efficiency" ), "rural_gas_boiler": read_costs( costs, "decentral gas boiler", "efficiency" ), } # Insert overnight investment costs, in EUR/MWh parameters["overnight_cost"] = { "central_water_tank": read_costs( costs, "central water tank storage", "investment" ), "rural_water_tank": read_costs( costs, "decentral water tank storage", "investment" ), } # Insert lifetime parameters["lifetime"] = { "central_water_tank": read_costs( costs, "central water tank storage", "lifetime" ), "rural_water_tank": read_costs( costs, "decentral water tank storage", "lifetime" ), } # Insert annualized capital costs parameters["capital_cost"] = {} for comp in parameters["overnight_cost"].keys(): parameters["capital_cost"][comp] = annualize_capital_costs( parameters["overnight_cost"][comp], parameters["lifetime"][comp], global_settings("eGon100RE")["interest_rate"], ) elif scenario == "eGon2021": parameters = {} elif scenario == "status2019": parameters = { "DE_demand_residential_TJ": 1658400 + 383300, # [TJ], space heating + hot water, source: AG Energiebilanzen 2019 (https://ag-energiebilanzen.de/wp-content/uploads/2020/10/ageb_20v_v1.pdf) "DE_demand_service_TJ": 567300 + 71500, # [TJ], space heating + hot water, source: AG Energiebilanzen 2019 (https://ag-energiebilanzen.de/wp-content/uploads/2020/10/ageb_20v_v1.pdf) "DE_district_heating_share": (189760 + 38248) / ( 1658400 + 383300 + 567300 + 71500 ), # [TJ], source: AG Energiebilanzen 2019 (https://ag-energiebilanzen.de/wp-content/uploads/2021/11/bilanz19d.xlsx) } costs = read_csv(2020) # Insert marginal_costs in EUR/MWh # marginal cost can include fuel, C02 and operation and maintenance costs parameters["marginal_cost"] = { "central_heat_pump": read_costs( costs, "central air-sourced heat pump", "VOM" ), "central_gas_chp": read_costs(costs, "central gas CHP", "VOM"), "central_gas_boiler": read_costs( costs, "central gas boiler", "VOM" ), "central_resistive_heater": read_costs( costs, "central resistive heater", "VOM" ), "rural_heat_pump": 0, # Danish Energy Agency, Technology Data for Individual Heating Plants } # Insert efficiency in p.u. parameters["efficiency"] = { "central_gas_boiler": read_costs( costs, "central gas boiler", "efficiency" ), } # elif scenario == "status2023": # parameters = { # # source: AG Energiebilanzen 2022 https://ag-energiebilanzen.de/wp-content/uploads/2023/01/AGEB_22p2_rev-1.pdf # "DE_demand_residential_TJ": 1754.2 * 1e3 # + 407.5 * 1e3, # [TJ], Endenergieverbrauch Haushalte 2.1 Raumwärme + Warmwasser # "DE_demand_service_TJ": 668.4 * 1e3 # + 44.3 * 1e3 , # [TJ], Endenergieverbrauch GHD 3.1 Raumwärme + Warmwasser # "DE_district_heating_share": (189760 + 38248) # / ( # 1658400 + 383300 + 567300 + 71500 # ), # [TJ], source: AG Energiebilanzen 2019 (https://ag-energiebilanzen.de/wp-content/uploads/2021/11/bilanz19d.xlsx) # } # TODO status2023 needs update # # costs = read_csv(2020) # # # Insert marginal_costs in EUR/MWh # # marginal cost can include fuel, C02 and operation and maintenance costs # parameters["marginal_cost"] = { # "central_heat_pump": read_costs( # costs, "central air-sourced heat pump", "VOM" # ), # "central_gas_chp": read_costs(costs, "central gas CHP", "VOM"), # "central_gas_boiler": read_costs( # costs, "central gas boiler", "VOM" # ), # "central_resistive_heater": read_costs( # costs, "central resistive heater", "VOM" # ), # "rural_heat_pump": 0, # Danish Energy Agency, Technology Data for Individual Heating Plants # } # # # Insert efficiency in p.u. # parameters["efficiency"] = { # "central_gas_boiler": read_costs( # costs, "central gas boiler", "efficiency" # ), # } else: print(f"Scenario name {scenario} is not valid.") return parameters