From 35151a7f27d89967904d984c972fd28ec0793809 Mon Sep 17 00:00:00 2001 From: Michaja Pehl Date: Tue, 30 Apr 2024 15:15:51 +0200 Subject: [PATCH] separate incineration emi before and after CCS to ease reporting --- core/declarations.gms | 6 +-- core/equations.gms | 34 ++++++++-------- modules/37_industry/fixed_shares/not_used.txt | 35 +++++++++-------- .../37_industry/fixed_shares/postsolve.gms | 15 +++++-- .../37_industry/subsectors/declarations.gms | 2 + modules/37_industry/subsectors/equations.gms | 39 +++++++++---------- modules/37_industry/subsectors/postsolve.gms | 26 ++++++++----- 7 files changed, 86 insertions(+), 71 deletions(-) diff --git a/core/declarations.gms b/core/declarations.gms index 31c26cf98..dc5f438ad 100644 --- a/core/declarations.gms +++ b/core/declarations.gms @@ -415,9 +415,9 @@ v_shGasLiq_fe(ttot,all_regi,emi_sectors) "share of gases and liquids vm_emiCdrAll(ttot,all_regi) "all CDR emissions" -vm_feedstockEmiUnknownFate(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in feedstocks with unknown fate (not plastics)(assumed to go back into the atmosphere) [GtC]" -vm_incinerationEmi(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Emissions from incineration of plastic waste [GtC]" -vm_nonIncineratedPlastics(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in plastics that are not incinerated [GtC]" +vm_feedstockEmiUnknownFate(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in feedstocks with unknown fate (not plastics)(assumed to go back into the atmosphere) [GtC]" +vm_incinerationEmi_Base(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Emissions from incineration of plastic waste, before CCS [GtC]" +vm_nonIncineratedPlastics(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Carbon flow: carbon contained in plastics that are not incinerated [GtC]" v_changeProdStartyearAdj(ttot,all_regi,all_te) "Absolute effect size of changing output with respect to the reference run for each te" vm_changeProdStartyearCost(ttot,all_regi,all_te) "Costs for changing output with respect to the reference run for each te" diff --git a/core/equations.gms b/core/equations.gms index 0bd0ae008..07775f6c7 100644 --- a/core/equations.gms +++ b/core/equations.gms @@ -576,29 +576,27 @@ q_emiTeMkt(t,regi,emiTe(enty),emiMkt) .. vm_emiTeDetailMkt(t,regi,enty2,enty3,te,enty,emiMkt) ) !! energy emissions fuel extraction - + v_emiEnFuelEx(t,regi,enty)$(sameas(emiMkt,"ETS")) + + v_emiEnFuelEx(t,regi,enty)$( sameas(emiMkt,"ETS") ) !! Industry CCS emissions - - sum(emiInd37_fuel, - vm_emiIndCCS(t,regi,emiInd37_fuel) - )$( sameas(enty,"co2") AND sameas(emiMkt,"ETS")) + - sum(emiInd37_fuel, + vm_emiIndCCS(t,regi,emiInd37_fuel) + )$( sameas(enty,"co2") AND sameas(emiMkt,"ETS") ) !! substract carbon from biogenic or synthetic origin contained in !! plastics that don't get incinerated ("plastic removals") - - sum(entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt), - sum(se2fe(entySe,entyFe,te)$( entySeBio(entySe) OR entySeSyn(entySe) ), - vm_nonIncineratedPlastics(t,regi,entySe,entyFe,emiMkt) - ) + - sum((entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt), + se2fe(entySe,entyFe,te))$( entySeBio(entySe) OR entySeSyn(entySe) ), + vm_nonIncineratedPlastics(t,regi,entySe,entyFe,emiMkt) )$( sameas(enty,"co2") ) - !! add emissions from plastics incineration. CHECK FOR DOUBLE-COUNTING RISK - + sum(entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt), - sum(sefe(entySe,entyFe), - vm_incinerationEmi(t,regi,entySe,entyFe,emiMkt) - ) + !! add emissions from plastics incineration before CCS + !! (CCS emissions are subtracted via vm_emiIndCCS) + + sum((entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt), + sefe(entySe,entyFe)), + vm_incinerationEmi_Base(t,regi,entySe,entyFe,emiMkt) )$( sameas(enty,"co2") ) !! add emissions from chemical feedstock with unknown fate - + sum(entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt), - sum(se2fe(entySe,entyFe,te), - vm_feedstockEmiUnknownFate(t,regi,entySe,entyFe,emiMkt) - ) + + sum((entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt), + se2fe(entySe,entyFe,te)), + vm_feedstockEmiUnknownFate(t,regi,entySe,entyFe,emiMkt) )$( sameas(enty,"co2") ) !! Valve from cco2 capture step, to mangage if capture capacity and CCU/CCS !! capacity don't have the same lifetime @@ -607,7 +605,7 @@ q_emiTeMkt(t,regi,emiTe(enty),emiMkt) .. !! period shorter than 5 years) + sum(teCCU2rlf(te2,rlf), vm_co2CCUshort(t,regi,"cco2","ccuco2short",te2,rlf)$( sameas(enty,"co2") ) - )$(sameas(emiMkt,"ETS")) + )$( sameas(emiMkt,"ETS") ) ; ***-------------------------------------------------- diff --git a/modules/37_industry/fixed_shares/not_used.txt b/modules/37_industry/fixed_shares/not_used.txt index 2073258d5..753d1a654 100644 --- a/modules/37_industry/fixed_shares/not_used.txt +++ b/modules/37_industry/fixed_shares/not_used.txt @@ -5,31 +5,32 @@ # | REMIND License Exception, version 1.0 (see LICENSE file). # | Contact: remind@pik-potsdam.de name, type, reason -pm_delta_kap, input, questionnaire +cm_emiscen, parameter, not needed +o37_incinerationEmi, parameter, not needed pm_calibrate_eff_scale, parameter, not needed -pm_fedemand, parameter, not needed -sm_TWa_2_MWh, input, questionnaire -sm_giga_2_non, input, not needed -sm_EJ_2_TWa, input, not needed -sm_tmp2, parameter, not needed -vm_cap, variable, not needed -vm_capFac, variable, not needed -pm_tau_ces_tax, input, questionnaire -pm_secBioShare, parameter, not needed +pm_delta_kap, input, questionnaire +pm_emifacNonEnergy, parameter, not needed pm_exogDemScen, input, added by codeCheck -pm_ts, parameter, not needed +pm_fedemand, parameter, not needed +pm_incinerationRate, parameter, not needed pm_outflowPrcIni, parameter, not needed +pm_secBioShare, parameter, not needed pm_specFeDem, parameter, not needed +pm_tau_ces_tax, input, questionnaire +pm_ts, parameter, not needed +sm_EJ_2_TWa, input, not needed +sm_giga_2_non, input, not needed sm_macChange, parameter, not needed -vm_demFENonEnergySector, variable, not needed +sm_tmp2, parameter, not needed +sm_TWa_2_MWh, input, questionnaire v37_FeedstocksCarbon, variable, not needed v37_plasticsCarbon, variable, not needed v37_plasticWaste, variable, not needed +vm_capFac, variable, not needed +vm_cap, variable, not needed +vm_costMatPrc, variable, not needed +vm_demFENonEnergySector, variable, not needed vm_feedstockEmiUnknownFate, variable, not needed -vm_incinerationEmi, variable, not needed +vm_incinerationEmi_Base, variable, not needed vm_nonIncineratedPlastics, variable, not needed vm_outflowPrc, variable, not needed -vm_costMatPrc, variable, not needed -pm_emifacNonEnergy, parameter, not needed -pm_incinerationRate, parameter, not needed -cm_emiscen, parameter, not needed diff --git a/modules/37_industry/fixed_shares/postsolve.gms b/modules/37_industry/fixed_shares/postsolve.gms index 025b91368..5c2336331 100644 --- a/modules/37_industry/fixed_shares/postsolve.gms +++ b/modules/37_industry/fixed_shares/postsolve.gms @@ -28,7 +28,7 @@ o37_demFeIndSub(ttot,regi,entySe,entyFe,secInd37,emiMkt) *** industry captured fuel CO2 pm_IndstCO2Captured(ttot,regi,entySe,entyFe(entyFeCC37),secInd37,emiMkt)$( emiInd37_fe2sec(entyFe,secInd37) - AND sum(entyFE2, vm_emiIndBase.l(ttot,regi,entyFE2,secInd37)) ) + AND sum(entyFe2, vm_emiIndBase.l(ttot,regi,entyFe2,secInd37)) ) = ( o37_demFeIndSub(ttot,regi,entySe,entyFe,secInd37,emiMkt) * sum(se2fe(entySE2,entyFe,te), !! collapse entySe dimension, so emission factors apply to all entyFe @@ -42,10 +42,19 @@ pm_IndstCO2Captured(ttot,regi,entySe,entyFe(entyFeCC37),secInd37,emiMkt)$( vm_emiIndCCS.l(ttot,regi,emiInd37) ) !! subsector captured energy emissions - / sum(entyFE2, - vm_emiIndBase.l(ttot,regi,entyFE2,secInd37) + / sum(entyFe2, + vm_emiIndBase.l(ttot,regi,entyFe2,secInd37) ) !! subsector total energy emissions ) !! subsector capture share ; +*** industry subsector capture share +o37_indCCSshare(ttot,regi,secInd37) + !! subsector captured energy emissions + = sum(secInd37_2_emiInd37(secInd37,emiInd37(emiInd37_fuel)), + vm_emiIndCCS.l(ttot,regi,emiInd37) + ) + !! subsector total energy emissions + / sum(entyFe2, vm_emiIndBase.l(ttot,regi,entyFe2,secInd37)); + *** EOF ./modules/37_industry/fixed_shares/postsolve.gms diff --git a/modules/37_industry/subsectors/declarations.gms b/modules/37_industry/subsectors/declarations.gms index 6822d76ac..131176ee2 100644 --- a/modules/37_industry/subsectors/declarations.gms +++ b/modules/37_industry/subsectors/declarations.gms @@ -45,6 +45,8 @@ Parameters *** output parameters only for reporting o37_cementProcessEmissions(ttot,all_regi,all_enty) "cement process emissions [GtC/a]" o37_demFeIndSub(ttot,all_regi,all_enty,all_enty,secInd37,all_emiMkt) "FE demand per industry subsector" + o37_indCCSshare(ttot,all_regi,secInd37) "industry subsector CCS capture share" + o37_incinerationEmi(ttot,all_regi,all_enty,all_enty,all_emiMkt) "Emissions from incineration of plastic waste, net of CCS [GtC]" !! process-based implementation o37_demFePrc(ttot,all_regi,all_enty,all_te,opmoPrc) "Process-based FE demand per FE type and process" o37_shareRoute(ttot,all_regi,all_te,opmoPrc,route) "The relative share (between 0 and 1) of a technology and operation mode outflow which belongs to a certain route; For example, bf.standard belongs partly to the route bfbof and partly to the route bfbof" diff --git a/modules/37_industry/subsectors/equations.gms b/modules/37_industry/subsectors/equations.gms index 5a0012e82..0a8f3b1d3 100644 --- a/modules/37_industry/subsectors/equations.gms +++ b/modules/37_industry/subsectors/equations.gms @@ -93,27 +93,25 @@ $endif.exogDem_scen *' accounting, just as a CCS baseline. ***------------------------------------------------------ q37_emiIndBase(t,regi,entyFe,secInd37) .. - vm_emiIndBase(t,regi,entyFe,secInd37) + vm_emiIndBase(t,regi,entyFe,secInd37) =e= - sum((secInd37_2_pf(secInd37,ppfen_industry_dyn37(in)),fe2ppfEn(entyFeCC37(entyFe),in)), + sum((secInd37_2_pf(secInd37,ppfen_industry_dyn37(in)), + fe2ppfEn(entyFeCC37(entyFe),in)), ( vm_cesIO(t,regi,in) - - ( p37_chemicals_feedstock_share(t,regi) - * vm_cesIO(t,regi,in) - )$( in_chemicals_feedstock_37(in) ) - ) - * - sum(se2fe(entySeFos,entyFe,te), - pm_emifac(t,regi,entySeFos,entyFe,te,"co2") + * ( 1 + - p37_chemicals_feedstock_share(t,regi)$( in_chemicals_feedstock_37(in) ) ) - )$(NOT secInd37Prc(secInd37)) - + - sum((sefe(entySe,entyFe),secInd37_emiMkt(secInd37,emiMkt)), - vm_incinerationEmi(t,regi,entySe,entyFe,emiMkt) - )$( sameas(secInd37,"chemicals") ) - + - sum((secInd37_tePrc(secInd37,tePrc),tePrc2opmoPrc(tePrc,opmoPrc)), - v37_emiPrc(t,regi,entyFe,tePrc,opmoPrc) - )$(secInd37Prc(secInd37)) + ) + * sum(se2fe(entySeFos,entyFe,te), + pm_emifac(t,regi,entySeFos,entyFe,te,"co2") + ) + )$( NOT secInd37Prc(secInd37) ) + + sum((sefe(entySe,entyFe),secInd37_emiMkt(secInd37,emiMkt)), + vm_incinerationEmi_Base(t,regi,entySe,entyFe,emiMkt) + )$( sameas(secInd37,"chemicals") ) + + sum((secInd37_tePrc(secInd37,tePrc),tePrc2opmoPrc(tePrc,opmoPrc)), + v37_emiPrc(t,regi,entyFe,tePrc,opmoPrc) + )$( secInd37Prc(secInd37) ) ; ***------------------------------------------------------ @@ -290,10 +288,11 @@ q37_plasticWaste(ttot,regi,sefe(entySe,entyFe),emiMkt)$( + v37_plasticsCarbon(ttot-1,regi,entySe,entyFe,emiMkt)$( ttot.val gt 2070 ) ; -*' emissions from plastics incineration as a share of total plastic waste, discounted by captured amount +*' emissions from plastics incineration as a share of total plastic waste, +*' before CCS q37_incinerationEmi(t,regi,sefe(entySe,entyFe),emiMkt)$( entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt)) .. - vm_incinerationEmi(t,regi,entySe,entyFe,emiMkt) + vm_incinerationEmi_Base(t,regi,entySe,entyFe,emiMkt) =e= v37_plasticWaste(t,regi,entySe,entyFe,emiMkt) * pm_incinerationRate(t,regi) diff --git a/modules/37_industry/subsectors/postsolve.gms b/modules/37_industry/subsectors/postsolve.gms index 6dd0baf5e..7de136a54 100644 --- a/modules/37_industry/subsectors/postsolve.gms +++ b/modules/37_industry/subsectors/postsolve.gms @@ -38,10 +38,20 @@ o37_demFeIndSub(ttot,regi,entySe,entyFe,secInd37,emiMkt)$( v37_demFeIndst.l(ttot,regi,entySe,entyFe,out,emiMkt) ); +*** industry subsector capture share +o37_indCCSshare(ttot,regi,secInd37) + !! subsector captured energy emissions + = ( sum(secInd37_2_emiInd37(secInd37,emiInd37(emiInd37_fuel)), + vm_emiIndCCS.l(ttot,regi,emiInd37) + ) + !! subsector total energy emissions + / sum(entyFe2, vm_emiIndBase.l(ttot,regi,entyFe2,secInd37)) + )$( sum(entyFe2, vm_emiIndBase.l(ttot,regi,entyFe2,secInd37)) ); + *** industry captured fuel CO2 pm_IndstCO2Captured(ttot,regi,entySe,entyFe(entyFeCC37),secInd37,emiMkt)$( emiInd37_fe2sec(entyFe,secInd37) - AND sum(entyFE2, vm_emiIndBase.l(ttot,regi,entyFE2,secInd37)) ) + AND sum(entyFe2, vm_emiIndBase.l(ttot,regi,entyFe2,secInd37)) ) = ( o37_demFeIndSub(ttot,regi,entySe,entyFe,secInd37,emiMkt) * sum(se2fe(entySE2,entyFe,te), !! collapse entySe dimension, so emission factors apply to all entyFe @@ -50,16 +60,12 @@ pm_IndstCO2Captured(ttot,regi,entySe,entyFe(entyFeCC37),secInd37,emiMkt)$( pm_emifac(ttot,regi,entySE2,entyFe,te,"co2") ) ) !! subsector emissions (smokestack, i.e. including biomass & synfuels) + * o37_indCCSshare(ttot,regi,secInd37); - * ( sum(secInd37_2_emiInd37(secInd37,emiInd37(emiInd37_fuel)), - vm_emiIndCCS.l(ttot,regi,emiInd37) - ) !! subsector captured energy emissions - - / sum(entyFE2, - vm_emiIndBase.l(ttot,regi,entyFE2,secInd37) - ) !! subsector total energy emissions - ) !! subsector capture share -; +*** Emissions from incineration of plastic waste, net of CCS +o37_incinerationEmi(ttot,regi,sefe(entySe,entyFe),emiMkt) + = vm_incinerationEmi_Base.l(ttot,regi,entySe,entyFe,emiMkt) + * (1 - o37_indCCSshare(ttot,regi,"chemicals")); *** ---------------------------------------------------------------------------