From 035be5cf64915491d24aae7ac5d3cf348910d8ca Mon Sep 17 00:00:00 2001 From: Felix Schreyer Date: Wed, 1 Jul 2026 23:02:31 +0200 Subject: [PATCH 1/3] bugfix to not drop carbon price in NDC after first target year if cm_NDC_CO2PriceMinimum is NonDecreasing --- modules/45_carbonprice/NDC/postsolve.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/45_carbonprice/NDC/postsolve.gms b/modules/45_carbonprice/NDC/postsolve.gms index c1fd6a7b92..47c0a8fe0f 100644 --- a/modules/45_carbonprice/NDC/postsolve.gms +++ b/modules/45_carbonprice/NDC/postsolve.gms @@ -115,7 +115,7 @@ pm_taxCO2eq(t,regi) = max( pm_taxCO2eq(t,regi), $elseif.cm_NDC_CO2PriceMinimum "%cm_NDC_CO2PriceMinimum%" == "NonDecreasing" *** CO2 price cannot decrease after first NDC target year, but can increase or remain constant loop(regi, - loop( t2$( t2.val eq p45_lastNDCyear(regi) ) , + loop( t2$( t2.val eq p45_firstNDCyear(regi) ) , pm_taxCO2eq(t,regi)$(t.val gt t2.val) = max( pm_taxCO2eq(t,regi), pm_taxCO2eq(t2,regi) ); ); From 1d295f8c2637ea52eb0193839a3cc91be49e492a Mon Sep 17 00:00:00 2001 From: Felix Schreyer Date: Wed, 1 Jul 2026 23:04:46 +0200 Subject: [PATCH 2/3] set cm_NDC_CO2PriceMinimum to NonDecreasing by default, i.e. CO2 price in NDC should not decrease after first target year --- main.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.gms b/main.gms index 4152fe4f41..111e4874d4 100755 --- a/main.gms +++ b/main.gms @@ -1469,7 +1469,7 @@ $setglobal cm_NDC_postTargetDevelopment constant !! def = "constant" *' * (zero): no minimum carbon price after first NDC target year, i.e. carbon price can decrease to zero after first NDC target year *' * (NPi): carbon price cannot fall below carbon price of NPi run as this represent the development of current policies *' * (NonDecreasing): carbon price cannot decrease after first NDC target year, but can increase or remain constant -$setglobal cm_NDC_CO2PriceMinimum NPi !! def = "NPi" !! regexp = zero|NPi|NonDecreasing +$setglobal cm_NDC_CO2PriceMinimum NonDecreasing !! def = "NonDecreasing" !! regexp = zero|NPi|NonDecreasing *' cm_NDC_TargetCheckConv "choose whether iterations should go on until all NDC emissions targets are fullfilled" [requires 45_carbonprice = NDC] *' This setting determines whether compliance with NDC emissions targets should be a criterion for convergence of REMIND. *' * (on): runs only converges if all NDC emissions targets are met within the tolerance defined by cm_NDC_target_DevTol From 3d91fcde74427e266f0d230dfc6d2b88a10eb860 Mon Sep 17 00:00:00 2001 From: Felix Schreyer Date: Fri, 3 Jul 2026 15:34:33 +0200 Subject: [PATCH 3/3] add condition to cm_NDC_CO2PriceMinimum = NonDecreasing that co2 price should never be below Npi --- modules/45_carbonprice/NDC/postsolve.gms | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/45_carbonprice/NDC/postsolve.gms b/modules/45_carbonprice/NDC/postsolve.gms index 47c0a8fe0f..a088905fca 100644 --- a/modules/45_carbonprice/NDC/postsolve.gms +++ b/modules/45_carbonprice/NDC/postsolve.gms @@ -113,13 +113,17 @@ $elseif.cm_NDC_CO2PriceMinimum "%cm_NDC_CO2PriceMinimum%" == "NPi" pm_taxCO2eq(t,regi) = max( pm_taxCO2eq(t,regi), p45_taxCO2eq_bau(t,regi) ); $elseif.cm_NDC_CO2PriceMinimum "%cm_NDC_CO2PriceMinimum%" == "NonDecreasing" -*** CO2 price cannot decrease after first NDC target year, but can increase or remain constant +*** As above CO2 price should not fall below NPI run +pm_taxCO2eq(t,regi) = max( pm_taxCO2eq(t,regi), + p45_taxCO2eq_bau(t,regi) ); +*** In addition, CO2 price cannot decrease after first NDC target year, but can increase or remain constant loop(regi, loop( t2$( t2.val eq p45_firstNDCyear(regi) ) , pm_taxCO2eq(t,regi)$(t.val gt t2.val) = max( pm_taxCO2eq(t,regi), pm_taxCO2eq(t2,regi) ); ); ); + $endif.cm_NDC_CO2PriceMinimum display pm_taxCO2eq;