From 2055fe68efaaa73b560bd2059db36c48ede40179 Mon Sep 17 00:00:00 2001 From: Tom Brown Date: Fri, 1 Mar 2024 18:39:15 +0100 Subject: [PATCH] add extra bus for HVC, which can either go to air or waste CHP Here we explicitly add the option to generate energy and/or capture the CO2 from HVC (i.e. plastics). NB: Since waste CHP is expensive, it's not built. --- config/config.default.yaml | 4 ++ scripts/prepare_sector_network.py | 96 +++++++++++++++++++++++++++---- 2 files changed, 88 insertions(+), 12 deletions(-) diff --git a/config/config.default.yaml b/config/config.default.yaml index d4a8d21d..05ffb75c 100644 --- a/config/config.default.yaml +++ b/config/config.default.yaml @@ -668,6 +668,7 @@ industry: 2045: 0.16 2050: 0.20 HVC_environment_sequestration_fraction: 0. + waste_to_energy: false sector_ratios_fraction_future: 2020: 0.0 2025: 0.1 @@ -1152,3 +1153,6 @@ plotting: DC-DC: "#8a1caf" DC link: "#8a1caf" load: "#dd2e23" + waste CHP: '#e3d37d' + waste CHP CC: '#e3d3ff' + HVC to air: 'k' diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index f88ab94a..54057b71 100755 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -2905,18 +2905,90 @@ def add_industry(n, costs): investment_year, ) - n.madd( - "Link", - spatial.oil.naphtha, - bus0=spatial.oil.nodes, - bus1=spatial.oil.naphtha, - bus2="co2 atmosphere", - bus3=spatial.co2.process_emissions, - carrier="naphtha for industry", - p_nom_extendable=True, - efficiency2=emitted_co2_per_naphtha * non_sequestered, - efficiency3=process_co2_per_naphtha, - ) + if snakemake.config["industry"]["waste_to_energy"] and options["regional_oil_demand"]: + + n.madd( + "Bus", + spatial.oil.demand_locations + " non-sequestered HVC", + location=spatial.oil.demand_locations, + carrier="non-sequestered HVC", + unit="MWh_LHV", + ) + + n.madd( + "Link", + spatial.oil.naphtha, + bus0=spatial.oil.nodes, + bus1=spatial.oil.naphtha, + bus2=spatial.oil.demand_locations + " non-sequestered HVC", + bus3=spatial.co2.process_emissions, + carrier="naphtha for industry", + p_nom_extendable=True, + efficiency2=non_sequestered*emitted_co2_per_naphtha/costs.at["oil", "CO2 intensity"], + efficiency3=process_co2_per_naphtha, + ) + + n.madd( + "Link", + spatial.oil.demand_locations + " HVC to air", + bus0=spatial.oil.demand_locations + " non-sequestered HVC", + bus1="co2 atmosphere", + carrier="HVC to air", + p_nom_extendable=True, + efficiency=costs.at["oil", "CO2 intensity"], + ) + + #TODO add heat + n.madd( + "Link", + spatial.oil.demand_locations + " waste CHP", + bus0=spatial.oil.demand_locations + " non-sequestered HVC", + bus1=spatial.oil.demand_locations, + bus2="co2 atmosphere", + carrier="waste CHP", + p_nom_extendable=True, + # p_nom=biomass_potential['municipal solid waste'] / 8760, + capital_cost=costs.at['waste CHP', 'fixed'] * costs.at['waste CHP', 'efficiency'], + marginal_cost=costs.at['waste CHP', 'VOM'], + efficiency=costs.at['waste CHP', 'efficiency'], + #efficiency4=costs.at['waste CHP', 'efficiency-heat'], + efficiency2=costs.at['oil', 'CO2 intensity'], + lifetime=costs.at['waste CHP', 'lifetime']) + + #TODO add heat + n.madd( + "Link", + spatial.oil.demand_locations + " waste CHP CC", + bus0=spatial.oil.demand_locations + " non-sequestered HVC", + bus1=spatial.oil.demand_locations, + bus2="co2 atmosphere", + bus3=spatial.co2.nodes, + carrier="waste CHP CC", + p_nom_extendable=True, + # p_nom=biomass_potential['municipal solid waste'] / 8760, + capital_cost=costs.at['waste CHP CC', 'fixed'] * costs.at['waste CHP CC', 'efficiency'], + marginal_cost=costs.at['waste CHP CC', 'VOM'], + efficiency=costs.at['waste CHP CC', 'efficiency'], + #efficiency4=costs.at['waste CHP', 'efficiency-heat'], + efficiency2=costs.at['oil', 'CO2 intensity']*(1 - options["cc_fraction"]), + efficiency3=costs.at['oil', 'CO2 intensity']*options["cc_fraction"], + lifetime=costs.at['waste CHP CC', 'lifetime']) + + + else: + + n.madd( + "Link", + spatial.oil.naphtha, + bus0=spatial.oil.nodes, + bus1=spatial.oil.naphtha, + bus2="co2 atmosphere", + bus3=spatial.co2.process_emissions, + carrier="naphtha for industry", + p_nom_extendable=True, + efficiency2=emitted_co2_per_naphtha*non_sequestered, + efficiency3=process_co2_per_naphtha, + ) # aviation demand_factor = options.get("aviation_demand_factor", 1)