From ba66fe4e571dfe9c805250c08c0b2ed154fa693a Mon Sep 17 00:00:00 2001 From: orichters Date: Mon, 15 Jul 2024 10:13:34 +0200 Subject: [PATCH 1/3] fix recycling of implicit tax from BECCS qtty target in regipol --- CHANGELOG.md | 2 ++ .../47_regipol/regiCarbonPrice/equations.gms | 35 +++++++++++-------- .../47_regipol/regiCarbonPrice/postsolve.gms | 2 +- .../47_regipol/regiCarbonPrice/presolve.gms | 2 +- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23fcabf16d..4284241354 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). https://github.com/remindmodel/development_issues/issues/274 - **MAGICC7** fix climate data for time before cm_startyear on reference run [[#1744](https://github.com/remindmodel/remind/pull/1744)] +- **regipol** fix recycling of implicit tax from BECCS qtty target + [[#1745](https://github.com/remindmodel/remind/pull/1745)] - **scripts** fix tax convergence reporting in modelSummary [[#1728](https://github.com/remindmodel/remind/pull/1728)] - **scripts** cleanup non-existing realizations from settings_config.csv diff --git a/modules/47_regipol/regiCarbonPrice/equations.gms b/modules/47_regipol/regiCarbonPrice/equations.gms index 242f27d103..bae3655fda 100644 --- a/modules/47_regipol/regiCarbonPrice/equations.gms +++ b/modules/47_regipol/regiCarbonPrice/equations.gms @@ -17,21 +17,26 @@ q47_implicitQttyTargetTax(t,regi)$(t.val ge max(2010,cm_startyear)).. vm_taxrevimplicitQttyTargetTax(t,regi) =e= sum((qttyTarget,qttyTargetGroup)$p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup), - ( - p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup) * sum(entyPe$energyQttyTargetANDGroup2enty(qttyTarget,qttyTargetGroup,entyPe), sum(pe2se(entyPe,entySe,te), vm_demPe(t,regi,entyPe,entySe,te))) - )$(sameas(qttyTarget,"PE")) - + - ( - p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup) * sum(entySe$energyQttyTargetANDGroup2enty(qttyTarget,qttyTargetGroup,entySe), sum(se2fe(entySe,entyFe,te), vm_demSe(t,regi,entySe,entyFe,te))) - )$(sameas(qttyTarget,"SE")) - + - ( - p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup) * sum(entySe$energyQttyTargetANDGroup2enty("FE",qttyTargetGroup,entySe), sum(se2fe(entySe,entyFe,te), sum((sector,emiMkt)$(entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt)), vm_demFeSector(t,regi,entySe,entyFe,sector,emiMkt)))) - )$(sameas(qttyTarget,"FE") or sameas(qttyTarget,"FE_wo_b") or sameas(qttyTarget,"FE_wo_n_e") or sameas(qttyTarget,"FE_wo_b_wo_n_e")) - + - ( - p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup) * sum(ccs2te(ccsCo2(enty),enty2,te), sum(teCCS2rlf(te,rlf),vm_co2CCS(t,regi,enty,enty2,te,rlf))) - )$(sameas(qttyTarget,"CCS")) + p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup) * ( + ( sum(entyPe$energyQttyTargetANDGroup2enty(qttyTarget,qttyTargetGroup,entyPe), sum(pe2se(entyPe,entySe,te), vm_demPe.l(t,regi,entyPe,entySe,te))) + )$(sameas(qttyTarget,"PE")) + + + ( sum(entySe$energyQttyTargetANDGroup2enty(qttyTarget,qttyTargetGroup,entySe), sum(se2fe(entySe,entyFe,te), vm_demSe.l(t,regi,entySe,entyFe,te))) + )$(sameas(qttyTarget,"SE")) + + + ( sum(entySe$energyQttyTargetANDGroup2enty("FE",qttyTargetGroup,entySe), sum(se2fe(entySe,entyFe,te), sum((sector,emiMkt)$(entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt)), vm_demFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)))) + )$(sameas(qttyTarget,"FE") or sameas(qttyTarget,"FE_wo_b") or sameas(qttyTarget,"FE_wo_n_e") or sameas(qttyTarget,"FE_wo_b_wo_n_e")) + + + ( sum(ccs2te(ccsCO2(enty),enty2,te), sum(teCCS2rlf(te,rlf),vm_co2CCS.l(t,regi,enty,enty2,te,rlf))) + )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"all")) + + + (( !! Supply side BECCS + sum(emiBECCS2te(enty,enty2,te,enty3),vm_emiTeDetail.l(t,regi,enty,enty2,te,enty3)) + !! Industry BECCS (using biofuels in Industry with CCS) + + sum((emiMkt,entySe,secInd37,entyFe)$entySeBio(entySe), pm_IndstCO2Captured(t,regi,entySe,entyFe,secInd37,emiMkt)) + ) * pm_share_CCS_CCO2(t,regi) )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"biomass")) + ) + ) - p47_implicitQttyTargetTax0(t,regi) diff --git a/modules/47_regipol/regiCarbonPrice/postsolve.gms b/modules/47_regipol/regiCarbonPrice/postsolve.gms index 3f75c13d25..ce441d95dd 100644 --- a/modules/47_regipol/regiCarbonPrice/postsolve.gms +++ b/modules/47_regipol/regiCarbonPrice/postsolve.gms @@ -480,7 +480,7 @@ $ENDIF.emiMkt $ifthen.cm_implicitQttyTarget not "%cm_implicitQttyTarget%" == "off" *** saving previous iteration value for implicit tax revenue recycling -*** the same line exists in presolve.gms, don't forget to update there +*** similar lines exists in equations.gms and presolve.gms, don't forget to update there p47_implicitQttyTargetTax_prevIter(t,regi,qttyTarget,qttyTargetGroup) = p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup); p47_implicitQttyTargetTax0(t,regi) = sum((qttyTarget,qttyTargetGroup)$p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup), diff --git a/modules/47_regipol/regiCarbonPrice/presolve.gms b/modules/47_regipol/regiCarbonPrice/presolve.gms index 645404d864..22420f71ec 100644 --- a/modules/47_regipol/regiCarbonPrice/presolve.gms +++ b/modules/47_regipol/regiCarbonPrice/presolve.gms @@ -35,7 +35,7 @@ $ENDIF.emiMkt $ifthen.cm_implicitQttyTarget not "%cm_implicitQttyTarget%" == "off" *** saving value for implicit tax revenue recycling -*** the same line exists in postsolve.gms, don't forget to update there +*** similar lines exists in equations.gms and postsolve.gms, don't forget to update there p47_implicitQttyTargetTax0(t,regi) = sum((qttyTarget,qttyTargetGroup)$p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup), p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup) * ( From dcdc13e030883106cffc8c3f76945ddf9445ce52 Mon Sep 17 00:00:00 2001 From: orichters Date: Mon, 15 Jul 2024 12:16:30 +0200 Subject: [PATCH 2/3] fix codeCheck --- modules/47_regipol/regiCarbonPrice/equations.gms | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/47_regipol/regiCarbonPrice/equations.gms b/modules/47_regipol/regiCarbonPrice/equations.gms index bae3655fda..5d16ebbf81 100644 --- a/modules/47_regipol/regiCarbonPrice/equations.gms +++ b/modules/47_regipol/regiCarbonPrice/equations.gms @@ -27,7 +27,7 @@ q47_implicitQttyTargetTax(t,regi)$(t.val ge max(2010,cm_startyear)).. ( sum(entySe$energyQttyTargetANDGroup2enty("FE",qttyTargetGroup,entySe), sum(se2fe(entySe,entyFe,te), sum((sector,emiMkt)$(entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt)), vm_demFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)))) )$(sameas(qttyTarget,"FE") or sameas(qttyTarget,"FE_wo_b") or sameas(qttyTarget,"FE_wo_n_e") or sameas(qttyTarget,"FE_wo_b_wo_n_e")) + - ( sum(ccs2te(ccsCO2(enty),enty2,te), sum(teCCS2rlf(te,rlf),vm_co2CCS.l(t,regi,enty,enty2,te,rlf))) + ( sum(ccs2te(ccsCo2(enty),enty2,te), sum(teCCS2rlf(te,rlf),vm_co2CCS.l(t,regi,enty,enty2,te,rlf))) )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"all")) + (( !! Supply side BECCS @@ -36,7 +36,6 @@ q47_implicitQttyTargetTax(t,regi)$(t.val ge max(2010,cm_startyear)).. + sum((emiMkt,entySe,secInd37,entyFe)$entySeBio(entySe), pm_IndstCO2Captured(t,regi,entySe,entyFe,secInd37,emiMkt)) ) * pm_share_CCS_CCO2(t,regi) )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"biomass")) ) - ) - p47_implicitQttyTargetTax0(t,regi) From a02f3756f7f38d76612c49798fa8255a94094f9a Mon Sep 17 00:00:00 2001 From: orichters Date: Thu, 18 Jul 2024 14:12:04 +0200 Subject: [PATCH 3/3] fix further bugs in beccs qtty target --- main.gms | 2 +- modules/47_regipol/none/not_used.txt | 2 ++ modules/47_regipol/regiCarbonPrice/equations.gms | 15 +++++++-------- modules/47_regipol/regiCarbonPrice/postsolve.gms | 10 +++------- modules/47_regipol/regiCarbonPrice/presolve.gms | 8 +++----- 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/main.gms b/main.gms index e3f6eca156..7662503ad6 100755 --- a/main.gms +++ b/main.gms @@ -1331,7 +1331,7 @@ $setGlobal cm_vehiclesSubsidies off !! def = off *** cm_implicitQttyTarget "2050.GLO.sub.s.FE.electricity 0.8". The p47_implicitQttyTargetTax parameter will contain the subsidy necessary to achieve that goal. *** Enforce a subsidy (sub) that guarantees a minimum share (s) of electricity in final energy (FE.electricity) equal to 80% (0.8) from 2050 (2050) onward in all World (GLO) regions. *** The p47_implicitQttyTargetTax parameter will contain the subsidy necessary to achieve that goal. -*** To limit CCS to 8 GtCO2 and BECCS to 5 GtCO2, use "2050.GLO.tax.t.CCS.all 8000, 2050.GLO.tax.t.CCS.biomass 5000" +*** To limit CCS to 8 GtCO2 and BECCS (only Pe2Se, not industry) to 5 GtCO2, use "2050.GLO.tax.t.CCS.all 8000, 2050.GLO.tax.t.CCS.biomass 5000" *** Example on how to use the switch with cm_implicitQttyTargetType = scenario: *** cm_implicitQttyTarget "EU27_RpEUEff,EU27_bio4" *** "EU27_RpEUEff" -> Enforce a tax that guarantees total FE will be lower or equal to the RePowerEU target for 2030. diff --git a/modules/47_regipol/none/not_used.txt b/modules/47_regipol/none/not_used.txt index 0264ff75ae..bf8cffd7a8 100644 --- a/modules/47_regipol/none/not_used.txt +++ b/modules/47_regipol/none/not_used.txt @@ -75,3 +75,5 @@ vm_emiTeMkt,input,added by codeCheck pm_emiMktTarget_tolerance,switch,not needed sm_globalBudget_dev,input,questionnaire pm_allTargetsConverged,input,questionnaire +sm_eps,input,not needed +vm_co2capture,input,not needed diff --git a/modules/47_regipol/regiCarbonPrice/equations.gms b/modules/47_regipol/regiCarbonPrice/equations.gms index 5d16ebbf81..82e09cf093 100644 --- a/modules/47_regipol/regiCarbonPrice/equations.gms +++ b/modules/47_regipol/regiCarbonPrice/equations.gms @@ -18,23 +18,22 @@ q47_implicitQttyTargetTax(t,regi)$(t.val ge max(2010,cm_startyear)).. =e= sum((qttyTarget,qttyTargetGroup)$p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup), p47_implicitQttyTargetTax(t,regi,qttyTarget,qttyTargetGroup) * ( - ( sum(entyPe$energyQttyTargetANDGroup2enty(qttyTarget,qttyTargetGroup,entyPe), sum(pe2se(entyPe,entySe,te), vm_demPe.l(t,regi,entyPe,entySe,te))) + ( sum(entyPe$energyQttyTargetANDGroup2enty(qttyTarget,qttyTargetGroup,entyPe), sum(pe2se(entyPe,entySe,te), vm_demPe(t,regi,entyPe,entySe,te))) )$(sameas(qttyTarget,"PE")) + - ( sum(entySe$energyQttyTargetANDGroup2enty(qttyTarget,qttyTargetGroup,entySe), sum(se2fe(entySe,entyFe,te), vm_demSe.l(t,regi,entySe,entyFe,te))) + ( sum(entySe$energyQttyTargetANDGroup2enty(qttyTarget,qttyTargetGroup,entySe), sum(se2fe(entySe,entyFe,te), vm_demSe(t,regi,entySe,entyFe,te))) )$(sameas(qttyTarget,"SE")) + ( sum(entySe$energyQttyTargetANDGroup2enty("FE",qttyTargetGroup,entySe), sum(se2fe(entySe,entyFe,te), sum((sector,emiMkt)$(entyFe2Sector(entyFe,sector) AND sector2emiMkt(sector,emiMkt)), vm_demFeSector.l(t,regi,entySe,entyFe,sector,emiMkt)))) )$(sameas(qttyTarget,"FE") or sameas(qttyTarget,"FE_wo_b") or sameas(qttyTarget,"FE_wo_n_e") or sameas(qttyTarget,"FE_wo_b_wo_n_e")) + - ( sum(ccs2te(ccsCo2(enty),enty2,te), sum(teCCS2rlf(te,rlf),vm_co2CCS.l(t,regi,enty,enty2,te,rlf))) + ( sum(ccs2te(ccsCo2(enty),enty2,te), sum(teCCS2rlf(te,rlf),vm_co2CCS(t,regi,enty,enty2,te,rlf))) )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"all")) + - (( !! Supply side BECCS - sum(emiBECCS2te(enty,enty2,te,enty3),vm_emiTeDetail.l(t,regi,enty,enty2,te,enty3)) - !! Industry BECCS (using biofuels in Industry with CCS) - + sum((emiMkt,entySe,secInd37,entyFe)$entySeBio(entySe), pm_IndstCO2Captured(t,regi,entySe,entyFe,secInd37,emiMkt)) - ) * pm_share_CCS_CCO2(t,regi) )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"biomass")) + ( !! only supply side BECCS + sum(emiBECCS2te(enty,enty2,te,enty3),vm_emiTeDetail(t,regi,enty,enty2,te,enty3) + * sum(teCCS2rlf(te,rlf), vm_co2CCS.l(t,regi,"cco2","ico2",te,rlf)) / (sum(teCCS2rlf(te,rlf), vm_co2capture.l(t,regi,"cco2","ico2",te,rlf))+sm_eps)) !! pm_share_CCS_CCO2 + )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"biomass")) ) ) - diff --git a/modules/47_regipol/regiCarbonPrice/postsolve.gms b/modules/47_regipol/regiCarbonPrice/postsolve.gms index ce441d95dd..4c4c89c34e 100644 --- a/modules/47_regipol/regiCarbonPrice/postsolve.gms +++ b/modules/47_regipol/regiCarbonPrice/postsolve.gms @@ -497,11 +497,9 @@ p47_implicitQttyTargetTax0(t,regi) = ( sum(ccs2te(ccsCo2(enty),enty2,te), sum(teCCS2rlf(te,rlf),vm_co2CCS.l(t,regi,enty,enty2,te,rlf))) )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"all")) + - (( !! Supply side BECCS - sum(emiBECCS2te(enty,enty2,te,enty3),vm_emiTeDetail.l(t,regi,enty,enty2,te,enty3)) - !! Industry BECCS (using biofuels in Industry with CCS) - + sum((emiMkt,entySe,secInd37,entyFe)$entySeBio(entySe), pm_IndstCO2Captured(t,regi,entySe,entyFe,secInd37,emiMkt)) - ) * pm_share_CCS_CCO2(t,regi) )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"biomass")) + ( !! Only supply side BECCS + sum(emiBECCS2te(enty,enty2,te,enty3),vm_emiTeDetail.l(t,regi,enty,enty2,te,enty3)) * pm_share_CCS_CCO2(t,regi) + )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"biomass")) ) ) ; @@ -529,8 +527,6 @@ loop((ttot,ext_regi,taxType,targetType,qttyTarget,qttyTargetGroup)$pm_implicitQt + sum(regi$regi_groupExt(ext_regi,regi), ( !! Supply side BECCS sum(emiBECCS2te(enty,enty2,te,enty3),vm_emiTeDetail.l(ttot,regi,enty,enty2,te,enty3)) - !! Industry BECCS (using biofuels in Industry with CCS) - + sum((emiMkt,entySe,secInd37,entyFe)$entySeBio(entySe), pm_IndstCO2Captured(ttot,regi,entySe,entyFe,secInd37,emiMkt)) ) * pm_share_CCS_CCO2(ttot,regi))$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"biomass")) ); if(sameas(targetType,"s"), !!relative target (s=share) (not applied to CCS) diff --git a/modules/47_regipol/regiCarbonPrice/presolve.gms b/modules/47_regipol/regiCarbonPrice/presolve.gms index 22420f71ec..2df62b866b 100644 --- a/modules/47_regipol/regiCarbonPrice/presolve.gms +++ b/modules/47_regipol/regiCarbonPrice/presolve.gms @@ -51,11 +51,9 @@ p47_implicitQttyTargetTax0(t,regi) = ( sum(ccs2te(ccsCo2(enty),enty2,te), sum(teCCS2rlf(te,rlf),vm_co2CCS.l(t,regi,enty,enty2,te,rlf))) )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"all")) + - (( !! Supply side BECCS - sum(emiBECCS2te(enty,enty2,te,enty3),vm_emiTeDetail.l(t,regi,enty,enty2,te,enty3)) - !! Industry BECCS (using biofuels in Industry with CCS) - + sum((emiMkt,entySe,secInd37,entyFe)$entySeBio(entySe), pm_IndstCO2Captured(t,regi,entySe,entyFe,secInd37,emiMkt)) - ) * pm_share_CCS_CCO2(t,regi) )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"biomass")) + ( !! Only supply side BECCS + sum(emiBECCS2te(enty,enty2,te,enty3),vm_emiTeDetail.l(t,regi,enty,enty2,te,enty3)) * pm_share_CCS_CCO2(t,regi) + )$(sameas(qttyTarget,"CCS") AND sameas(qttyTargetGroup,"biomass")) ) ) ;