diff --git a/config.yaml b/config.yaml index 901827e6..b1ec66e8 100644 --- a/config.yaml +++ b/config.yaml @@ -72,6 +72,7 @@ sector: 'tes' : True 'tes_tau' : 3. 'boilers' : True + 'oil_boilers': True 'chp' : True 'solar_thermal' : True 'solar_cf_correction': 0.788457 # = >>> 1/1.2683 diff --git a/data/costs.csv b/data/costs.csv index 7779533b..74976a9c 100644 --- a/data/costs.csv +++ b/data/costs.csv @@ -239,3 +239,7 @@ HVDC submarine,2030,FOM,2,%/year,Hagspiel HVDC inverter pair,2030,investment,150000,EUR/MW,Hagspiel HVDC inverter pair,2030,lifetime,40,years,Hagspiel HVDC inverter pair,2030,FOM,2,%/year,Hagspiel +decentral oil boiler,2030,investment,156.0140915953699,EUR/kWth,Palzer thesis (https://energiesysteme-zukunft.de/fileadmin/user_upload/Publikationen/PDFs/ESYS_Materialien_Optimierungsmodell_REMod-D.pdf) (+eigene Berechnung) +decentral oil boiler,2030,lifetime,20.0,years,Palzer thesis (https://energiesysteme-zukunft.de/fileadmin/user_upload/Publikationen/PDFs/ESYS_Materialien_Optimierungsmodell_REMod-D.pdf) +decentral oil boiler,2030,FOM,2.0,%/year,Palzer thesis (https://energiesysteme-zukunft.de/fileadmin/user_upload/Publikationen/PDFs/ESYS_Materialien_Optimierungsmodell_REMod-D.pdf) +decentral oil boiler,2030,efficiency,0.9,per unit,Palzer thesis (https://energiesysteme-zukunft.de/fileadmin/user_upload/Publikationen/PDFs/ESYS_Materialien_Optimierungsmodell_REMod-D.pdf) diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 4315b380..ae817c3a 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -757,25 +757,9 @@ def add_heat(network): print("adding heat") - sectors = ["residential","services"] + sectors = ["residential", "services"] - #stores the different groups of nodes - nodes = {} - - #rural are areas with low heating density and individual heating - #urban are areas with high heating density - #urban can be split into district heating (central) and individual heating (decentral) - for sector in sectors: - nodes[sector + " rural"] = pop_layout.index - - if options["central"]: - urban_decentral_ct = pd.Index(["ES","GR","PT","IT","BG"]) - nodes[sector + " urban decentral"] = pop_layout.index[pop_layout.ct.isin(urban_decentral_ct)] - else: - nodes[sector + " urban decentral"] = pop_layout.index - - #for central nodes, residential and services are aggregated - nodes["urban central"] = pop_layout.index ^ nodes["residential urban decentral"] + nodes = create_nodes_for_heat_sector() #NB: must add costs of central heating afterwards (EUR 400 / kWpeak, 50a, 1% FOM from Fraunhofer ISE) @@ -1043,6 +1027,24 @@ def add_heat(network): capital_cost=options['retrofitting-cost_factor']*costs.at['retrofitting II','fixed']*square_metres/(options['retroII-fraction']*space_peak)) +def create_nodes_for_heat_sector(): + sectors = ["residential", "services"] + # stores the different groups of nodes + nodes = {} + # rural are areas with low heating density and individual heating + # urban are areas with high heating density + # urban can be split into district heating (central) and individual heating (decentral) + for sector in sectors: + nodes[sector + " rural"] = pop_layout.index + + if options["central"]: + urban_decentral_ct = pd.Index(["ES", "GR", "PT", "IT", "BG"]) + nodes[sector + " urban decentral"] = pop_layout.index[pop_layout.ct.isin(urban_decentral_ct)] + else: + nodes[sector + " urban decentral"] = pop_layout.index + # for central nodes, residential and services are aggregated + nodes["urban central"] = pop_layout.index ^ nodes["residential urban decentral"] + return nodes def add_biomass(network): @@ -1268,6 +1270,23 @@ def add_industry(network): capital_cost=0., marginal_cost=costs.at["oil",'fuel']) + if options["oil_boilers"]: + + nodes_heat = create_nodes_for_heat_sector() + + for name in ["residential rural", "services rural", "residential urban decentral", "services urban decentral"]: + network.madd("Link", + nodes_heat[name] + " " + name + " oil boiler", + p_nom_extendable=True, + bus0=["Fischer-Tropsch"] * len(nodes_heat[name]), + bus1=nodes_heat[name] + " " + name + " heat", + bus2="co2 atmosphere", + carrier=name + " oil boiler", + 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']) + network.madd("Link", nodes + " Fischer-Tropsch", bus0=nodes + " H2",