Skip to content
Snippets Groups Projects
postsolve.gms 7.62 KiB
Newer Older
Lavinia Baumstark's avatar
Lavinia Baumstark committed
*** |  (C) 2006-2019 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/45_carbonprice/NDC/postsolve.gms
if(cm_iterative_target_adj eq 3, 

		display pm_taxCO2eq;
		
		



*#' @equations 
*#' calculate emission variable to be used for NDC target: GHG emissions w/o land-use change and w/o transport bunker emissions, unit [Mt CO2eq/yr]
p45_actual_co2eq_woLU_regi(regi_2030target) = vm_co2eq.l("2030",regi_2030target)*sm_c_2_co2*1000 + vm_emiFgas.L("2030",regi_2030target,"emiFgasTotal")
*cb*    substract the bunker emissions, as in /modules/35_transport/complex/output.gms
*cb*                             69.3 = ef_dem("fedie") as defined in /core/reporting.gms ()emission factor of liquid fuels in [Mt CO2/EJ]
		- 69.3*(1-
*cb     p_bioshare as in /core/reporting.gms
	      sum(se2fe(entySe,"fedie",te),
                                     (sum(pe2se(peBio,entySe,te2),vm_prodSe.l("2030",regi_2030target,peBio,entySe,te2))
                                       + sum(pc2te(enty,entySe2(enty3),te,entySe),max(0, pm_prodCouple(regi_2030target,enty,enty3,te,entySe)) * vm_prodSe.l("2030",regi_2030target,enty,enty3,te)))
                                     /(sum(pe2se(entyPe,entySe,te2),vm_prodSe.l("2030",regi_2030target,entyPe,entySe,te2))
                                       + sum(pc2te(enty,entySe2(enty3),te,entySe),max(0, pm_prodCouple(regi_2030target,enty,enty3,te,entySe)) * vm_prodSe.l("2030",regi_2030target,enty,enty3,te)))))
*cb total fedie energy in [TWa]]									   
	* sum(se2fe(enty,"fedie",te),vm_prodFe.l("2030",regi_2030target,enty,"fedie",te) )
*cb bunkershare times emission intensity of liquid fuels
	* pm_bunker_share_in_nonldv_fe("2030",regi_2030target) * 31.536;
	
*#' special case: US target refers to 2025,
p45_actual_co2eq_woLU_regi(regi_2025target) = vm_co2eq.l("2025",regi_2025target)*sm_c_2_co2*1000 + vm_emiFgas.L("2025",regi_2025target,"emiFgasTotal")
*cb*    substract the bunker emissions, as in /modules/35_transport/complex/output.gms
*cb*                             69.3 = ef_dem("fedie") as defined in /core/reporting.gms ()emission factor of liquid fuels in [Mt CO2/EJ]
		- 69.3*(1-
*cb     p_bioshare as in /core/reporting.gms
	      sum(se2fe(entySe,"fedie",te),
                                     (sum(pe2se(peBio,entySe,te2),vm_prodSe.l("2025",regi_2025target,peBio,entySe,te2))
                                       + sum(pc2te(enty,entySe2(enty3),te,entySe),max(0, pm_prodCouple(regi_2025target,enty,enty3,te,entySe)) * vm_prodSe.l("2025",regi_2025target,enty,enty3,te)))
                                     /(sum(pe2se(entyPe,entySe,te2),vm_prodSe.l("2025",regi_2025target,entyPe,entySe,te2))
                                       + sum(pc2te(enty,entySe2(enty3),te,entySe),max(0, pm_prodCouple(regi_2025target,enty,enty3,te,entySe)) * vm_prodSe.l("2025",regi_2025target,enty,enty3,te)))))
*cb total fedie energy in [TWa]]									   
	* sum(se2fe(enty,"fedie",te),vm_prodFe.l("2025",regi_2025target,enty,"fedie",te) )
*cb bunkershare times emission intensity of liquid fuels
	* pm_bunker_share_in_nonldv_fe("2025",regi_2025target) * 31.536;
	
	
		display vm_co2eq.l;
		display p45_actual_co2eq_woLU_regi;
		display p45_ref_co2eq_woLU_regi;
		
*#' nash compatible convergence scheme: adjustment of co2 tax for next iteration based on deviation of emissions in this iteration (actual) from target emissions (ref)
*#' maximum possible change between iterations decreases with increase of iteration number
if(iteration.val lt 8,  
 p45_factorRescaleCO2Tax(regi) = min((( max(0.1, p45_actual_co2eq_woLU_regi(regi)/p45_ref_co2eq_woLU_regi(regi) ) )** 4),max(2-iteration.val/15,1.01-iteration.val/10000)); !! use max(0.1, ...) to make sure that negative emission values cause no problem
elseif iteration.val lt 15,
 p45_factorRescaleCO2Tax(regi) = min((( max(0.1, p45_actual_co2eq_woLU_regi(regi)/p45_ref_co2eq_woLU_regi(regi) ) )**3),max(2-iteration.val/15,1.01-iteration.val/10000));
elseif iteration.val lt 23,
 p45_factorRescaleCO2Tax(regi) = min((( max(0.1, p45_actual_co2eq_woLU_regi(regi)/p45_ref_co2eq_woLU_regi(regi) ) )**2),max(2-iteration.val/15,1.01-iteration.val/10000));
else
 p45_factorRescaleCO2Tax(regi) = min((( max(0.1, p45_actual_co2eq_woLU_regi(regi)/p45_ref_co2eq_woLU_regi(regi) ) )**1),max(2-iteration.val/15,1.01-iteration.val/10000));
); 

pm_taxCO2eq(t,regi)$(t.val gt 2016 AND t.val ge cm_startyear AND t.val lt 2031) = max(1* sm_DptCO2_2_TDpGtC,pm_taxCO2eq(t,regi) * p45_factorRescaleCO2Tax(regi) );
p45_factorRescaleCO2TaxTrack(iteration,regi) = p45_factorRescaleCO2Tax(regi);

display p45_factorRescaleCO2TaxTrack;

***carbon price safety valve for low-income and lower-middle income regions: max 1/4 of EUR carbon price
***pm_taxCO2eq(t,"IND")$(t.val gt 2014 AND t.val lt 2036) = min(pm_taxCO2eq(t,"IND"),0.25*pm_taxCO2eq(t,"EUR"));
***pm_taxCO2eq(t,"AFR")$(t.val gt 2014 AND t.val lt 2036) = min(pm_taxCO2eq(t,"AFR"),0.25*pm_taxCO2eq(t,"EUR"));
****** regions with some low-income or lower-middle income regions: max 50%                                                 
***pm_taxCO2eq(t,"LAM")$(t.val gt 2014 AND t.val lt 2036) = min(pm_taxCO2eq(t,"LAM"),0.5*pm_taxCO2eq(t,"EUR"));
***pm_taxCO2eq(t,"MEA")$(t.val gt 2014 AND t.val lt 2036) = min(pm_taxCO2eq(t,"MEA"),0.5*pm_taxCO2eq(t,"EUR"));
***pm_taxCO2eq(t,"OAS")$(t.val gt 2014 AND t.val lt 2036) = min(pm_taxCO2eq(t,"OAS"),0.5*pm_taxCO2eq(t,"EUR"));


*#' convergence scheme post 2030: exponential increase with 1.25% AND regional convergence
pm_taxCO2eq(ttot,regi)$(ttot.val gt 2030) = (pm_taxCO2eq("2030",regi)*1.0125**(ttot.val-2030)*max(70-ttot.val+2030,0) + 30 * sm_DptCO2_2_TDpGtC * 1.0125**(ttot.val-2030)*min(ttot.val-2030,70))/70;
*#'special case USA: already after 2025 shift to convergence
pm_taxCO2eq(ttot,regi_2025target)$(ttot.val gt 2025) = (pm_taxCO2eq("2025",regi_2025target)*1.0125**(ttot.val-2025)*max(75-ttot.val+2025,0) + 30 * sm_DptCO2_2_TDpGtC * 1.0125**(ttot.val-2030)*min(ttot.val-2025,75))/75;
*#'as a minimum, have linear price increase starting from 1$ in 2030
pm_taxCO2eq(ttot,regi)$(ttot.val gt 2030) = max(pm_taxCO2eq(ttot,regi),1*sm_DptCO2_2_TDpGtC * (1+(ttot.val-2030)*9/7));
*#' exception for China to meet the target of 2030 peak: linear increase starts already in 2025
pm_taxCO2eq(ttot,regi)$(ttot.val gt 2025 AND (sameas(regi,"CHN") OR sameas(regi,"CHA"))) = max(pm_taxCO2eq(ttot,regi),1*sm_DptCO2_2_TDpGtC * (1+(ttot.val-2025)*9/7));

*** new 2020 carbon price definition: weighted average of 2015 and 2025, with triple weight for 2015 (which is zero for all non-eu regions).
pm_taxCO2eq("2020",regi) = (3*pm_taxCO2eq("2015",regi)+pm_taxCO2eq("2025",regi))/4;
Lavinia Baumstark's avatar
Lavinia Baumstark committed

***
******special treatment for 2020 (not relevant if cm_startyear for NDC scenario is 2020, but relevant if earlier)
***pm_taxCO2eq("2020","EUR") = 5 * sm_DptCO2_2_TDpGtC;
***pm_taxCO2eq("2020","USA") = 3 * sm_DptCO2_2_TDpGtC;
***pm_taxCO2eq("2020","JPN") = 3 * sm_DptCO2_2_TDpGtC;
***pm_taxCO2eq("2020","ROW") = 3 * sm_DptCO2_2_TDpGtC;
***pm_taxCO2eq("2020","CHN") = 1 * sm_DptCO2_2_TDpGtC;
***pm_taxCO2eq("2020","IND") = 0.5 * sm_DptCO2_2_TDpGtC;
***pm_taxCO2eq("2020","LAM") = 0.5 * sm_DptCO2_2_TDpGtC;
***pm_taxCO2eq("2020","OAS") = 0.5 * sm_DptCO2_2_TDpGtC;
***pm_taxCO2eq("2020","AFR") = 0.5 * sm_DptCO2_2_TDpGtC;
***pm_taxCO2eq("2020","MEA") = 0.5 * sm_DptCO2_2_TDpGtC;
***pm_taxCO2eq("2020","RUS") = 0.5 * sm_DptCO2_2_TDpGtC;


		display pm_taxCO2eq;
);
*** EOF ./modules/45_carbonprice/NDC/postsolve.gms