diff --git a/config/config.default.yaml b/config/config.default.yaml index a6df173b..4c8bf7d9 100644 --- a/config/config.default.yaml +++ b/config/config.default.yaml @@ -450,6 +450,7 @@ sector: methanation: true helmeth: false coal_cc: false + coal_for_industry_cc: false dac: true co2_vent: false central_heat_vent: false diff --git a/doc/configtables/sector.csv b/doc/configtables/sector.csv index 856ea074..599f1ccb 100644 --- a/doc/configtables/sector.csv +++ b/doc/configtables/sector.csv @@ -73,6 +73,7 @@ marginal_cost_storage,currency/MWh ,float,The marginal cost of discharging batte methanation,--,"{true, false}",Add option for transforming hydrogen and CO2 into methane using methanation. helmeth,--,"{true, false}",Add option for transforming power into gas using HELMETH (Integrated High-Temperature ELectrolysis and METHanation for Effective Power to Gas Conversion) coal_cc,--,"{true, false}",Add option for coal CHPs with carbon capture +coal_for_industry_cc,--,"{true, false}",Add option for carbon capture in integrated steel making (blast furnaces) dac,--,"{true, false}",Add option for Direct Air Capture (DAC) co2_vent,--,"{true, false}",Add option for vent out CO2 from storages to the atmosphere. allam_cycle,--,"{true, false}",Add option to include `Allam cycle gas power plants `_ diff --git a/doc/release_notes.rst b/doc/release_notes.rst index ee5a954b..5d0f3d1f 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -12,6 +12,8 @@ Upcoming Release * Updated Global Energy Monitor LNG terminal data to March 2023 version. +* Add option for carbon capture in integrated steelworks. + * For industry distribution, use EPRTR as fallback if ETS data is not available. * The minimum capacity for renewable generators when using the myopic option has been fixed. diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 8a4f98ce..ccfa3352 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -145,6 +145,8 @@ def define_spatial(nodes, options): spatial.coal = SimpleNamespace() spatial.coal.nodes = ["EU coal"] spatial.coal.locations = ["EU"] + spatial.coal.industry = ["coal for industry"] + spatial.coal.industry_cc = ["coal for industry CC"] # lignite spatial.lignite = SimpleNamespace() @@ -2914,15 +2916,56 @@ def add_industry(n, costs): + mwh_coal_per_mwh_coke * industrial_demand["coke"].sum() ) / nhours + n.madd( + "Bus", + spatial.coal.industry, + location=spatial.coal.locations, + carrier="coal for industry", + unit="MWh_LHV", + ) + n.madd( "Load", - spatial.coal.nodes, - suffix=" for industry", - bus=spatial.coal.nodes, + spatial.coal.industry, + bus=spatial.coal.industry, carrier="coal for industry", p_set=p_set, ) + n.madd( + "Link", + spatial.coal.industry, + bus0=spatial.coal.nodes, + bus1=spatial.coal.industry, + bus2="co2 atmosphere", + carrier="coal for industry", + p_nom_extendable=True, + p_min_pu=1.0, + efficiency=1.0, + efficiency2=costs.at["coal", "CO2 intensity"], + ) + + if options.get("coal_for_industry_cc", False): + n.madd( + "Link", + spatial.coal.industry_cc, + bus0=spatial.coal.nodes, + bus1=spatial.coal.industry, + bus2="co2 atmosphere", + bus3=spatial.co2.nodes, + carrier="coal for industry CC", + p_min_pu=1.0, + p_nom_extendable=True, + capital_cost=costs.at["cement capture", "fixed"] + * costs.at["coal", "CO2 intensity"], + efficiency=0.9, + efficiency2=costs.at["coal", "CO2 intensity"] + * (1 - costs.at["cement capture", "capture_rate"]), + efficiency3=costs.at["coal", "CO2 intensity"] + * costs.at["cement capture", "capture_rate"], + lifetime=costs.at["cement capture", "lifetime"], + ) + def add_waste_heat(n): # TODO options?