diff --git a/config/default.cfg b/config/default.cfg index 3eb92747e..c75aaa260 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -28,7 +28,7 @@ cfg$regionmapping <- "config/regionmappingH12.csv" cfg$extramappings_historic <- "" #### Current input data revision (.) #### -cfg$inputRevision <- "7.88" +cfg$inputRevision <- "7.90" #### Current CES parameter and GDX revision (commit hash) #### cfg$CESandGDXversion <- "a12b6355e0ac96081f79504465c61e68fd14ed48" diff --git a/core/declarations.gms b/core/declarations.gms index adc44959a..0c8cca567 100644 --- a/core/declarations.gms +++ b/core/declarations.gms @@ -131,6 +131,7 @@ vm_co2eq(ttot,all_regi) "total greenhouse gas emiss vm_co2eqMkt(ttot,all_regi,all_emiMkt) "total greenhouse gas emissions per market measured in co2 equivalents that are subject to carbon pricing, be aware that emissions coverage of this variable depends on switch cm_multigasscen [GtCeq]" vm_emiAll(ttot,all_regi,all_enty) "total emissions by species [GtC, Mt CH4, Mt N, Mt SO2, Mt BC, Mt OC]" v_co2eqCum(all_regi) "cumulated vm_co2eq emissions for the first budget period [GtCeq]" +vm_emiGHG_exclLULUCF_exclBunkers(ttot,all_regi) "total GHG emissions excl LULUCF and excl bunkers, needed for NDC targets [GtCeq]" *** sectoral emissions vm_emiTeDetail(ttot,all_regi,all_enty,all_enty,all_te,all_enty) "emissions from energy technologies on supply-side (pm_emifac * PE) and demand-side (pm_emifac * FE), note: not equivalent to Emi|CO2|Energy in reporting [GtC, Mt CH4, Mt N, Mt SO2, Mt BC, Mt OC]" @@ -184,6 +185,7 @@ q_emiCdrAll(ttot,all_regi) "summing over all CDR emiss q_balcapture(ttot,all_regi) "balance equation for carbon capture" q_balCCUvsCCS(ttot,all_regi) "balance equation for captured carbon to CCU or CCS or valve" q_ccsShare(ttot,all_regi) "calculate the share of captured CO2 that is stored geologically" +q_emiGHG_exclLULUCF_exclBunkers(ttot,all_regi) "calculate total GHG emissions excl LULUCF and excl bunkers" ; *** --------------------------------------------------------------------------- diff --git a/core/equations.gms b/core/equations.gms index 4b19d2095..c586764a2 100644 --- a/core/equations.gms +++ b/core/equations.gms @@ -853,6 +853,24 @@ q_emiCap(t,regi) .. vm_co2eq(t,regi) + vm_Xport(t,regi,"perm") - vm_Mport(t,regi,"perm") =l= vm_perm(t,regi); + +***-------------------------------------------------- +*' Total GHG emissions excl. land-use change and excl. bunker emissions (needed for NDC targets) +***-------------------------------------------------- +q_emiGHG_exclLULUCF_exclBunkers(t,regi).. + vm_emiGHG_exclLULUCF_exclBunkers(t,regi) + =e= +*** total GHG emissions excl. F-Gases and excl. LULUCF + vm_co2eq(t,regi) +*** add F-Gases, convert from MtCO2eq/yr to GtC/yr + + vm_emiFgas(t,regi,"emiFgasTotal") / sm_c_2_co2 / 1000 +*** subtract bunker emissions + - sum(se2fe(enty,enty2,te), + pm_emifac(t,regi,enty,enty2,te,"co2") + * vm_demFeSector(t,regi,enty,enty2,"trans","other") + ); + + ***----------------------------------------------------------------- *** Budgets on GHG emissions (single or two subsequent time periods) ***----------------------------------------------------------------- diff --git a/main.gms b/main.gms index ed5e22c82..11f21b957 100755 --- a/main.gms +++ b/main.gms @@ -1414,6 +1414,10 @@ $setglobal cm_NDC_targetYear 2030, 2035 !! def = "2030, 2035" *' * By default 2030 CO2 prices are limited to 150 USD/tCO2 in EUR, 80 USD/tCO2 in CAZ, USA, JPN and NEU, 50 USD/tCO2 in REF and MEA, 40 USD/tCO2 in LAM and CHA, 30 USD/tCO2 in OAS, 15 USD/tCO2 in IND and 10 USD/tCO2 in SSA. *' * If set to "off", no CO2 price limits are applied in any region. $setglobal cm_NDC_CO2PriceLimit 2030.EUR 150, 2030.(CAZ,USA, JPN, NEU) 80, 2030.(REF,MEA) 50, 2030.(LAM, CHA) 40, 2030.OAS 30, 2030.IND 15, 2030.SSA 10 !! def = "2030.EUR 150, 2030.(CAZ,USA, JPN, NEU) 80, 2030.(REF,MEA) 50, 2030.(LAM, CHA) 40, 2030.OAS 30, 2030.IND 15, 2030.SSA 10" +*' cm_NDC_CO2PriceLimit_continuation "switch to determine whether CO2 price limits in NDC realization are applied only in the specified target year or also in subsequent years" [requires 45_carbonprice = NDC] +*' * (on): CO2 price limits are applied not only in the specified target year but also in subsequent years, with the limit increasing by 20% per year after the target year, but allowing for carbon price of at least 200$/tCO2 at minimum +*' * (off): CO2 price limits are only applied in the specified target year, but not in subsequent years +$setglobal cm_NDC_CO2PriceLimit_continuation off !! def = "off" !! regexp = on|off *' cm_NDC_postTargetDevelopment "choose assumption on co2 price trajectory after NDC target years" [requires 45_carbonprice = NDC] *' * (constant): carbon price remains constant after the last NDC target year *' * (global_conv): carbon price converges across regions to a global value of 100$/tCO2 by 2100 diff --git a/modules/45_carbonprice/NDC/datainput.gms b/modules/45_carbonprice/NDC/datainput.gms index ad3562042..8d3408d0b 100644 --- a/modules/45_carbonprice/NDC/datainput.gms +++ b/modules/45_carbonprice/NDC/datainput.gms @@ -13,19 +13,19 @@ Execute_Loadpoint "input_ref" p45_taxCO2eq_bau = pm_taxCO2eq; pm_taxCO2eq(t,regi) = p45_taxCO2eq_bau(t,regi); -*** load NDC data -Table f45_factorTargetyear(tall,all_regi,NDC_version,all_GDPpopScen) "Table for all NDC versions with multiplier for target year emissions vs 2015 emissions, as weighted average for all countries with quantifyable emissions under NDC in particular region [1]" +*** load NDC emissions targets (only fraction of emissions in REMIND region from countries with NDC targets) +Table fm_EmiTargetAbs(tall,all_regi,NDC_version,all_GDPpopScen) "Table for all NDC versions with absolute NDC emissions targets, emissions from countries without targets are not included [Mt CO2eq/yr]" $offlisting $ondelim -$include "./modules/45_carbonprice/NDC/input/fm_factorTargetyear.cs3r" +$include "./modules/45_carbonprice/NDC/input/fm_EmiTargetAbs.cs3r" $offdelim $onlisting ; -Parameter p45_factorTargetyear(ttot,all_regi) "Multiplier for target year emissions vs 2015 emissions, as weighted average for all countries with quantifyable emissions under NDC in particular region [1]"; -p45_factorTargetyear(t,all_regi) = f45_factorTargetyear(t,all_regi,"%cm_NDC_version%","%cm_GDPpopScen%"); +Parameter p45_EmiTargetAbs(ttot,all_regi) "Absolute NDC emissions targets, emissions from countries without targets are not included [Mt CO2eq/yr]"; +p45_EmiTargetAbs(t,all_regi) = fm_EmiTargetAbs(t,all_regi,"%cm_NDC_version%","%cm_GDPpopScen%"); -display p45_factorTargetyear; +display p45_EmiTargetAbs; Table f45_shareTarget(tall,all_regi,NDC_version,all_GDPpopScen) "Table for all NDC versions with estimated target year GHG emissions share of countries with quantifyable emissions under NDC in particular region, time dimension specifies alternative future target years [0..1]" $offlisting @@ -49,6 +49,17 @@ $endif $offdelim / ; +*** -------------------------------------------------------------------------- +*** use new GAMS internal variables for total GHG excl LULUCF and excl bunkers + +*** overwrite BAU emissions with emissions in GAMS variable from reference GDX +p45_BAU_reg_emi_wo_LU_wo_bunkers(ttot,regi) = 0; +Execute_Loadpoint 'input_ref' p45_BAU_reg_emi_wo_LU_wo_bunkers = vm_emiGHG_exclLULUCF_exclBunkers.l; +*** convert from GtCeq/yr to MtCO2eq/yr +p45_BAU_reg_emi_wo_LU_wo_bunkers(ttot,regi) = p45_BAU_reg_emi_wo_LU_wo_bunkers(ttot,regi) * sm_c_2_co2 * 1000; + +*** -------------------------------------------------------------------------- + *** parameters for selecting NDC years Set t_NDC_targetYear(ttot) "Years for which NDC emissions targets can be applied [0 or 1]" / %cm_NDC_targetYear% /; Scalar p45_minRatioOfCoverageToMax "only targets whose coverage is this times p45_bestNDCcoverage are considered. Use 1 for only best [0..1]" /0/; diff --git a/modules/45_carbonprice/NDC/input/files b/modules/45_carbonprice/NDC/input/files index 663ab8945..c9bd135c8 100644 --- a/modules/45_carbonprice/NDC/input/files +++ b/modules/45_carbonprice/NDC/input/files @@ -1,2 +1,2 @@ fm_shareTarget.cs3r -fm_factorTargetyear.cs3r \ No newline at end of file +fm_EmiTargetAbs.cs3r \ No newline at end of file diff --git a/modules/45_carbonprice/NDC/postsolve.gms b/modules/45_carbonprice/NDC/postsolve.gms index 6462b0961..c1fd6a7b9 100644 --- a/modules/45_carbonprice/NDC/postsolve.gms +++ b/modules/45_carbonprice/NDC/postsolve.gms @@ -61,9 +61,15 @@ $ifThen.cm_NDC_CO2PriceLimit not "%cm_NDC_CO2PriceLimit%" == "off" loop( p45_NDCyearSet(t,regi)$( p45_CO2PriceLimitNDC(t,regi) > 0 ) , pm_taxCO2eq(t,regi) = min( pm_taxCO2eq(t,regi), p45_CO2PriceLimitNDC(t,regi) * sm_DptCO2_2_TDpGtC ); -*** after target year, CO2 price limit increases by 20%/yr - pm_taxCO2eq(t2,regi)$( t2.val gt t.val) = min( pm_taxCO2eq(t2,regi), - ( p45_CO2PriceLimitNDC(t,regi) * (1 + 0.2 * (t2.val - t.val)) ) * sm_DptCO2_2_TDpGtC ); +$ifThen.cm_NDC_CO2PriceLimit_continuation not "%cm_NDC_CO2PriceLimit_continuation%" == "off" +*** For the periods after the carbon price limit: +*** If this switch is on, limit increase by 20%/yr, but ensure the CO2 price limit (cap) is at least 200$/tCO2. + pm_taxCO2eq(t2,regi)$( t2.val gt t.val) = min( pm_taxCO2eq(t2,regi), + max( p45_CO2PriceLimitNDC(t,regi) * (1 + 0.2 * (t2.val - t.val)) * sm_DptCO2_2_TDpGtC, + 200 * sm_DptCO2_2_TDpGtC + ) + ); +$endif.cm_NDC_CO2PriceLimit_continuation ); $endif.cm_NDC_CO2PriceLimit diff --git a/modules/45_carbonprice/NDC/preloop.gms b/modules/45_carbonprice/NDC/preloop.gms index 2ed128f97..997d25898 100644 --- a/modules/45_carbonprice/NDC/preloop.gms +++ b/modules/45_carbonprice/NDC/preloop.gms @@ -10,12 +10,12 @@ *#' @equations *#' calculate level of emission target per REMIND region. It is componsed to two terms: *#' 1. Contribution of countries within REMIND region with NDC target: -*#' share of emissions covered by NDC in particular region * REMIND NPI emissions in 2015 * (country-aggregated) relative NDC emissions target with respect to 2015 +*#' Absolute NDC emissions target that was derived by summing the targets of all countries within the region that have NDC targets *#' 2. Contribution of countries within REMIND region without NDC target: *#' (1 - share of emissions covered by NDC in particular region) * REMIND NPI emissions in target year p45_CO2eqwoLU_goal(p45_NDCyearSet(t,regi)) = - p45_shareTarget(t,regi) * p45_BAU_reg_emi_wo_LU_wo_bunkers("2015",regi) * p45_factorTargetyear(t,regi) !! share with NDC target - + (1-p45_shareTarget(t,regi)) * p45_BAU_reg_emi_wo_LU_wo_bunkers(t,regi); !! baseline for share of countries without NDC target + p45_EmiTargetAbs(t,regi) !! emissions target derived from countries with NDC target + + (1-p45_shareTarget(t,regi)) * p45_BAU_reg_emi_wo_LU_wo_bunkers(t,regi); !! countries without NDC target are assumed to follow NPI emissions pathway display pm_taxCO2eq,p45_CO2eqwoLU_goal;