From 97a0b63c8ad2cae7d6f4760b0119e37956877189 Mon Sep 17 00:00:00 2001 From: rahelMA Date: Fri, 6 Feb 2026 08:48:06 +0100 Subject: [PATCH 1/5] new realization + elasticity adj --- modules/41_emicapregi/TradingOnRef/bounds.gms | 29 ++++++++++++++ .../41_emicapregi/TradingOnRef/datainput.gms | 38 +++++++++++++++++++ .../TradingOnRef/declarations.gms | 23 +++++++++++ .../41_emicapregi/TradingOnRef/not_used.txt | 14 +++++++ .../TradingOnRef/realization.gms | 17 +++++++++ modules/41_emicapregi/module.gms | 1 + modules/80_optimization/nash/datainput.gms | 6 +-- modules/80_optimization/nash/equations.gms | 2 +- modules/80_optimization/nash/preloop.gms | 2 +- 9 files changed, 127 insertions(+), 5 deletions(-) create mode 100755 modules/41_emicapregi/TradingOnRef/bounds.gms create mode 100755 modules/41_emicapregi/TradingOnRef/datainput.gms create mode 100755 modules/41_emicapregi/TradingOnRef/declarations.gms create mode 100755 modules/41_emicapregi/TradingOnRef/not_used.txt create mode 100755 modules/41_emicapregi/TradingOnRef/realization.gms diff --git a/modules/41_emicapregi/TradingOnRef/bounds.gms b/modules/41_emicapregi/TradingOnRef/bounds.gms new file mode 100755 index 0000000000..35c24768e6 --- /dev/null +++ b/modules/41_emicapregi/TradingOnRef/bounds.gms @@ -0,0 +1,29 @@ +*** | (C) 2006-2024 Potsdam Institute for Climate Impact Research (PIK) +*** | authors, and contributors see CITATION.cff file. This file is part +*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +*** | AGPL-3.0, you are granted additional permissions described in the +*** | REMIND License Exception, version 1.0 (see LICENSE file). +*** | Contact: remind@pik-potsdam.de +*** SOF ./modules/41_emicapregi/AbilityToPay/bounds.gms +*** calculate emission cap in absolute terms +vm_perm.fx(t,regi) = p41_co2eq(t,regi); + +display vm_perm.up; + +*** disactivate permit trade +if(cm_permittradescen eq 2, +vm_Xport.fx(t,regi,"perm") = 0; +vm_Mport.fx(t,regi,"perm") = 0; +); +*** limited permit trade: limit in terms of share of allocated permits +if(cm_permittradescen eq 3, +vm_Xport.up(t,regi,"perm")$(t.val le 2060)=abs(20/100*(p41_co2eq(t,regi))); +vm_Xport.up(t,regi,"perm")$(t.val gt 2060)=0; +vm_Xport.up(t,regi,"perm")$(t.val le 2025)=0; +vm_Xport.lo(t,regi,"perm") = 0; +vm_Mport.up(t,regi,"perm")$(t.val le 2060)=abs(20/100*(p41_co2eq(t,regi))); +vm_Mport.up(t,regi,"perm")$(t.val gt 2060)=0; +vm_Mport.up(t,regi,"perm")$(t.val le 2025)=0; +vm_Mport.lo(t,regi,"perm") = 0; +); +*** EOF ./modules/41_emicapregi/AbilityToPay/bounds.gms diff --git a/modules/41_emicapregi/TradingOnRef/datainput.gms b/modules/41_emicapregi/TradingOnRef/datainput.gms new file mode 100755 index 0000000000..ebe846937d --- /dev/null +++ b/modules/41_emicapregi/TradingOnRef/datainput.gms @@ -0,0 +1,38 @@ +*** | (C) 2006-2024 Potsdam Institute for Climate Impact Research (PIK) +*** | authors, and contributors see CITATION.cff file. This file is part +*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +*** | AGPL-3.0, you are granted additional permissions described in the +*** | REMIND License Exception, version 1.0 (see LICENSE file). +*** | Contact: remind@pik-potsdam.de +*** SOF ./modules/41_emicapregi/AbilityToPay/datainput.gms + + +*** read in data of cost-optimal reference climate policy run + +Execute_Loadpoint "input_ref" p41_co2eq_in = vm_emiAll.l; +p41_co2eq(t, regi) = p41_co2eq_in(t,regi,"co2"); + + +*** read in data of baseline run +Execute_Loadpoint "input_bau" p41_co2eq_bau = vm_co2eq.l; + + +*** Step 1: calculate regional mitigation based on cost-optimal and baseline emissions, and per-capita gdp (pm_gdp is in MER, pm_shPPPMER is the MER-PPP multiplier, 1 for USA, and ~0.3 for IND) +***p41_precorrection_reduction(t,regi) = (pm_gdp(t,regi)/pm_shPPPMER(regi)/pm_pop(t,regi)/(sum(regi2,pm_gdp(t,regi2)/pm_shPPPMER(regi2))/sum(regi2,pm_pop(t,regi2))))** 1/3 +*** *sum(regi2,p41_co2eq_bau(t,regi2)-p41_co2eq(t,regi2))/sum(regi2,p41_co2eq_bau(t,regi2)) +*** *p41_co2eq_bau(t,regi); +*** Step 2: Calculate correction factor +***p41_correct_factor(t) = sum(regi2,p41_precorrection_reduction(t,regi2))/sum(regi2,p41_co2eq_bau(t,regi2)-p41_co2eq(t,regi2)); + +*** Step 3 is directly done in modules/41_emicapregi/AbilityToPay/bounds.gms +*** vm_perm.fx(t,regi) = p41_co2eq_bau(t,regi) - p41_precorrection_reduction(t,regi)/p41_correct_factor(t); + +*** initialization of pm_shPermit +pm_shPerm(t,regi) = p41_co2eq(t,regi)/sum(regi2, p41_co2eq(t,regi2)); + +pm_emicapglob(t) = sum(regi, p41_co2eq(t,regi)); + +*pm_shPerm(t,regi) = p41_emicapregi(t,regi)/sum(regi2, p41_emicapregi(t,regi2)); +*pm_emicapglob(t) = sum(regi, p41_emicapregi(t,regi)); + +*** EOF ./modules/41_emicapregi/AbilityToPay/datainput.gms diff --git a/modules/41_emicapregi/TradingOnRef/declarations.gms b/modules/41_emicapregi/TradingOnRef/declarations.gms new file mode 100755 index 0000000000..60ea644bd8 --- /dev/null +++ b/modules/41_emicapregi/TradingOnRef/declarations.gms @@ -0,0 +1,23 @@ +*** | (C) 2006-2024 Potsdam Institute for Climate Impact Research (PIK) +*** | authors, and contributors see CITATION.cff file. This file is part +*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +*** | AGPL-3.0, you are granted additional permissions described in the +*** | REMIND License Exception, version 1.0 (see LICENSE file). +*** | Contact: remind@pik-potsdam.de +*** SOF ./modules/41_emicapregi/AbilityToPay/declarations.gms + +variables +vm_perm(ttot,all_regi) "emission allowances [GtCeq]" +; + +parameter +pm_shPerm(tall, all_regi) "emission permit shares [share]" +pm_emicapglob(tall) "global emission cap [GtC]" +p41_precorrection_reduction(tall,all_regi) "reduction as calculated from 3rd root calculation, uncorrected " +p41_correct_factor(tall) "correction factor so that global pathway matches" +p41_co2eq_in(ttot,all_regi,all_enty) "emissions from cost-optimal reference run" +p41_co2eq(ttot,all_regi) "emissions from cost-optimal reference run" +p41_co2eq_bau(ttot,all_regi) "emissions from no-policy baseline run" +; + +*** EOF ./modules/41_emicapregi/AbilityToPay/declarations.gms diff --git a/modules/41_emicapregi/TradingOnRef/not_used.txt b/modules/41_emicapregi/TradingOnRef/not_used.txt new file mode 100755 index 0000000000..c3c03b1e35 --- /dev/null +++ b/modules/41_emicapregi/TradingOnRef/not_used.txt @@ -0,0 +1,14 @@ +# | (C) 2006-2024 Potsdam Institute for Climate Impact Research (PIK) +# | authors, and contributors see CITATION.cff file. This file is part +# | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +# | AGPL-3.0, you are granted additional permissions described in the +# | REMIND License Exception, version 1.0 (see LICENSE file). +# | Contact: remind@pik-potsdam.de +name, type, reason +sm_budgetCO2eqGlob, parameter, ??? +pm_gdp_gdx, parameter, ??? +pm_budgetCO2eq, parameter, ??? +vm_co2eqGlob,input,questionnaire +cm_emiscen,input,questionnaire +p41_precorrection_reduction, parameter, ??? +p41_correct_factor, parameter, ??? diff --git a/modules/41_emicapregi/TradingOnRef/realization.gms b/modules/41_emicapregi/TradingOnRef/realization.gms new file mode 100755 index 0000000000..05272d4483 --- /dev/null +++ b/modules/41_emicapregi/TradingOnRef/realization.gms @@ -0,0 +1,17 @@ +*** | (C) 2006-2024 Potsdam Institute for Climate Impact Research (PIK) +*** | authors, and contributors see CITATION.cff file. This file is part +*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of +*** | AGPL-3.0, you are granted additional permissions described in the +*** | REMIND License Exception, version 1.0 (see LICENSE file). +*** | Contact: remind@pik-potsdam.de +*** SOF ./modules/41_emicapregi/AbilityToPay/realization.gms + +*' @description +*' Emission caps/permits are allocated according to the ability to pay principle + +*####################### R SECTION START (PHASES) ############################## +$Ifi "%phase%" == "declarations" $include "./modules/41_emicapregi/TradingOnRef/declarations.gms" +$Ifi "%phase%" == "datainput" $include "./modules/41_emicapregi/TradingOnRef/datainput.gms" +$Ifi "%phase%" == "bounds" $include "./modules/41_emicapregi/TradingOnRef/bounds.gms" +*######################## R SECTION END (PHASES) ############################### +*** EOF ./modules/41_emicapregi/AbilityToPay/realization.gms diff --git a/modules/41_emicapregi/module.gms b/modules/41_emicapregi/module.gms index e8e89b5406..14ae2e4d0e 100644 --- a/modules/41_emicapregi/module.gms +++ b/modules/41_emicapregi/module.gms @@ -26,6 +26,7 @@ $Ifi "%emicapregi%" == "CandC" $include "./modules/41_emicapregi/CandC/realizati $Ifi "%emicapregi%" == "GDPint" $include "./modules/41_emicapregi/GDPint/realization.gms" $Ifi "%emicapregi%" == "POPint" $include "./modules/41_emicapregi/POPint/realization.gms" $Ifi "%emicapregi%" == "PerCapitaConvergence" $include "./modules/41_emicapregi/PerCapitaConvergence/realization.gms" +$Ifi "%emicapregi%" == "TradingOnRef" $include "./modules/41_emicapregi/TradingOnRef/realization.gms" $Ifi "%emicapregi%" == "exog" $include "./modules/41_emicapregi/exog/realization.gms" $Ifi "%emicapregi%" == "none" $include "./modules/41_emicapregi/none/realization.gms" *###################### R SECTION END (MODULETYPES) ############################ diff --git a/modules/80_optimization/nash/datainput.gms b/modules/80_optimization/nash/datainput.gms index 2588cb4055..c24ea97c16 100644 --- a/modules/80_optimization/nash/datainput.gms +++ b/modules/80_optimization/nash/datainput.gms @@ -37,7 +37,7 @@ cm_iteration_max = 100; ***convergences thresholds - very coarse p80_surplusMaxTolerance(tradePe) = 2* 1.5 * sm_EJ_2_TWa; !! convert EJ/yr into internal unit TWa p80_surplusMaxTolerance("good") = 2* 100/1000; !! in internal unit, trillion Dollar - p80_surplusMaxTolerance("perm") = 2* 300 * 12/44 / 1000; !! convert MtCO2eq into internal unit GtC + p80_surplusMaxTolerance("perm") = 3* 300 * 12/44 / 1000; !! convert MtCO2eq into internal unit GtC ); ); @@ -54,12 +54,12 @@ p80_etaXp("perm") = 0.2; *LB* parameter for Nash price algorithm between different iterations p80_etaLT(trade) = 0; -p80_etaLT("perm") = 0.03; +p80_etaLT("perm") = 0.04; ***These parameters are pretty sensitive. If market surpluses diverge, try higher values (up to 1). If surpluses oscillate, try lower values. p80_etaST(tradePe) = 0.3; p80_etaST("good") = 0.25; -p80_etaST("perm") = 0.3; +p80_etaST("perm") = 0.8; $ifi %banking% == "banking" p80_etaST("perm") = 0.2; !! in banking mode, the permit market reacts more sensitively. $ifi %emicapregi% == "budget" p80_etaST("perm") = 0.25; !! in budget mode, the permit market reacts more sensitively. diff --git a/modules/80_optimization/nash/equations.gms b/modules/80_optimization/nash/equations.gms index 8bc6b50d25..b7d46b2781 100644 --- a/modules/80_optimization/nash/equations.gms +++ b/modules/80_optimization/nash/equations.gms @@ -44,7 +44,7 @@ q80_costAdjNash(ttot,regi)$( ttot.val ge cm_startyear ) .. ; *' link between permit budget and emission budget -q80_budgetPermRestr(regi)$(cm_emiscen=6) .. +q80_budgetPermRestr(regi)$(cm_emiscen=6 OR cm_emiscen = 4) .. sum(ttot$(ttot.val lt sm_endBudgetCO2eq and ttot.val ge cm_startyear), pm_ts(ttot)* vm_perm(ttot,regi)) + sum(ttot$(ttot.val eq sm_endBudgetCO2eq),pm_ts(ttot)/2 * (vm_perm(ttot,regi))) =l= pm_budgetCO2eq(regi) - sum(ttot $((ttot.val ge 2005) and (ttot.val lt cm_startyear)), pm_ts(ttot)* vm_co2eq(ttot,regi)); diff --git a/modules/80_optimization/nash/preloop.gms b/modules/80_optimization/nash/preloop.gms index 9cf0c48be1..047e3b0e1c 100644 --- a/modules/80_optimization/nash/preloop.gms +++ b/modules/80_optimization/nash/preloop.gms @@ -65,7 +65,7 @@ if(p80_Mport0("2005",regi,tradePe) eq NA, p80_Mport0("2005",regi,tradePe) = 0); if((cm_emiscen ne 1) and (cm_emiscen ne 9) and (smax(t,pm_pvp(t,"perm"))) eq 0, loop(ttot$(ttot.val ge 2005), ***this is a 30$/tCo2eq in 2020 trajectory: - pm_pvp(ttot,"perm") = 0.11*1.05**(ttot.val-2020) * pm_pvp(ttot,"good"); + pm_pvp(ttot,"perm") = 0.18*1.05**(ttot.val-2020) * pm_pvp(ttot,"good"); ); pm_pvp("2005","perm")=0; ); From ba18b2b013bdf34292ec397f511ebae0364d04f2 Mon Sep 17 00:00:00 2001 From: rahelMA Date: Thu, 12 Feb 2026 10:38:46 +0100 Subject: [PATCH 2/5] switches for restricted permit trading --- main.gms | 13 ++++++++++++- modules/41_emicapregi/TradingOnRef/bounds.gms | 8 ++++---- modules/41_emicapregi/TradingOnRef/datainput.gms | 13 ------------- modules/41_emicapregi/TradingOnRef/realization.gms | 11 +++++++++-- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/main.gms b/main.gms index 1b15f37a62..af90cc1f40 100755 --- a/main.gms +++ b/main.gms @@ -817,7 +817,18 @@ parameter cm_permittradescen = 1; !! def = 1 !! regexp = [1-3] *' * (1): full permit trade (no restrictions) *' * (2): no permit trade (only domestic mitigation) -*' * (3): limited trade (certain percentage of GDP) +*' * (3): limited trade (certain percentage of permits) +*' +parameter + cm_pemittradefinalyr "Year until permit trading is allowed" +; + cm_pemittradefinalyr = 2060; !! def = 2060 +*' + +parameter + cm_pemittraderatio "Percentage of restricted permit trading" +; + cm_pemittraderatio = 0.2; !! def = 0.2 *' parameter cm_rentdiscoil "[grades2poly] discount factor for the oil rent" diff --git a/modules/41_emicapregi/TradingOnRef/bounds.gms b/modules/41_emicapregi/TradingOnRef/bounds.gms index 35c24768e6..a414ffa85f 100755 --- a/modules/41_emicapregi/TradingOnRef/bounds.gms +++ b/modules/41_emicapregi/TradingOnRef/bounds.gms @@ -17,12 +17,12 @@ vm_Mport.fx(t,regi,"perm") = 0; ); *** limited permit trade: limit in terms of share of allocated permits if(cm_permittradescen eq 3, -vm_Xport.up(t,regi,"perm")$(t.val le 2060)=abs(20/100*(p41_co2eq(t,regi))); -vm_Xport.up(t,regi,"perm")$(t.val gt 2060)=0; +vm_Xport.up(t,regi,"perm")$(t.val le cm_pemittradefinalyr)=abs(cm_pemittraderatio*(p41_co2eq(t,regi))); +vm_Xport.up(t,regi,"perm")$(t.val gt cm_pemittradefinalyr)=0; vm_Xport.up(t,regi,"perm")$(t.val le 2025)=0; vm_Xport.lo(t,regi,"perm") = 0; -vm_Mport.up(t,regi,"perm")$(t.val le 2060)=abs(20/100*(p41_co2eq(t,regi))); -vm_Mport.up(t,regi,"perm")$(t.val gt 2060)=0; +vm_Mport.up(t,regi,"perm")$(t.val le cm_pemittradefinalyr)=abs(cm_pemittraderatio*(p41_co2eq(t,regi))); +vm_Mport.up(t,regi,"perm")$(t.val gt cm_pemittradefinalyr)=0; vm_Mport.up(t,regi,"perm")$(t.val le 2025)=0; vm_Mport.lo(t,regi,"perm") = 0; ); diff --git a/modules/41_emicapregi/TradingOnRef/datainput.gms b/modules/41_emicapregi/TradingOnRef/datainput.gms index ebe846937d..0400b10923 100755 --- a/modules/41_emicapregi/TradingOnRef/datainput.gms +++ b/modules/41_emicapregi/TradingOnRef/datainput.gms @@ -17,22 +17,9 @@ p41_co2eq(t, regi) = p41_co2eq_in(t,regi,"co2"); Execute_Loadpoint "input_bau" p41_co2eq_bau = vm_co2eq.l; -*** Step 1: calculate regional mitigation based on cost-optimal and baseline emissions, and per-capita gdp (pm_gdp is in MER, pm_shPPPMER is the MER-PPP multiplier, 1 for USA, and ~0.3 for IND) -***p41_precorrection_reduction(t,regi) = (pm_gdp(t,regi)/pm_shPPPMER(regi)/pm_pop(t,regi)/(sum(regi2,pm_gdp(t,regi2)/pm_shPPPMER(regi2))/sum(regi2,pm_pop(t,regi2))))** 1/3 -*** *sum(regi2,p41_co2eq_bau(t,regi2)-p41_co2eq(t,regi2))/sum(regi2,p41_co2eq_bau(t,regi2)) -*** *p41_co2eq_bau(t,regi); -*** Step 2: Calculate correction factor -***p41_correct_factor(t) = sum(regi2,p41_precorrection_reduction(t,regi2))/sum(regi2,p41_co2eq_bau(t,regi2)-p41_co2eq(t,regi2)); - -*** Step 3 is directly done in modules/41_emicapregi/AbilityToPay/bounds.gms -*** vm_perm.fx(t,regi) = p41_co2eq_bau(t,regi) - p41_precorrection_reduction(t,regi)/p41_correct_factor(t); - *** initialization of pm_shPermit pm_shPerm(t,regi) = p41_co2eq(t,regi)/sum(regi2, p41_co2eq(t,regi2)); - pm_emicapglob(t) = sum(regi, p41_co2eq(t,regi)); -*pm_shPerm(t,regi) = p41_emicapregi(t,regi)/sum(regi2, p41_emicapregi(t,regi2)); -*pm_emicapglob(t) = sum(regi, p41_emicapregi(t,regi)); *** EOF ./modules/41_emicapregi/AbilityToPay/datainput.gms diff --git a/modules/41_emicapregi/TradingOnRef/realization.gms b/modules/41_emicapregi/TradingOnRef/realization.gms index 05272d4483..3ab46225aa 100755 --- a/modules/41_emicapregi/TradingOnRef/realization.gms +++ b/modules/41_emicapregi/TradingOnRef/realization.gms @@ -6,8 +6,15 @@ *** | Contact: remind@pik-potsdam.de *** SOF ./modules/41_emicapregi/AbilityToPay/realization.gms -*' @description -*' Emission caps/permits are allocated according to the ability to pay principle +*' @description: Emission caps/permits are allocated according to a reference run +*' There are three different trade patterns currently available. +*' cm_permittradescen = 1; !! def = 1 !! regexp = [1-3] +*' * (1): full permit trade (no restrictions) +*' * (2): no permit trade (only domestic mitigation) +*' * (3): limited trade (certain percentage of regional allowances) +*' for limited trade use cm_pemittradefinalyr to set the final year until permit trading is allowed +*' with cm_pemittraderatio set the percentage of allowed trade + *####################### R SECTION START (PHASES) ############################## $Ifi "%phase%" == "declarations" $include "./modules/41_emicapregi/TradingOnRef/declarations.gms" From f4af591de76d622c9c25f1ca179e781fe4429d01 Mon Sep 17 00:00:00 2001 From: rahelMA Date: Thu, 12 Feb 2026 14:09:02 +0100 Subject: [PATCH 3/5] cleaning not used --- modules/41_emicapregi/AbilityToPay/not_used.txt | 2 ++ modules/41_emicapregi/CandC/not_used.txt | 2 ++ modules/41_emicapregi/GDPint/not_used.txt | 2 ++ modules/41_emicapregi/POPint/not_used.txt | 2 ++ modules/41_emicapregi/PerCapitaConvergence/not_used.txt | 2 ++ modules/41_emicapregi/TradingOnRef/declarations.gms | 2 -- modules/41_emicapregi/TradingOnRef/not_used.txt | 3 +++ modules/41_emicapregi/exog/not_used.txt | 2 ++ modules/41_emicapregi/none/not_used.txt | 2 ++ 9 files changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/41_emicapregi/AbilityToPay/not_used.txt b/modules/41_emicapregi/AbilityToPay/not_used.txt index 009a793d19..479771833d 100644 --- a/modules/41_emicapregi/AbilityToPay/not_used.txt +++ b/modules/41_emicapregi/AbilityToPay/not_used.txt @@ -10,3 +10,5 @@ pm_gdp_gdx, parameter, ??? pm_budgetCO2eq, parameter, ??? vm_co2eqGlob,input,questionnaire cm_emiscen,input,questionnaire +cm_pemittradefinalyr, input, ??? +cm_pemittraderatio, input, ??? diff --git a/modules/41_emicapregi/CandC/not_used.txt b/modules/41_emicapregi/CandC/not_used.txt index e7413e8496..9553ed69e4 100644 --- a/modules/41_emicapregi/CandC/not_used.txt +++ b/modules/41_emicapregi/CandC/not_used.txt @@ -13,3 +13,5 @@ pm_budgetCO2eq, parameter, ??? pm_shPPPMER,input,questionnaire pm_gdp,input,questionnaire cm_permittradescen,input,questionnaire +cm_pemittradefinalyr, input, ??? +cm_pemittraderatio, input, ??? diff --git a/modules/41_emicapregi/GDPint/not_used.txt b/modules/41_emicapregi/GDPint/not_used.txt index 22f931e772..36a64e4694 100644 --- a/modules/41_emicapregi/GDPint/not_used.txt +++ b/modules/41_emicapregi/GDPint/not_used.txt @@ -13,3 +13,5 @@ pm_budgetCO2eq, parameter, ??? pm_shPPPMER,input,questionnaire pm_gdp,input,questionnaire cm_permittradescen,input,questionnaire +cm_pemittradefinalyr, input, ??? +cm_pemittraderatio, input, ??? diff --git a/modules/41_emicapregi/POPint/not_used.txt b/modules/41_emicapregi/POPint/not_used.txt index 1f082f491d..4f518d993f 100644 --- a/modules/41_emicapregi/POPint/not_used.txt +++ b/modules/41_emicapregi/POPint/not_used.txt @@ -11,3 +11,5 @@ vm_Mport,input,questionnaire pm_shPPPMER,input,questionnaire pm_gdp,input,questionnaire cm_permittradescen,input,questionnaire +cm_pemittradefinalyr, input, ??? +cm_pemittraderatio, input, ??? \ No newline at end of file diff --git a/modules/41_emicapregi/PerCapitaConvergence/not_used.txt b/modules/41_emicapregi/PerCapitaConvergence/not_used.txt index 78c95ab216..e11f91edf2 100644 --- a/modules/41_emicapregi/PerCapitaConvergence/not_used.txt +++ b/modules/41_emicapregi/PerCapitaConvergence/not_used.txt @@ -12,3 +12,5 @@ vm_co2eqGlob,input,questionnaire pm_shPPPMER,input,questionnaire pm_gdp,input,questionnaire cm_emiscen,input,questionnaire +cm_pemittradefinalyr, input, ??? +cm_pemittraderatio, input, ??? \ No newline at end of file diff --git a/modules/41_emicapregi/TradingOnRef/declarations.gms b/modules/41_emicapregi/TradingOnRef/declarations.gms index 60ea644bd8..6d050ace1a 100755 --- a/modules/41_emicapregi/TradingOnRef/declarations.gms +++ b/modules/41_emicapregi/TradingOnRef/declarations.gms @@ -13,8 +13,6 @@ vm_perm(ttot,all_regi) "emission allowances [GtCeq]" parameter pm_shPerm(tall, all_regi) "emission permit shares [share]" pm_emicapglob(tall) "global emission cap [GtC]" -p41_precorrection_reduction(tall,all_regi) "reduction as calculated from 3rd root calculation, uncorrected " -p41_correct_factor(tall) "correction factor so that global pathway matches" p41_co2eq_in(ttot,all_regi,all_enty) "emissions from cost-optimal reference run" p41_co2eq(ttot,all_regi) "emissions from cost-optimal reference run" p41_co2eq_bau(ttot,all_regi) "emissions from no-policy baseline run" diff --git a/modules/41_emicapregi/TradingOnRef/not_used.txt b/modules/41_emicapregi/TradingOnRef/not_used.txt index c3c03b1e35..0913d7de02 100755 --- a/modules/41_emicapregi/TradingOnRef/not_used.txt +++ b/modules/41_emicapregi/TradingOnRef/not_used.txt @@ -12,3 +12,6 @@ vm_co2eqGlob,input,questionnaire cm_emiscen,input,questionnaire p41_precorrection_reduction, parameter, ??? p41_correct_factor, parameter, ??? +pm_shPPPMER,input,questionnaire +pm_pop, parameter, ??? +pm_gdp,input,questionnaire \ No newline at end of file diff --git a/modules/41_emicapregi/exog/not_used.txt b/modules/41_emicapregi/exog/not_used.txt index ad24171408..665dc85d89 100644 --- a/modules/41_emicapregi/exog/not_used.txt +++ b/modules/41_emicapregi/exog/not_used.txt @@ -16,3 +16,5 @@ cm_emiscen, switch, ??? pm_shPPPMER,input,questionnair pm_gdp,input,questionnaire cm_permittradescen,input,questionnaire +cm_pemittradefinalyr, input, ??? +cm_pemittraderatio, input, ??? diff --git a/modules/41_emicapregi/none/not_used.txt b/modules/41_emicapregi/none/not_used.txt index f08fbec934..55be269068 100644 --- a/modules/41_emicapregi/none/not_used.txt +++ b/modules/41_emicapregi/none/not_used.txt @@ -14,3 +14,5 @@ cm_emiscen, switch, ??? pm_shPPPMER,input,questionnaire pm_gdp,input,questionnaire cm_permittradescen,input,questionnaire +cm_pemittradefinalyr, input, ??? +cm_pemittraderatio, input, ??? From 3b0ad2ab551439c5d054040e9f7aa8bf11005474 Mon Sep 17 00:00:00 2001 From: rahelMA Date: Mon, 16 Feb 2026 15:52:11 +0100 Subject: [PATCH 4/5] code cleaning --- main.gms | 8 ++++---- modules/41_emicapregi/TradingOnRef/bounds.gms | 18 +++++++----------- .../41_emicapregi/TradingOnRef/datainput.gms | 11 ++++------- .../TradingOnRef/declarations.gms | 5 ++--- .../41_emicapregi/TradingOnRef/not_used.txt | 3 ++- .../41_emicapregi/TradingOnRef/realization.gms | 4 ++-- modules/80_optimization/nash/preloop.gms | 4 ++-- 7 files changed, 23 insertions(+), 30 deletions(-) diff --git a/main.gms b/main.gms index af90cc1f40..819bdc4ff6 100755 --- a/main.gms +++ b/main.gms @@ -820,15 +820,15 @@ parameter *' * (3): limited trade (certain percentage of permits) *' parameter - cm_pemittradefinalyr "Year until permit trading is allowed" + cm_permitTradeFinalYr "Year until permit trading is allowed" ; - cm_pemittradefinalyr = 2060; !! def = 2060 + cm_permitTradeFinalYr = 2100; !! def = 2100 *' parameter - cm_pemittraderatio "Percentage of restricted permit trading" + cm_permitTradeRatio "Percentage of restricted permit trading" ; - cm_pemittraderatio = 0.2; !! def = 0.2 + cm_permitTradeRatio = 0.2; !! def = 0.2 *' parameter cm_rentdiscoil "[grades2poly] discount factor for the oil rent" diff --git a/modules/41_emicapregi/TradingOnRef/bounds.gms b/modules/41_emicapregi/TradingOnRef/bounds.gms index a414ffa85f..b186a9c62b 100755 --- a/modules/41_emicapregi/TradingOnRef/bounds.gms +++ b/modules/41_emicapregi/TradingOnRef/bounds.gms @@ -4,26 +4,22 @@ *** | AGPL-3.0, you are granted additional permissions described in the *** | REMIND License Exception, version 1.0 (see LICENSE file). *** | Contact: remind@pik-potsdam.de -*** SOF ./modules/41_emicapregi/AbilityToPay/bounds.gms +*** SOF ./modules/41_emicapregi/TradingOnRef/bounds.gms *** calculate emission cap in absolute terms vm_perm.fx(t,regi) = p41_co2eq(t,regi); display vm_perm.up; -*** disactivate permit trade +*** deactivate permit trade if(cm_permittradescen eq 2, vm_Xport.fx(t,regi,"perm") = 0; vm_Mport.fx(t,regi,"perm") = 0; ); *** limited permit trade: limit in terms of share of allocated permits if(cm_permittradescen eq 3, -vm_Xport.up(t,regi,"perm")$(t.val le cm_pemittradefinalyr)=abs(cm_pemittraderatio*(p41_co2eq(t,regi))); -vm_Xport.up(t,regi,"perm")$(t.val gt cm_pemittradefinalyr)=0; -vm_Xport.up(t,regi,"perm")$(t.val le 2025)=0; -vm_Xport.lo(t,regi,"perm") = 0; -vm_Mport.up(t,regi,"perm")$(t.val le cm_pemittradefinalyr)=abs(cm_pemittraderatio*(p41_co2eq(t,regi))); -vm_Mport.up(t,regi,"perm")$(t.val gt cm_pemittradefinalyr)=0; -vm_Mport.up(t,regi,"perm")$(t.val le 2025)=0; -vm_Mport.lo(t,regi,"perm") = 0; +vm_Xport.fx(t,regi,"perm") = 0; +vm_Xport.up(t,regi,"perm") $ (t.val > 2025 and t.val <= cm_permitTradeFinalYr) = cm_permitTradeRatio * abs(p41_co2eq(t,regi)); +vm_Mport.fx(t,regi,"perm") = 0; +vm_Mport.up(t,regi,"perm") $ (t.val > 2025 and t.val <= cm_permitTradeFinalYr) = cm_permitTradeRatio * abs(p41_co2eq(t,regi)); ); -*** EOF ./modules/41_emicapregi/AbilityToPay/bounds.gms +*** EOF ./modules/41_emicapregi/TradingOnRef/bounds.gms diff --git a/modules/41_emicapregi/TradingOnRef/datainput.gms b/modules/41_emicapregi/TradingOnRef/datainput.gms index 0400b10923..6ca8b2bb39 100755 --- a/modules/41_emicapregi/TradingOnRef/datainput.gms +++ b/modules/41_emicapregi/TradingOnRef/datainput.gms @@ -4,22 +4,19 @@ *** | AGPL-3.0, you are granted additional permissions described in the *** | REMIND License Exception, version 1.0 (see LICENSE file). *** | Contact: remind@pik-potsdam.de -*** SOF ./modules/41_emicapregi/AbilityToPay/datainput.gms +*** SOF ./modules/41_emicapregi/TradingOnRef/datainput.gms *** read in data of cost-optimal reference climate policy run +*' load CO2 emissions from reference run to assing the allocates permits Execute_Loadpoint "input_ref" p41_co2eq_in = vm_emiAll.l; p41_co2eq(t, regi) = p41_co2eq_in(t,regi,"co2"); -*** read in data of baseline run -Execute_Loadpoint "input_bau" p41_co2eq_bau = vm_co2eq.l; - - *** initialization of pm_shPermit -pm_shPerm(t,regi) = p41_co2eq(t,regi)/sum(regi2, p41_co2eq(t,regi2)); pm_emicapglob(t) = sum(regi, p41_co2eq(t,regi)); +pm_shPerm(t,regi) = p41_co2eq(t,regi) / pm_emicapglob(t); -*** EOF ./modules/41_emicapregi/AbilityToPay/datainput.gms +*** EOF ./modules/41_emicapregi/TradingOnRef/datainput.gms diff --git a/modules/41_emicapregi/TradingOnRef/declarations.gms b/modules/41_emicapregi/TradingOnRef/declarations.gms index 6d050ace1a..37ad76b9ab 100755 --- a/modules/41_emicapregi/TradingOnRef/declarations.gms +++ b/modules/41_emicapregi/TradingOnRef/declarations.gms @@ -4,7 +4,7 @@ *** | AGPL-3.0, you are granted additional permissions described in the *** | REMIND License Exception, version 1.0 (see LICENSE file). *** | Contact: remind@pik-potsdam.de -*** SOF ./modules/41_emicapregi/AbilityToPay/declarations.gms +*** SOF ./modules/41_emicapregi/TradingOnRef/declarations.gms variables vm_perm(ttot,all_regi) "emission allowances [GtCeq]" @@ -15,7 +15,6 @@ pm_shPerm(tall, all_regi) "emission permit shares [share]" pm_emicapglob(tall) "global emission cap [GtC]" p41_co2eq_in(ttot,all_regi,all_enty) "emissions from cost-optimal reference run" p41_co2eq(ttot,all_regi) "emissions from cost-optimal reference run" -p41_co2eq_bau(ttot,all_regi) "emissions from no-policy baseline run" ; -*** EOF ./modules/41_emicapregi/AbilityToPay/declarations.gms +*** EOF ./modules/41_emicapregi/TradingOnRef/declarations.gms diff --git a/modules/41_emicapregi/TradingOnRef/not_used.txt b/modules/41_emicapregi/TradingOnRef/not_used.txt index 0913d7de02..0580ec5176 100755 --- a/modules/41_emicapregi/TradingOnRef/not_used.txt +++ b/modules/41_emicapregi/TradingOnRef/not_used.txt @@ -14,4 +14,5 @@ p41_precorrection_reduction, parameter, ??? p41_correct_factor, parameter, ??? pm_shPPPMER,input,questionnaire pm_pop, parameter, ??? -pm_gdp,input,questionnaire \ No newline at end of file +pm_gdp,input,questionnaire +p41_co2eq_bau, parameter, ??? \ No newline at end of file diff --git a/modules/41_emicapregi/TradingOnRef/realization.gms b/modules/41_emicapregi/TradingOnRef/realization.gms index 3ab46225aa..f1229f9770 100755 --- a/modules/41_emicapregi/TradingOnRef/realization.gms +++ b/modules/41_emicapregi/TradingOnRef/realization.gms @@ -4,7 +4,7 @@ *** | AGPL-3.0, you are granted additional permissions described in the *** | REMIND License Exception, version 1.0 (see LICENSE file). *** | Contact: remind@pik-potsdam.de -*** SOF ./modules/41_emicapregi/AbilityToPay/realization.gms +*** SOF ./modules/41_emicapregi/TradingOnRef/realization.gms *' @description: Emission caps/permits are allocated according to a reference run *' There are three different trade patterns currently available. @@ -21,4 +21,4 @@ $Ifi "%phase%" == "declarations" $include "./modules/41_emicapregi/TradingOnRef/ $Ifi "%phase%" == "datainput" $include "./modules/41_emicapregi/TradingOnRef/datainput.gms" $Ifi "%phase%" == "bounds" $include "./modules/41_emicapregi/TradingOnRef/bounds.gms" *######################## R SECTION END (PHASES) ############################### -*** EOF ./modules/41_emicapregi/AbilityToPay/realization.gms +*** EOF ./modules/41_emicapregi/TradingOnRef/realization.gms diff --git a/modules/80_optimization/nash/preloop.gms b/modules/80_optimization/nash/preloop.gms index 047e3b0e1c..6600873cd9 100644 --- a/modules/80_optimization/nash/preloop.gms +++ b/modules/80_optimization/nash/preloop.gms @@ -61,10 +61,10 @@ loop(regi, if(p80_Mport0("2005",regi,tradePe) eq NA, p80_Mport0("2005",regi,tradePe) = 0); );); -*AJS* starting policy runs from permit prices that are all zero doesnot work. start from 30$ price path instead +*AJS* starting policy runs from permit prices that are all zero doesnot work. start from 49$ price path instead if((cm_emiscen ne 1) and (cm_emiscen ne 9) and (smax(t,pm_pvp(t,"perm"))) eq 0, loop(ttot$(ttot.val ge 2005), -***this is a 30$/tCo2eq in 2020 trajectory: +***this is a 49$/tCo2eq in 2020 trajectory ([T$/GtC]. To get $/tCO2, multiply with 272: 0.18 T$/GtC = 48.96 $/tCO2): pm_pvp(ttot,"perm") = 0.18*1.05**(ttot.val-2020) * pm_pvp(ttot,"good"); ); pm_pvp("2005","perm")=0; From b711406ded45825ac71239049eb78a81e68be98f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20L=C3=A9cuyer?= Date: Mon, 2 Mar 2026 13:41:21 +0000 Subject: [PATCH 5/5] Implementing suggestions: renaming switches everywhere, using cm_permitTradeRatio instead of cm_permittradescen to describe the trading scenario --- main.gms | 8 ++++---- modules/41_emicapregi/AbilityToPay/not_used.txt | 4 ++-- modules/41_emicapregi/CandC/not_used.txt | 4 ++-- modules/41_emicapregi/GDPint/not_used.txt | 4 ++-- modules/41_emicapregi/POPint/not_used.txt | 4 ++-- .../PerCapitaConvergence/not_used.txt | 4 ++-- modules/41_emicapregi/TradingOnRef/bounds.gms | 14 ++++++-------- modules/41_emicapregi/TradingOnRef/not_used.txt | 3 ++- modules/41_emicapregi/TradingOnRef/realization.gms | 4 ++-- modules/41_emicapregi/exog/not_used.txt | 4 ++-- modules/41_emicapregi/none/not_used.txt | 4 ++-- 11 files changed, 28 insertions(+), 29 deletions(-) diff --git a/main.gms b/main.gms index 819bdc4ff6..93c97bee49 100755 --- a/main.gms +++ b/main.gms @@ -812,21 +812,21 @@ parameter *' * (3): all GHG excl CO2 emissions from LULUCF *' parameter - cm_permittradescen "scenario on permit trade" + cm_permittradescen "Scenario on permit trade, not used in the TradingOnRef realisation" ; cm_permittradescen = 1; !! def = 1 !! regexp = [1-3] *' * (1): full permit trade (no restrictions) *' * (2): no permit trade (only domestic mitigation) *' * (3): limited trade (certain percentage of permits) *' + parameter - cm_permitTradeFinalYr "Year until permit trading is allowed" + cm_permitTradeFinalYr "[TradingOnRef] Year until permit trading is allowed" ; cm_permitTradeFinalYr = 2100; !! def = 2100 *' - parameter - cm_permitTradeRatio "Percentage of restricted permit trading" + cm_permitTradeRatio "[TradingOnRef] Share of emissions allowed for permit trading between 0 and 1" ; cm_permitTradeRatio = 0.2; !! def = 0.2 *' diff --git a/modules/41_emicapregi/AbilityToPay/not_used.txt b/modules/41_emicapregi/AbilityToPay/not_used.txt index 479771833d..3131f6520b 100644 --- a/modules/41_emicapregi/AbilityToPay/not_used.txt +++ b/modules/41_emicapregi/AbilityToPay/not_used.txt @@ -10,5 +10,5 @@ pm_gdp_gdx, parameter, ??? pm_budgetCO2eq, parameter, ??? vm_co2eqGlob,input,questionnaire cm_emiscen,input,questionnaire -cm_pemittradefinalyr, input, ??? -cm_pemittraderatio, input, ??? +cm_permitTradeFinalYr, input, ??? +cm_permitTradeRatio, input, ??? diff --git a/modules/41_emicapregi/CandC/not_used.txt b/modules/41_emicapregi/CandC/not_used.txt index 9553ed69e4..b3699610aa 100644 --- a/modules/41_emicapregi/CandC/not_used.txt +++ b/modules/41_emicapregi/CandC/not_used.txt @@ -13,5 +13,5 @@ pm_budgetCO2eq, parameter, ??? pm_shPPPMER,input,questionnaire pm_gdp,input,questionnaire cm_permittradescen,input,questionnaire -cm_pemittradefinalyr, input, ??? -cm_pemittraderatio, input, ??? +cm_permitTradeFinalYr, input, ??? +cm_permitTradeRatio, input, ??? diff --git a/modules/41_emicapregi/GDPint/not_used.txt b/modules/41_emicapregi/GDPint/not_used.txt index 36a64e4694..4a39a3e606 100644 --- a/modules/41_emicapregi/GDPint/not_used.txt +++ b/modules/41_emicapregi/GDPint/not_used.txt @@ -13,5 +13,5 @@ pm_budgetCO2eq, parameter, ??? pm_shPPPMER,input,questionnaire pm_gdp,input,questionnaire cm_permittradescen,input,questionnaire -cm_pemittradefinalyr, input, ??? -cm_pemittraderatio, input, ??? +cm_permitTradeFinalYr, input, ??? +cm_permitTradeRatio, input, ??? diff --git a/modules/41_emicapregi/POPint/not_used.txt b/modules/41_emicapregi/POPint/not_used.txt index 4f518d993f..f3df1eafc1 100644 --- a/modules/41_emicapregi/POPint/not_used.txt +++ b/modules/41_emicapregi/POPint/not_used.txt @@ -11,5 +11,5 @@ vm_Mport,input,questionnaire pm_shPPPMER,input,questionnaire pm_gdp,input,questionnaire cm_permittradescen,input,questionnaire -cm_pemittradefinalyr, input, ??? -cm_pemittraderatio, input, ??? \ No newline at end of file +cm_permitTradeFinalYr, input, ??? +cm_permitTradeRatio, input, ??? \ No newline at end of file diff --git a/modules/41_emicapregi/PerCapitaConvergence/not_used.txt b/modules/41_emicapregi/PerCapitaConvergence/not_used.txt index e11f91edf2..7f60d3e45d 100644 --- a/modules/41_emicapregi/PerCapitaConvergence/not_used.txt +++ b/modules/41_emicapregi/PerCapitaConvergence/not_used.txt @@ -12,5 +12,5 @@ vm_co2eqGlob,input,questionnaire pm_shPPPMER,input,questionnaire pm_gdp,input,questionnaire cm_emiscen,input,questionnaire -cm_pemittradefinalyr, input, ??? -cm_pemittraderatio, input, ??? \ No newline at end of file +cm_permitTradeFinalYr, input, ??? +cm_permitTradeRatio, input, ??? \ No newline at end of file diff --git a/modules/41_emicapregi/TradingOnRef/bounds.gms b/modules/41_emicapregi/TradingOnRef/bounds.gms index b186a9c62b..ee62ca0773 100755 --- a/modules/41_emicapregi/TradingOnRef/bounds.gms +++ b/modules/41_emicapregi/TradingOnRef/bounds.gms @@ -5,21 +5,19 @@ *** | REMIND License Exception, version 1.0 (see LICENSE file). *** | Contact: remind@pik-potsdam.de *** SOF ./modules/41_emicapregi/TradingOnRef/bounds.gms + *** calculate emission cap in absolute terms vm_perm.fx(t,regi) = p41_co2eq(t,regi); display vm_perm.up; -*** deactivate permit trade -if(cm_permittradescen eq 2, vm_Xport.fx(t,regi,"perm") = 0; vm_Mport.fx(t,regi,"perm") = 0; -); -*** limited permit trade: limit in terms of share of allocated permits -if(cm_permittradescen eq 3, -vm_Xport.fx(t,regi,"perm") = 0; + +*** Only activate permit trade between 2030 and cm_permitTradeFinalYr +*** cm_permitTradeRatio determines the proportion of emissions that can be traded, +*** between 0 (no permit trade allowed) and 1 (all emissions can be traded) vm_Xport.up(t,regi,"perm") $ (t.val > 2025 and t.val <= cm_permitTradeFinalYr) = cm_permitTradeRatio * abs(p41_co2eq(t,regi)); -vm_Mport.fx(t,regi,"perm") = 0; vm_Mport.up(t,regi,"perm") $ (t.val > 2025 and t.val <= cm_permitTradeFinalYr) = cm_permitTradeRatio * abs(p41_co2eq(t,regi)); -); + *** EOF ./modules/41_emicapregi/TradingOnRef/bounds.gms diff --git a/modules/41_emicapregi/TradingOnRef/not_used.txt b/modules/41_emicapregi/TradingOnRef/not_used.txt index 0580ec5176..f8db314466 100755 --- a/modules/41_emicapregi/TradingOnRef/not_used.txt +++ b/modules/41_emicapregi/TradingOnRef/not_used.txt @@ -15,4 +15,5 @@ p41_correct_factor, parameter, ??? pm_shPPPMER,input,questionnaire pm_pop, parameter, ??? pm_gdp,input,questionnaire -p41_co2eq_bau, parameter, ??? \ No newline at end of file +p41_co2eq_bau, parameter, ??? +cm_permittradescen,input,replaced by cm_permitTradeRatio \ No newline at end of file diff --git a/modules/41_emicapregi/TradingOnRef/realization.gms b/modules/41_emicapregi/TradingOnRef/realization.gms index f1229f9770..86759e4cae 100755 --- a/modules/41_emicapregi/TradingOnRef/realization.gms +++ b/modules/41_emicapregi/TradingOnRef/realization.gms @@ -12,8 +12,8 @@ *' * (1): full permit trade (no restrictions) *' * (2): no permit trade (only domestic mitigation) *' * (3): limited trade (certain percentage of regional allowances) -*' for limited trade use cm_pemittradefinalyr to set the final year until permit trading is allowed -*' with cm_pemittraderatio set the percentage of allowed trade +*' for limited trade use cm_permitTradeFinalYr to set the final year until permit trading is allowed +*' with cm_permitTradeRatio set the percentage of allowed trade *####################### R SECTION START (PHASES) ############################## diff --git a/modules/41_emicapregi/exog/not_used.txt b/modules/41_emicapregi/exog/not_used.txt index 665dc85d89..5e9156d090 100644 --- a/modules/41_emicapregi/exog/not_used.txt +++ b/modules/41_emicapregi/exog/not_used.txt @@ -16,5 +16,5 @@ cm_emiscen, switch, ??? pm_shPPPMER,input,questionnair pm_gdp,input,questionnaire cm_permittradescen,input,questionnaire -cm_pemittradefinalyr, input, ??? -cm_pemittraderatio, input, ??? +cm_permitTradeFinalYr, input, ??? +cm_permitTradeRatio, input, ??? diff --git a/modules/41_emicapregi/none/not_used.txt b/modules/41_emicapregi/none/not_used.txt index 55be269068..2ae02ab04f 100644 --- a/modules/41_emicapregi/none/not_used.txt +++ b/modules/41_emicapregi/none/not_used.txt @@ -14,5 +14,5 @@ cm_emiscen, switch, ??? pm_shPPPMER,input,questionnaire pm_gdp,input,questionnaire cm_permittradescen,input,questionnaire -cm_pemittradefinalyr, input, ??? -cm_pemittraderatio, input, ??? +cm_permitTradeFinalYr, input, ??? +cm_permitTradeRatio, input, ???