Skip to content
Snippets Groups Projects
Unverified Commit e9fc8594 authored by Lavinia Baumstark's avatar Lavinia Baumstark Committed by GitHub
Browse files

Merge pull request #30 from christophbertram/develop

Changes for validation
parents f812ebb5 22c94a96
No related branches found
No related tags found
No related merge requests found
...@@ -367,6 +367,7 @@ cfg$gms$cm_APscen <- "SSP2" # def <- SSP2 ...@@ -367,6 +367,7 @@ cfg$gms$cm_APscen <- "SSP2" # def <- SSP2
cfg$gms$cm_Full_Integration <- "off" # def = off cfg$gms$cm_Full_Integration <- "off" # def = off
cfg$gms$c_CO2priceDependent_AdjCosts <- "on" # def = on cfg$gms$c_CO2priceDependent_AdjCosts <- "on" # def = on
cfg$gms$c_scaleEmiHistorical <- "off" # def = off
# MAGICC configuration (AJS) # MAGICC configuration (AJS)
# Calibrate year 2000 temperature to HADCRUT4 data (which is very close to AR5). # Calibrate year 2000 temperature to HADCRUT4 data (which is very close to AR5).
......
...@@ -290,6 +290,24 @@ table f_dataetaglob(tall,all_te) "global eta data" ...@@ -290,6 +290,24 @@ table f_dataetaglob(tall,all_te) "global eta data"
$include "./core/input/generisdata_varying_eta.prn" $include "./core/input/generisdata_varying_eta.prn"
; ;
* Read in mac historical emissions to calibrate MAC reference emissions
parameter p_histEmiMac(tall,all_regi,all_enty) "historical emissions per MAC"
/
$ondelim
$include "./core/input/p_histEmiMac.cs4r"
$offdelim
/
;
* Read in historical emissions per sector to calibrate MAC reference emissions
parameter p_histEmiSector(tall,all_regi,all_enty,emi_sectors,sector_types) "historical emissions per sector"
/
$ondelim
$include "./core/input/p_histEmiSector.cs4r"
$offdelim
/
;
***--------------------------------------------------------------------------- ***---------------------------------------------------------------------------
*** Import and set regional data *** Import and set regional data
***--------------------------------------------------------------------------- ***---------------------------------------------------------------------------
......
...@@ -227,6 +227,9 @@ pm_cumDeprecFactor_old(ttot,all_regi,all_in) "investment depreciation wi ...@@ -227,6 +227,9 @@ pm_cumDeprecFactor_old(ttot,all_regi,all_in) "investment depreciation wi
pm_cumDeprecFactor_new(ttot,all_regi,all_in) "investment depreciation within a period, applied to the investment of t" pm_cumDeprecFactor_new(ttot,all_regi,all_in) "investment depreciation within a period, applied to the investment of t"
p_Mport2005correct(all_regi,all_enty) "correction factor to match fossil supply and internal region energy demand in the initial year" p_Mport2005correct(all_regi,all_enty) "correction factor to match fossil supply and internal region energy demand in the initial year"
p_histEmiMac(tall,all_regi,all_enty) "historical emissions per MAC; from Eurostat and CEDS, to correct CH4 and N2O reporting"
p_histEmiSector(tall,all_regi,all_enty,emi_sectors,sector_types) "historical emissions per sector; from Eurostat and CEDS, to correct CH4 and N2O reporting"
; ;
***---------------------------------------------------------------------------------------- ***----------------------------------------------------------------------------------------
......
...@@ -211,6 +211,10 @@ display s_actualbudgetco2; ...@@ -211,6 +211,10 @@ display s_actualbudgetco2;
); );
); );
*** ---------------------------------------------------------------------------------------------------------------
*** ENGAGE peakBudg formulation that works with several CO2 price path realizations of module 45 ---------------------
*** it results in a peak budget with zero net CO2 emissions afterwards
*** ---------------------------------------------------------------------------------------------------------------
if(cm_iterative_target_adj eq 7, if(cm_iterative_target_adj eq 7,
*JeS/CB* Update tax levels/ multigasbudget values to reach the peak CO2 budget, but make sure CO2 emissions afterward are close to zero on the global level *JeS/CB* Update tax levels/ multigasbudget values to reach the peak CO2 budget, but make sure CO2 emissions afterward are close to zero on the global level
...@@ -237,20 +241,20 @@ display p_actualbudgetco2; ...@@ -237,20 +241,20 @@ display p_actualbudgetco2;
*** use multiplicative for budgets higher than 1600 Gt; for lower budgets, use multiplicative adjustment only for first 3 iterations, *** use multiplicative for budgets higher than 1600 Gt; for lower budgets, use multiplicative adjustment only for first 3 iterations,
if(ord(iteration) lt 3 or c_budgetCO2 > 1600, if(ord(iteration) lt 3 or c_budgetCO2 > 1600,
!! change in CO2 price through adjustment: new price - old price; needed for adjustment option 2 !! change in CO2 price through adjustment: new price - old price; needed for adjustment option 2
p_taxCO2eq_iterationdiff(t,regi)$(t.val le cm_peakBudgYr) = pm_taxCO2eq(t,regi) * min(max((s_actualbudgetco2/c_budgetCO2)** (25/(2 * iteration.val + 23)),0.5+iteration.val/208),2 - iteration.val/102) - pm_taxCO2eq(t,regi); p_taxCO2eq_iterationdiff(t,regi) = pm_taxCO2eq(t,regi) * min(max((s_actualbudgetco2/c_budgetCO2)** (25/(2 * iteration.val + 23)),0.5+iteration.val/208),2 - iteration.val/102) - pm_taxCO2eq(t,regi);
pm_taxCO2eq(t,regi)$(t.val le cm_peakBudgYr) = pm_taxCO2eq(t,regi) + p_taxCO2eq_iterationdiff(t,regi) ; pm_taxCO2eq(t,regi)$(t.val le cm_peakBudgYr) = pm_taxCO2eq(t,regi) + p_taxCO2eq_iterationdiff(t,regi) ;
p_taxCO2eq_until2150(t,regi) = p_taxCO2eq_until2150(t,regi) + p_taxCO2eq_iterationdiff(t,regi) ; p_taxCO2eq_until2150(t,regi) = p_taxCO2eq_until2150(t,regi) + p_taxCO2eq_iterationdiff(t,regi) ;
*** then switch to triangle-approximation based on last two iteration data points *** then switch to triangle-approximation based on last two iteration data points
else else
!! change in CO2 price through adjustment: new price - old price; the two instances of "pm_taxCO2eq" cancel out -> only the difference term !! change in CO2 price through adjustment: new price - old price; the two instances of "pm_taxCO2eq" cancel out -> only the difference term
!! until cm_peakBudgYr: expolinear price trajectory !! until cm_peakBudgYr: expolinear price trajectory
p_taxCO2eq_iterationdiff_tmp(t,regi)$(t.val le cm_peakBudgYr) = p_taxCO2eq_iterationdiff_tmp(t,regi) =
max(p_taxCO2eq_iterationdiff(t,regi) * min(max((c_budgetCO2 - s_actualbudgetco2)/(s_actualbudgetco2 - s_actualbudgetco2_last),-2),2),-pm_taxCO2eq(t,regi)/2); max(p_taxCO2eq_iterationdiff(t,regi) * min(max((c_budgetCO2 - s_actualbudgetco2)/(s_actualbudgetco2 - s_actualbudgetco2_last),-2),2),-pm_taxCO2eq(t,regi)/2);
pm_taxCO2eq(t,regi)$(t.val le cm_peakBudgYr) = pm_taxCO2eq(t,regi) + pm_taxCO2eq(t,regi)$(t.val le cm_peakBudgYr) = pm_taxCO2eq(t,regi) +
max(p_taxCO2eq_iterationdiff(t,regi) * min(max((c_budgetCO2 - s_actualbudgetco2)/(s_actualbudgetco2 - s_actualbudgetco2_last),-2),2),-pm_taxCO2eq(t,regi)/2); max(p_taxCO2eq_iterationdiff(t,regi) * min(max((c_budgetCO2 - s_actualbudgetco2)/(s_actualbudgetco2 - s_actualbudgetco2_last),-2),2),-pm_taxCO2eq(t,regi)/2);
p_taxCO2eq_until2150(t,regi)$(t.val le cm_peakBudgYr) = p_taxCO2eq_until2150(t,regi) + p_taxCO2eq_until2150(t,regi) = p_taxCO2eq_until2150(t,regi) +
max(p_taxCO2eq_iterationdiff(t,regi) * min(max((c_budgetCO2 - s_actualbudgetco2)/(s_actualbudgetco2 - s_actualbudgetco2_last),-2),2),-p_taxCO2eq_until2150(t,regi)/2); max(p_taxCO2eq_iterationdiff(t,regi) * min(max((c_budgetCO2 - s_actualbudgetco2)/(s_actualbudgetco2 - s_actualbudgetco2_last),-2),2),-p_taxCO2eq_until2150(t,regi)/2);
p_taxCO2eq_iterationdiff(t,regi)$(t.val le cm_peakBudgYr) = p_taxCO2eq_iterationdiff_tmp(t,regi); p_taxCO2eq_iterationdiff(t,regi) = p_taxCO2eq_iterationdiff_tmp(t,regi);
!! after cm_peakBudgYr: adjustment so that emissions become zero: increase/decrease tax in each time step after cm_peakBudgYr by percentage of that year's total CO2 emissions of 2015 emissions !! after cm_peakBudgYr: adjustment so that emissions become zero: increase/decrease tax in each time step after cm_peakBudgYr by percentage of that year's total CO2 emissions of 2015 emissions
); );
o_taxCO2eq_iterDiff_Itr(iteration,regi) = p_taxCO2eq_iterationdiff("2030",regi); o_taxCO2eq_iterDiff_Itr(iteration,regi) = p_taxCO2eq_iterationdiff("2030",regi);
...@@ -297,8 +301,7 @@ display p_actualbudgetco2; ...@@ -297,8 +301,7 @@ display p_actualbudgetco2;
display "shift peakBudgYr right"; display "shift peakBudgYr right";
o_peakBudgYr_Itr(iteration+1) = pm_ttot_val(ttot + 1); !! ttot+1 is the new peakBudgYr o_peakBudgYr_Itr(iteration+1) = pm_ttot_val(ttot + 1); !! ttot+1 is the new peakBudgYr
loop(t$(t.val ge pm_ttot_val(ttot + 1)), loop(t$(t.val ge pm_ttot_val(ttot + 1)),
pm_taxCO2eq(t,regi) = p_taxCO2eq_until2150(ttot+1,regi) pm_taxCO2eq(t,regi) = p_taxCO2eq_until2150(t,regi);
+ (t.val - pm_ttot_val(ttot + 1)) * cm_taxCO2inc_after_peakBudgYr * sm_DptCO2_2_TDpGtC; !! increase by cm_taxCO2inc_after_peakBudgYr per year
); );
); );
......
...@@ -106,5 +106,30 @@ pm_vintage_in(regi,"1",te) = pm_vintage_in(regi,"1",te) * max((pm_histfegrowth(r ...@@ -106,5 +106,30 @@ pm_vintage_in(regi,"1",te) = pm_vintage_in(regi,"1",te) * max((pm_histfegrowth(r
pm_vintage_in(regi,"6",te) = pm_vintage_in(regi,"6",te) * max(((pm_histfegrowth(regi,entyFe)- 0.005 + 1/fm_dataglob("lifetime",te))/(1/fm_dataglob("lifetime",te)) + 1) * 0.75,0.2); pm_vintage_in(regi,"6",te) = pm_vintage_in(regi,"6",te) * max(((pm_histfegrowth(regi,entyFe)- 0.005 + 1/fm_dataglob("lifetime",te))/(1/fm_dataglob("lifetime",te)) + 1) * 0.75,0.2);
); );
$ifthen setGlobal c_scaleEmiHistorical
*re-scale MAgPie reference emissions to be inline with eurostat data (MagPie overestimates non-CO2 GHG emissions by a factor of 50% more)
display p_macBaseMagpie;
loop(enty$(sameas(enty,"ch4rice") OR sameas(enty,"ch4animals") OR sameas(enty,"ch4anmlwst")),
p_macBaseMagpie(ttot,regi,enty)$(p_histEmiSector("2005",regi,"ch4","agriculture","process") AND (ttot.val ge 2005)) =
p_macBaseMagpie(ttot,regi,enty) *
( (p_histEmiSector("2005",regi,"ch4","agriculture","process")+p_histEmiSector("2005",regi,"ch4","lulucf","process")) !!no rescaling needed - REMIND-internal unit is Mt CH4
/
(sum(enty2$(sameas(enty2,"ch4rice") OR sameas(enty2,"ch4animals") OR sameas(enty2,"ch4anmlwst")), p_macBaseMagpie("2005",regi,enty2)) + p_macBaseExo("2005",regi,"ch4agwaste"))
)
;
);
loop(enty$(sameas(enty,"n2ofertin") OR sameas(enty,"n2ofertcr") OR sameas(enty,"n2oanwstc") OR sameas(enty,"n2oanwstm") OR sameas(enty,"n2oanwstp")),
p_macBaseMagpie(ttot,regi,enty)$(p_histEmiSector("2005",regi,"n2o","agriculture","process") AND (ttot.val ge 2005)) =
p_macBaseMagpie(ttot,regi,enty) *
( p_histEmiSector("2005",regi,"n2o","agriculture","process")/( 44 / 28) !! rescaling to Mt N (internal unit for N2O emissions)
* eurostat uses 298 to convert N2O to CO2eq
/
(sum(enty2$(sameas(enty,"n2ofertin") OR sameas(enty2,"n2ofertcr") OR sameas(enty2,"n2oanwstc") OR sameas(enty2,"n2oanwstm") OR sameas(enty2,"n2oanwstp")), p_macBaseMagpie("2005",regi,enty2)) + p_macBaseExo("2005",regi,"n2oagwaste"))
)
;
);
display p_macBaseMagpie;
$endif
*** EOF ./core/preloop.gms *** EOF ./core/preloop.gms
...@@ -326,7 +326,25 @@ p_macLevFree(ttot,regi,enty)$( ttot.val gt 2005 ) ...@@ -326,7 +326,25 @@ p_macLevFree(ttot,regi,enty)$( ttot.val gt 2005 )
p_macUse2005(regi,enty) p_macUse2005(regi,enty)
)$( (ttot.val gt 2040) ) )$( (ttot.val gt 2040) )
; ;
$ifthen setGlobal c_scaleEmiHistorical
**p_macLevFree(ttot,regi,emiMacMagpie(enty))=0;
* Set minimum abatment levels based on historical emissions
p_macLevFree("2010",regi,enty)$(p_histEmiSector("2005",regi,"ch4","agriculture","process") AND (sameas(enty,"ch4rice") OR sameas(enty,"ch4animals") OR sameas(enty,"ch4anmlwst"))) = max( 0, 1 - (p_histEmiSector("2010",regi,"ch4","agriculture","process")+p_histEmiSector("2010",regi,"ch4","lulucf","process"))/(p_histEmiSector("2005",regi,"ch4","agriculture","process")+p_histEmiSector("2005",regi,"ch4","lulucf","process")));
p_macLevFree(ttot,regi,enty)$((ttot.val ge 2015) AND p_histEmiSector("2005",regi,"ch4","agriculture","process") AND (sameas(enty,"ch4rice") OR sameas(enty,"ch4animals") OR sameas(enty,"ch4anmlwst"))) = max( 0, 1 - (p_histEmiSector("2015",regi,"ch4","agriculture","process")+p_histEmiSector("2015",regi,"ch4","lulucf","process"))/(p_histEmiSector("2005",regi,"ch4","agriculture","process")+p_histEmiSector("2005",regi,"ch4","lulucf","process")) );
p_macLevFree("2010",regi,enty)$(p_histEmiSector("2005",regi,"ch4","agriculture","process") AND (sameas(enty,"n2ofertin") OR sameas(enty,"n2ofertcr") OR sameas(enty,"n2oanwstc") OR sameas(enty,"n2oanwstm") OR sameas(enty,"n2oanwstp"))) = max( 0, 1 - (p_histEmiSector("2010",regi,"n2o","agriculture","process")+p_histEmiSector("2010",regi,"n2o","lulucf","process"))/(p_histEmiSector("2005",regi,"n2o","agriculture","process")+p_histEmiSector("2005",regi,"n2o","lulucf","process")) );
p_macLevFree(ttot,regi,emiMacMagpie(enty))$((ttot.val ge 2015) AND p_histEmiSector("2005",regi,"n2o","agriculture","process") AND (sameas(enty,"n2ofertin") OR sameas(enty,"n2ofertcr") OR sameas(enty,"n2oanwstc") OR sameas(enty,"n2oanwstm") OR sameas(enty,"n2oanwstp"))) = max( 0, 1 - (p_histEmiSector("2015",regi,"n2o","agriculture","process")+p_histEmiSector("2015",regi,"n2o","lulucf","process"))/(p_histEmiSector("2005",regi,"n2o","agriculture","process")+p_histEmiSector("2005",regi,"n2o","lulucf","process")) );
p_macLevFree("2010",regi,enty)$((p_histEmiMac("2010",regi,enty)) AND (sameas(enty,"ch4wstl") OR sameas(enty,"ch4wsts"))) = max( 0, 1 - (p_histEmiMac("2010",regi,enty)) /vm_macBase.l("2010",regi,enty) );
p_macLevFree(ttot,regi,enty)$((ttot.val ge 2015) AND (p_histEmiMac("2015",regi,enty)) AND (sameas(enty,"ch4wstl") OR sameas(enty,"ch4wsts"))) = max( 0, 1 - (p_histEmiMac("2015",regi,enty))/vm_macBase.l("2015",regi,enty) );
$else
p_macLevFree(ttot,regi,emiMacMagpie(enty))=0; p_macLevFree(ttot,regi,emiMacMagpie(enty))=0;
$endif
pm_macAbatLev(ttot,regi,enty) = 0.0; pm_macAbatLev(ttot,regi,enty) = 0.0;
pm_macAbatLev("2005",regi,enty) = p_macUse2005(regi,enty); pm_macAbatLev("2005",regi,enty) = p_macUse2005(regi,enty);
pm_macAbatLev("2010",regi,enty) = p_macLevFree("2010",regi,enty); pm_macAbatLev("2010",regi,enty) = p_macLevFree("2010",regi,enty);
......
...@@ -1707,6 +1707,28 @@ sectorExogEmi(all_sectorEmi) "sectors with exogenous emissions" ...@@ -1707,6 +1707,28 @@ sectorExogEmi(all_sectorEmi) "sectors with exogenous emissions"
extraction extraction
indprocess indprocess
/ /
emi_sectors "comprehensive sector set used for more detailed emissions accounting (REMIND-EU) and for CH4 tier 1 scaling - potentially to be integrated with similar set all_exogEmi"
/
power "public electricity and heat production"
refining "petroleum refining"
solids "manufacture of solid fuels and other energy industries"
extraction "fugitive emissions from fuel extraction"
build "Commercial sector, institutional sector and households"
indst "industry (including industrial processes)"
trans "transportation"
agriculture "agriculture (plus forestry and fishing energy use)"
waste "waste management"
cdr "Transport, capture and storage of CO2"
lulucf "Land use, land use change, and forestry (LULUCF)"
bunkers "International bunkers (maritime and aviation)"
other "other sectors and multilateral operations"
indirect
/
sector_types "differentiation of energy and process emissions in each sector"
/
energy "fuel combustion part (and emissions) of the sector activity"
process "process sepecific part (and emissions) of the sector activity"
/
ccsCo2(all_enty) "only cco2 (???)" ccsCo2(all_enty) "only cco2 (???)"
/ /
cco2 cco2
......
...@@ -378,6 +378,7 @@ cm_carbonprice_temperatureLimit = 1.8; !! def = 1.8 ...@@ -378,6 +378,7 @@ cm_carbonprice_temperatureLimit = 1.8; !! def = 1.8
cm_DiscRateScen = 0;!! def = 0 cm_DiscRateScen = 0;!! def = 0
cm_noReboundEffect = 0; cm_noReboundEffect = 0;
$setGlobal cm_EsubGrowth low !! def = low $setGlobal cm_EsubGrowth low !! def = low
$setGlobal c_scaleEmiHistorical off !! def = off
$setGlobal c_regi_nucscen all !! def = all $setGlobal c_regi_nucscen all !! def = all
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment