diff --git a/modules/80_optimization/nash/postsolve.gms b/modules/80_optimization/nash/postsolve.gms index 9f682168e9..4e8f380af1 100644 --- a/modules/80_optimization/nash/postsolve.gms +++ b/modules/80_optimization/nash/postsolve.gms @@ -374,12 +374,23 @@ loop((t,regi,entyPe)$pm_implicitPePriceTarget(t,regi,entyPe), ); $endIf.cm_implicitPePriceTarget -*** check global budget target from core/postsolve, must be within 2 Gt of target value +*** check global budget target from 45_carbonprice/functionalForm/postsolve +*** convergence criterion defined via cm_budgetCO2_absDevTol [default = 2 Gt CO2] +*** positive values of sm_globalBudget_absDev mean that target budget is exceeded (sm_globalBudget_absDev = s45_actualbudgetco2 - cm_budgetCO2from2020) +*** if damages are not internalized, check positive and negative deviation from target budget +*** if damages are internalized, only check positive deviation from target budget p80_globalBudget_absDev_iter(iteration) = sm_globalBudget_absDev; -if (abs(p80_globalBudget_absDev_iter(iteration)) gt cm_budgetCO2_absDevTol, - s80_bool = 0; - p80_messageShow("target") = YES; -); +$ifthen.globalBudget "%internalizeDamages%" == "off" + if (abs(p80_globalBudget_absDev_iter(iteration)) gt cm_budgetCO2_absDevTol, + s80_bool = 0; + p80_messageShow("target") = YES; + ); +$else.globalBudget + if (p80_globalBudget_absDev_iter(iteration) gt cm_budgetCO2_absDevTol, + s80_bool = 0; + p80_messageShow("target") = YES; + ); +$endIf.globalBudget *** additional criterion: if damage internalization is on, is damage iteration converged? p80_sccConvergenceMaxDeviation_iter(iteration) = pm_sccConvergenceMaxDeviation;