From 1c3a848578330a98607c998744426bf278863cc8 Mon Sep 17 00:00:00 2001 From: Renato-Rodrigues Date: Mon, 20 Mar 2023 17:03:13 +0100 Subject: [PATCH 1/5] framework to alternative cm_postTargetIncrease values --- main.gms | 12 +++++++----- modules/47_regipol/none/not_used.txt | 1 - modules/47_regipol/regiCarbonPrice/postsolve.gms | 12 ++++++++++-- standalone/MOFEX/MOFEX.gms | 4 +--- standalone/trade/trade.gms | 4 +--- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/main.gms b/main.gms index 3bc39d08a4..881bad7569 100755 --- a/main.gms +++ b/main.gms @@ -869,11 +869,6 @@ parameter ; c_budgetCO2from2020 = 1150; !! def = 1150 *' budgets from AR6 for 2020-2100 (including 2020), for 1.5 C: 500 Gt CO2 peak budget (400 Gt CO2 end of century), for 2 C: 1150 Gt CO2 -parameter - cm_postTargetIncrease "carbon price increase per year after regipol emission target is reached (euro per tCO2)" -; - cm_postTargetIncrease = 0; !! def = 0 -*' parameter cm_emiMktTargetDelay "number of years for delayed price change in the emission tax convergence algorithm. Not applied to first target set." ; @@ -1228,6 +1223,13 @@ $setGlobal cm_emiMktTarget off !! def = off *** cm_quantity_regiCO2target "emissions quantity upper bound from specific year for region group." *** Example on how to use: *** '2050.EUR_regi.netGHG 0.000001, obliges European GHG emissions to be approximately zero from 2050 onward" +$setGlobal cm_postTargetIncrease off !! def = off, alternatives: NPi, NDC, number +*** cm_postTargetIncrease "carbon price behavior after the last regipol emission target" +*** Example on how to use: +*** 'any number', e.g. '2', carbon prices increase 2 euros per tCO2 per year after regipol emission target is reached +*** 'NPi', carbon price follow NPi global convergence criteria after regipol emission target is reached +*** 'NDC', carbon price follow NDC global convergence criteria after regipol emission target is reached +*** '0' or 'off', carbon prices is kept without change year after regipol emission target is reached $setGlobal cm_quantity_regiCO2target off !! def = off *** cm_dispatchSetyDown <- "off", if set to some value, this allows dispatching of pe2se technologies, *** i.e. the capacity factors can be varied by REMIND and are not fixed. The value of this switch gives the percentage points by how much the lower bound of capacity factors should be lowered. diff --git a/modules/47_regipol/none/not_used.txt b/modules/47_regipol/none/not_used.txt index a235f18f8b..c7e9c6f8f6 100644 --- a/modules/47_regipol/none/not_used.txt +++ b/modules/47_regipol/none/not_used.txt @@ -22,7 +22,6 @@ pm_data,input,questionnaire pm_inco0_t,input,questionnaire pm_taxCO2eqSCC,input,questionnaire pm_ts,input,questionnaire -cm_postTargetIncrease,input,questionnaire cm_emiMktTargetDelay,input,questionnaire pm_histCap,input,questionnaire vm_emiCdr,input,questionnaire diff --git a/modules/47_regipol/regiCarbonPrice/postsolve.gms b/modules/47_regipol/regiCarbonPrice/postsolve.gms index 83810340ad..49a126db4b 100644 --- a/modules/47_regipol/regiCarbonPrice/postsolve.gms +++ b/modules/47_regipol/regiCarbonPrice/postsolve.gms @@ -278,8 +278,16 @@ loop(ext_regi$regiEmiMktTarget(ext_regi), pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot3.val) = pm_taxemiMkt(ttot3,regi,emiMkt) + (cm_postTargetIncrease*sm_DptCO2_2_TDpGtC)*(t.val-ttot3.val); !! price after next target year ); else -*** fixed year increase after terminal year price (cm_postTargetIncrease €/tCO2 increase per year) - pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot2.val) = pm_taxemiMkt(ttot2,regi,emiMkt) + (cm_postTargetIncrease*sm_DptCO2_2_TDpGtC)*(t.val-ttot2.val); +*** behavior after terminal year: fixed price (cm_postTargetIncrease=off or 0), global convergence (cm_postTargetIncrease=NPi or NDC), or fixed year increase (cm_postTargetIncrease €/tCO2 increase per year) +$ifthen %cm_postTargetIncrease% == "off" + pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot2.val) = pm_taxemiMkt(ttot2,regi,emiMkt); +$elseif %cm_postTargetIncrease% == "NPi" + +$elseif %cm_postTargetIncrease% == "NDC" + +$else + pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot2.val) = pm_taxemiMkt(ttot2,regi,emiMkt) + (%cm_postTargetIncrease%*sm_DptCO2_2_TDpGtC)*(t.val-ttot2.val); +$endif ); ); ); diff --git a/standalone/MOFEX/MOFEX.gms b/standalone/MOFEX/MOFEX.gms index 50033efcb8..224d49c676 100644 --- a/standalone/MOFEX/MOFEX.gms +++ b/standalone/MOFEX/MOFEX.gms @@ -182,8 +182,6 @@ c_budgetCO2 "carbon budget for all CO2 emissions (in GtCO2)" cm_trdcst "parameter to scale trade export cost for gas" cm_trdadj "parameter scale the adjustment cost parameter for increasing gas trade export" -cm_postTargetIncrease "carbon price increase per year after target is reached (euro per tCO2)" - cm_damages_BurkeLike_specification "empirical specification for Burke-like damage functions" cm_damages_BurkeLike_persistenceTime " persistence time in years for Burke-like damage functions" cm_damages_SccHorizon "Horizon for SCC calculation. Damages cm_damagesSccHorizon years into the future are internalized." @@ -326,7 +324,7 @@ c_abtrdy = 2010; !! def = 2010 c_abtcst = 1; !! def = 1 c_budgetCO2 = 0; !! def = 1300 $setGlobal cm_emiMktTarget off !! def = off -cm_postTargetIncrease = 0; !! def = 0 +$setGlobal cm_postTargetIncrease off !! def = 0 $setGlobal cm_quantity_regiCO2target off !! def = off cm_peakBudgYr = 2050; !! def = 2050 cm_taxCO2inc_after_peakBudgYr = 2; !! def = 2 diff --git a/standalone/trade/trade.gms b/standalone/trade/trade.gms index b9247bdf05..d5edca35a0 100644 --- a/standalone/trade/trade.gms +++ b/standalone/trade/trade.gms @@ -186,8 +186,6 @@ c_budgetCO2 "carbon budget for all CO2 emissions (in GtCO2)" cm_trdcst "parameter to scale trade export cost for gas" cm_trdadj "parameter scale the adjustment cost parameter for increasing gas trade export" -cm_postTargetIncrease "carbon price increase per year after target is reached (euro per tCO2)" - cm_damages_BurkeLike_specification "empirical specification for Burke-like damage functions" cm_damages_BurkeLike_persistenceTime " persistence time in years for Burke-like damage functions" cm_damages_SccHorizon "Horizon for SCC calculation. Damages cm_damagesSccHorizon years into the future are internalized." @@ -331,7 +329,7 @@ c_abtrdy = 2010; !! def = 2010 c_abtcst = 1; !! def = 1 c_budgetCO2 = 1350; !! def = 1300 $setGlobal cm_emiMktTarget off !! def = off -cm_postTargetIncrease = 0; !! def = 0 +$setGlobal cm_postTargetIncrease off !! def = 0 $setGlobal cm_quantity_regiCO2target off !! def = off cm_peakBudgYr = 2050; !! def = 2050 cm_taxCO2inc_after_peakBudgYr = 2; !! def = 2 From d00927e6aadcf74d240e157e1336453afb617e7c Mon Sep 17 00:00:00 2001 From: Renato-Rodrigues Date: Mon, 20 Mar 2023 17:08:45 +0100 Subject: [PATCH 2/5] spellchecking --- main.gms | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.gms b/main.gms index 881bad7569..75f782e7bf 100755 --- a/main.gms +++ b/main.gms @@ -1226,10 +1226,10 @@ $setGlobal cm_emiMktTarget off !! def = off $setGlobal cm_postTargetIncrease off !! def = off, alternatives: NPi, NDC, number *** cm_postTargetIncrease "carbon price behavior after the last regipol emission target" *** Example on how to use: -*** 'any number', e.g. '2', carbon prices increase 2 euros per tCO2 per year after regipol emission target is reached +*** 'any number', e.g. '2', carbon price increases 2 euros per tCO2 per year after regipol emission target is reached *** 'NPi', carbon price follow NPi global convergence criteria after regipol emission target is reached *** 'NDC', carbon price follow NDC global convergence criteria after regipol emission target is reached -*** '0' or 'off', carbon prices is kept without change year after regipol emission target is reached +*** '0' or 'off', carbon price is kept without change year after regipol emission target is reached $setGlobal cm_quantity_regiCO2target off !! def = off *** cm_dispatchSetyDown <- "off", if set to some value, this allows dispatching of pe2se technologies, *** i.e. the capacity factors can be varied by REMIND and are not fixed. The value of this switch gives the percentage points by how much the lower bound of capacity factors should be lowered. From aa41e8793475edb628fc01644f53b7f5731629a8 Mon Sep 17 00:00:00 2001 From: orichters Date: Tue, 25 Apr 2023 10:20:19 +0200 Subject: [PATCH 3/5] add NPi and NDC post-target convergence to 47/regipol --- modules/45_carbonprice/NPi2018/datainput.gms | 2 +- modules/47_regipol/regiCarbonPrice/postsolve.gms | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/modules/45_carbonprice/NPi2018/datainput.gms b/modules/45_carbonprice/NPi2018/datainput.gms index 3e33bd68d2..b9d2c6c0df 100644 --- a/modules/45_carbonprice/NPi2018/datainput.gms +++ b/modules/45_carbonprice/NPi2018/datainput.gms @@ -8,7 +8,7 @@ Execute_Loadpoint "input_ref" pm_taxCO2eq = pm_taxCO2eq; -*** convergence scheme post 2020: exponential increase of 5$ dollar in 2020with 1.25% AND regional convergence +*** convergence scheme post 2020: exponential increase of 5$ in 2020 with 1.25% AND regional convergence pm_taxCO2eq(ttot,regi)$(ttot.val ge cm_startyear) = (sum(ttot2,(pm_taxCO2eq(ttot2,regi)$(ttot2.val eq cm_startyear -5)))*max(2100-cm_startyear-5-ttot.val+cm_startyear,0) + 5 * sm_DptCO2_2_TDpGtC * 1.0125**(ttot.val-cm_startyear)*min(ttot.val-cm_startyear,2100-cm_startyear))/(2100-cm_startyear); diff --git a/modules/47_regipol/regiCarbonPrice/postsolve.gms b/modules/47_regipol/regiCarbonPrice/postsolve.gms index 49a126db4b..a66ee348cd 100644 --- a/modules/47_regipol/regiCarbonPrice/postsolve.gms +++ b/modules/47_regipol/regiCarbonPrice/postsolve.gms @@ -282,9 +282,21 @@ loop(ext_regi$regiEmiMktTarget(ext_regi), $ifthen %cm_postTargetIncrease% == "off" pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot2.val) = pm_taxemiMkt(ttot2,regi,emiMkt); $elseif %cm_postTargetIncrease% == "NPi" - +*** convergence scheme post ttot2.val: exponential increase of 5$ in 2020 with 1.25% AND regional convergence until 2100 + pm_taxemiMkr(t,regi,emiMkt)$(t.val gt ttot2.val) + = ( + sum(ttot3, pm_taxCO2eq(ttot3,regi)$(ttot3.val eq ttot2.val - 5)) * max(2100 - t.val, 0) + + 5 * sm_DptCO2_2_TDpGtC * 1.0125**(t.val-2020) * min(t.val - 2020, 80) + )/80; $elseif %cm_postTargetIncrease% == "NDC" - +*** convergence scheme post ttot2.val: exponential increase of 30$ in 2030 AND regional convergence until 2100, both increasing with 1.25% per year + pm_taxemiMkr(t,regi,emiMkt)$(t.val gt ttot2.val) + = ( + sum(ttot3, pm_taxCO2eq(ttot3,regi)$(ttot3.val eq ttot2.val - 5)) * 1.0125**(t.val-ttot2.val) * max(2100 - t.val, 0) + + 30 * sm_DptCO2_2_TDpGtC * 1.0125**(t.val-2030) * min(t.val - 2030, 70) + )/70; +*** as a minimum, have linear price increase starting from 1$ in 2030 + pm_taxemiMkr(t,regi,emiMkr)$(t.val gt ttot2.val) = max(pm_taxemiMkr(t,regi,emiMkr), 1 * sm_DptCO2_2_TDpGtC * (1+(t.val-2030)*9/7)); $else pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot2.val) = pm_taxemiMkt(ttot2,regi,emiMkt) + (%cm_postTargetIncrease%*sm_DptCO2_2_TDpGtC)*(t.val-ttot2.val); $endif From 28fefcc42b004fe3ade7c00540edd7125057edd5 Mon Sep 17 00:00:00 2001 From: orichters Date: Tue, 25 Apr 2023 10:36:58 +0200 Subject: [PATCH 4/5] calculate tax in ttot2 correctly, fix typos --- modules/47_regipol/regiCarbonPrice/postsolve.gms | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/47_regipol/regiCarbonPrice/postsolve.gms b/modules/47_regipol/regiCarbonPrice/postsolve.gms index a66ee348cd..2f81211097 100644 --- a/modules/47_regipol/regiCarbonPrice/postsolve.gms +++ b/modules/47_regipol/regiCarbonPrice/postsolve.gms @@ -283,20 +283,20 @@ $ifthen %cm_postTargetIncrease% == "off" pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot2.val) = pm_taxemiMkt(ttot2,regi,emiMkt); $elseif %cm_postTargetIncrease% == "NPi" *** convergence scheme post ttot2.val: exponential increase of 5$ in 2020 with 1.25% AND regional convergence until 2100 - pm_taxemiMkr(t,regi,emiMkt)$(t.val gt ttot2.val) + pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot2.val) = ( - sum(ttot3, pm_taxCO2eq(ttot3,regi)$(ttot3.val eq ttot2.val - 5)) * max(2100 - t.val, 0) - + 5 * sm_DptCO2_2_TDpGtC * 1.0125**(t.val-2020) * min(t.val - 2020, 80) + sum(ttot3, pm_taxemiMkt(ttot3,regi,emiMkt)$(ttot3.val eq ttot2.val)) * max(2100 - t.val, 0) + + 5 * sm_DptCO2_2_TDpGtC * 1.0125**(t.val-2020) * min(t.val - 2020, 80) )/80; $elseif %cm_postTargetIncrease% == "NDC" *** convergence scheme post ttot2.val: exponential increase of 30$ in 2030 AND regional convergence until 2100, both increasing with 1.25% per year - pm_taxemiMkr(t,regi,emiMkt)$(t.val gt ttot2.val) + pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot2.val) = ( - sum(ttot3, pm_taxCO2eq(ttot3,regi)$(ttot3.val eq ttot2.val - 5)) * 1.0125**(t.val-ttot2.val) * max(2100 - t.val, 0) - + 30 * sm_DptCO2_2_TDpGtC * 1.0125**(t.val-2030) * min(t.val - 2030, 70) - )/70; + sum(ttot3, pm_taxemiMkt(ttot3,regi,emiMkt)$(ttot3.val eq ttot2.val)) * 1.0125**(t.val-ttot2.val) * max(2100 - t.val, 0) + + 30 * sm_DptCO2_2_TDpGtC * 1.0125**(t.val-2030) * min(t.val - ttot2.val, 2100 - ttot2.val) + )/(2100 - ttot2.val); *** as a minimum, have linear price increase starting from 1$ in 2030 - pm_taxemiMkr(t,regi,emiMkr)$(t.val gt ttot2.val) = max(pm_taxemiMkr(t,regi,emiMkr), 1 * sm_DptCO2_2_TDpGtC * (1+(t.val-2030)*9/7)); + pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot2.val) = max(pm_taxemiMkt(t,regi,emiMkt), 1 * sm_DptCO2_2_TDpGtC * (1+(t.val-2030)*9/7)); $else pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot2.val) = pm_taxemiMkt(ttot2,regi,emiMkt) + (%cm_postTargetIncrease%*sm_DptCO2_2_TDpGtC)*(t.val-ttot2.val); $endif From 3779850dbba4d5a93e448f472d806f426a9df582 Mon Sep 17 00:00:00 2001 From: orichters Date: Tue, 9 May 2023 13:10:05 +0200 Subject: [PATCH 5/5] outcomment post-p47_nextConvergencePeriod line to avoid fails for NDC, NPi --- main.gms | 4 ++-- modules/47_regipol/regiCarbonPrice/postsolve.gms | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/main.gms b/main.gms index f503e49280..110a498d7c 100755 --- a/main.gms +++ b/main.gms @@ -1086,12 +1086,12 @@ parameter *' * (any other number) limit of gas demand from 2025 on in Germany in EJ/yr *' parameter - c_SlackMultiplier "Muliplicative factor to up/downscale the slack size for v_changeProdStartyearSlack" + c_SlackMultiplier "Multiplicative factor to up/downscale the slack size for v_changeProdStartyearSlack" ; c_SlackMultiplier = 1; !! def 1 *' parameter - c_changeProdCost "Muliplicative factor to up/downscale the costs for vm_changeProdStartyearCost" + c_changeProdCost "Multiplicative factor to up/downscale the costs for vm_changeProdStartyearCost" ; c_changeProdCost = 5; !! def 5 *' diff --git a/modules/47_regipol/regiCarbonPrice/postsolve.gms b/modules/47_regipol/regiCarbonPrice/postsolve.gms index 2f81211097..fcaa91b48d 100644 --- a/modules/47_regipol/regiCarbonPrice/postsolve.gms +++ b/modules/47_regipol/regiCarbonPrice/postsolve.gms @@ -275,7 +275,7 @@ loop(ext_regi$regiEmiMktTarget(ext_regi), loop(ttot3$(ttot3.val eq p47_nextConvergencePeriod(ext_regi)), !! ttot2 = beginning of slope; ttot3 = end of slope pm_taxemiMkt(ttot3,regi,emiMkt) = p47_averagetaxemiMkt(ttot3,regi); pm_taxemiMkt(t,regi,emiMkt)$((t.val gt ttot2.val) AND (t.val lt ttot3.val)) = pm_taxemiMkt(ttot2,regi,emiMkt) + ((pm_taxemiMkt(ttot3,regi,emiMkt) - pm_taxemiMkt(ttot2,regi,emiMkt))/(ttot3.val-ttot2.val))*(t.val-ttot2.val); !! price in between current target year and next target year - pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot3.val) = pm_taxemiMkt(ttot3,regi,emiMkt) + (cm_postTargetIncrease*sm_DptCO2_2_TDpGtC)*(t.val-ttot3.val); !! price after next target year +*** pm_taxemiMkt(t,regi,emiMkt)$(t.val gt ttot3.val) = pm_taxemiMkt(ttot3,regi,emiMkt) + (cm_postTargetIncrease*sm_DptCO2_2_TDpGtC)*(t.val-ttot3.val); !! price after next target year -- this line needs to be reinstated, covering the options that cm_postTargetIncrease is off, NPi or NDC ); else *** behavior after terminal year: fixed price (cm_postTargetIncrease=off or 0), global convergence (cm_postTargetIncrease=NPi or NDC), or fixed year increase (cm_postTargetIncrease €/tCO2 increase per year)