Skip to content
41 changes: 41 additions & 0 deletions core/datainput.gms
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
*** | Contact: remind@pik-potsdam.de
*** SOF ./core/datainput.gms



*AJS* technical. initialize parameters so that they are read from gdx
vm_co2eq.l(ttot,regi) = 0;
vm_emiAll.l(ttot,regi,enty) = 0;
Expand Down Expand Up @@ -1450,6 +1452,18 @@ pm_emifac(ttot,regi,"seliqfos","fepet","tdfospet","co2") = p_ef_dem(regi,"fepet"
pm_emifac(ttot,regi,"seliqfos","fedie","tdfosdie","co2") = p_ef_dem(regi,"fedie") / (sm_c_2_co2*1000*sm_EJ_2_TWa); !! GtC/TWa
pm_emifac(ttot,regi,"segafos","fegat","tdfosgat","co2") = p_ef_dem(regi,"fegas") / (sm_c_2_co2*1000*sm_EJ_2_TWa); !! GtC/TWa

pm_emifac_tailpipe(t,regi,"seliqfos","fehos") = p_ef_dem(regi,"fehos") / (sm_c_2_co2*1000*sm_EJ_2_TWa); !! GtC/TWa
pm_emifac_tailpipe(t,regi,"seliqbio","fehos") = p_ef_dem(regi,"fehos") / (sm_c_2_co2*1000*sm_EJ_2_TWa); !! GtC/TWa
pm_emifac_tailpipe(t,regi,"seliqsyn","fehos") = p_ef_dem(regi,"fehos") / (sm_c_2_co2*1000*sm_EJ_2_TWa); !! GtC/TWa

pm_emifac_tailpipe(t,regi,"segafos","fegas") = p_ef_dem(regi,"fegas") / (sm_c_2_co2*1000*sm_EJ_2_TWa); !! GtC/TWa
pm_emifac_tailpipe(t,regi,"segabio","fegas") = p_ef_dem(regi,"fegas") / (sm_c_2_co2*1000*sm_EJ_2_TWa); !! GtC/TWa
pm_emifac_tailpipe(t,regi,"segasyn","fegas") = p_ef_dem(regi,"fegas") / (sm_c_2_co2*1000*sm_EJ_2_TWa); !! GtC/TWa

pm_emifac_tailpipe(t,regi,"sesofos","fesos") = p_ef_dem(regi,"fesos") / (sm_c_2_co2*1000*sm_EJ_2_TWa); !! GtC/TWa
pm_emifac_tailpipe(t,regi,"sesobio","fesos") = p_ef_dem(regi,"fesos") / (sm_c_2_co2*1000*sm_EJ_2_TWa); !! GtC/TWa


***------ Read in emission factors for process emissions in chemicals sector---
*** calculated using IEA data on feedstocks flows and UNFCCC data on chem sector process emissions
*** these emission factors are for the chemical industry only
Expand Down Expand Up @@ -1592,5 +1606,32 @@ p_prodAllReference(t,regi,te) =
*' initialize vm_changeProdStartyearCost for tax calculation
vm_changeProdStartyearCost.l(t,regi,te) = 0;



*** p_EmiLULUCFCountryAcc contains historic LULUCF emissions from UNFCCC,
*** used for rescaling land-use change emissions for emissions targets based on national accounting
parameter pm_EmiLULUCFCountryAcc(tall,all_regi) "historic co2 emissions from landuse change based on country accounting [Mt CO2/yr]"
/
$ondelim
$include "./modules/47_regipol/regiCarbonPrice/input/p_EmiLULUCFCountryAcc.cs4r"
$offdelim
/
;

*** difference between 2020 land-use change emissions from Magpie and UNFCCC 2015 and 2020 moving average land-use change emissions
pm_LULUCFEmi_GrassiShift(t,regi)$(pm_EmiLULUCFCountryAcc("2020",regi)) =
pm_macBaseMagpie("2020",regi,"co2luc")
-
(
(
((pm_EmiLULUCFCountryAcc("2013",regi) + pm_EmiLULUCFCountryAcc("2014",regi) + pm_EmiLULUCFCountryAcc("2015",regi) + pm_EmiLULUCFCountryAcc("2016",regi) + pm_EmiLULUCFCountryAcc("2017",regi))/5)
+
((pm_EmiLULUCFCountryAcc("2018",regi) + pm_EmiLULUCFCountryAcc("2019",regi) + pm_EmiLULUCFCountryAcc("2020",regi) + pm_EmiLULUCFCountryAcc("2021",regi))/4)
)/2
* 1e-3/sm_c_2_co2
)
;


*** EOF ./core/datainput.gms

26 changes: 26 additions & 0 deletions core/declarations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ p_taxCO2eq_iteration(iteration,ttot,all_regi) "save CO2eq tax used in iter
pm_taxCO2eq_iterationdiff(ttot,all_regi) "help parameter for iterative adjustment of taxes"
pm_taxCO2eq_iterationdiff_tmp(ttot,all_regi) "help parameter for iterative adjustment of taxes"
o_taxCO2eq_iterDiff_Itr(iteration,all_regi) "track p_taxCO2eq_iterationdiff over iterations"
*ACM* parameters for separate markets on emissions and removals
pm_taxCDR(ttot,all_regi) "CDR tax path in T$/GtC = $/kgC. To get $/tCO2, multiply with 272 [T$/GtC]"
p_taxcdr_iterationdiff(ttot,all_regi) "helper parameter for cdr revenue level adjustment"
o_taxCDR_iterDiff_Itr(iteration,all_regi) "output parameter for manual checking of CDR revenue development"

pm_taxemiMkt(ttot,all_regi,all_emiMkt) "CO2 or CO2eq region and emission market specific emission tax"
pm_taxemiMkt_iteration(iteration,ttot,all_regi,all_emiMkt) "CO2 or CO2eq region and emission market specific emission tax per iteration"
pm_emissionsForeign(tall,all_regi,all_enty) "total emissions of other regions (nash relevant)"
Expand Down Expand Up @@ -96,6 +101,7 @@ p_adj_coeff(ttot,all_regi,all_te) "coefficient for adjustment
p_adj_coeff_glob(all_te) "coefficient for adjustment costs - global scale"
p_switch_cement(ttot,all_regi) "describes an s-curve to provide a smooth switching from the short-term behavior (depending on per capita capital investments) to the long-term behavior (constant per capita emissions) of CO2 emissions from cement production"
p_cint(all_regi,all_enty,all_enty,rlf) "additional emissions of GHG from mining, on top of emissions from combustion"
pm_LULUCFEmi_GrassiShift(ttot,all_regi) "difference between Magpie land-use change emissions and UNFCCC emissions in 2015 to correct for national accounting in emissions targets"

$IFTHEN.agricult_base_shift not "%c_agricult_base_shift%" == "off"
p_agricult_base_shift(ext_regi) "fraction by which to scale agricultural emissions of baseline up or down, positive values increase emissions, negative values decrease emissions" / %c_agricult_base_shift% /
Expand All @@ -122,6 +128,8 @@ pm_dataeta(tall,all_regi,all_te) "regional eta data"
p_emi_quan_conv_ar4(all_enty) "conversion factor for various gases to GtCeq"
pm_emifac(tall,all_regi,all_enty,all_enty,all_te,all_enty) "emission factor by technology for all types of emissions in emiTe"
pm_emifacNonEnergy(ttot,all_regi,all_enty,all_enty,emi_sectors,all_enty) "emission factor for non-energy fedstocks. For now only for Chemicals Industry [GtC per TWa]"
*** ACM tail pipe emission factor for industry emissions
pm_emifac_tailpipe(tall,all_regi,all_enty,all_enty) "tail pipe emissions in industry fuel combustion, necessary to calculate industry cdr"
pm_incinerationRate(ttot,all_regi) "share of plastic waste that gets incinerated [fraction]"
pm_omeg (all_regi,opTimeYr,all_te) "technical depreciation parameter, gives the share of a capacity that is still usable after tlt. [none/share, value between 0 and 1]"
p_aux_lifetime(all_regi,all_te) "auxiliary parameter for calculating life times, calculated externally in excel sheet"
Expand Down Expand Up @@ -434,6 +442,13 @@ v_priceOfSpecificGoods(ttot, all_regi,all_te) "Price in in tril$/TWa for
vm_revenueFromSpecificGoods(ttot, all_regi) "Revenue in tril$ from products modelled that are not yet demanded elsewhere in the model, e.g. biochar, carbon fibre products"


*** Variables needed to calculate Industry CDR
vm_IndCDR(ttot,all_regi) "Industry CDR"
vm_IndstShareco2neutrcarbs(ttot,all_regi,entyFE) "Share of hydrocarbon fuels with atmospheric carbon in Industry FE demand"
vm_FracCCS(ttot,all_regi) "share of geologically stored co2 from captured co2"
v_shareAtmCO2inSynfuels(ttot,all_regi) "Share of atmospheric co2 from all captured co2"


;
***----------------------------------------------------------------------------------------
*** EQUATIONS
Expand Down Expand Up @@ -558,6 +573,11 @@ q_demSpecificGoodsCalculation(ttot,all_regi,all_enty,all_te) "derivation for the
q_priceOfSpecificGoods(ttot, all_regi, all_enty,all_te) "e"
qm_revenueOfSpecificGoods(ttot,all_regi) "e"

* equations needed to calculate Industry CDR
q_IndstShareco2neutrcarbs(ttot,all_regi,entyFE) "Share of hydrocarbon fuels with atmospheric carbon in Industry FE demand"
q_FracCCS(ttot,all_regi) "share of geologically stored co2 from captured co2"
q_shareAtmCO2inSynfuels(ttot,all_regi) "Share of atmospheric co2 from all captured co2"

***----------------------------------------------------------------------------------------
***----------------------------------------------trade module------------------------------

Expand Down Expand Up @@ -618,6 +638,12 @@ p_emi_budget1_gdx "budget for global energy-
s_actualbudgetco2 "actual level of 2020-2100 cumulated emissions, including all CO2 for last iteration"
s_actualbudgetco2_last "actual level of 2020-2100 cumulated emissions for previous iteration" /0/


s_actual2050co2 "current iterations actual global co2 emissions in 2050 needed to adjust co2 tax until 2050"
s_actual2050cdr "current iterations actual global cdr amount in 2050 needed to adjust cdr revenues until 2050"
s_actual2050ghgEUR "current iterations actual EUR ghg emissions including land-use cdr in 2050 needed to adjust co2 tax until 2050"
s_actual2050cdrEUR "current iterations actual EUR novel cdr amount in 2050 needed to adjust cdr revenues until 2050"

sm_globalBudget_dev "actual level of global cumulated emissions budget divided by target budget"

sm_eps "small number: 1e-9 " /1e-9/
Expand Down
76 changes: 65 additions & 11 deletions core/equations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -766,26 +766,80 @@ q_emiMac(t,regi,emiMac) ..
)
;

*** Equations for separate carbon markets on emissions and removals
***--------------------------------------------------
*' All CDR emissions summed up
*' Share of atmospheric carbon in captured carbon
***--------------------------------------------------
q_ShareAtmCO2inSynfuels(t,regi)..
v_shareAtmCO2inSynfuels(t,regi)
=e=
!!Atmospheric CO2 (TODO: actually slightly higher, to be accurate atmospheric Industry carbon capture has to be added)
(sum(emiBECCS2te(enty,enty2,te,enty3),vm_emiTeDetail(t,regi,enty,enty2,te,enty3)) !!BECC
+ sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,"cco2","ico2","ccsinje",rlf)) !!DACC + OAE
!! - excluding carbon from fossil and synthetic fegas from DAC heating
- 0.9 * pm_emifac(t,regi,"segafos","fegas","tdfosgas","co2") * vm_demFeSector_afterTax(t,regi,"segafos","fegas","CDR","ETS")
- 0.9 * pm_emifac(t,regi,"segafos","fegas","tdfosgas","co2") * vm_demFeSector_afterTax(t,regi,"segasyn","fegas","CDR","ETS"))
/
!! Divided by all captured CO2 (TODO: To be accurate exclude captured carbon from synfuels in DAC and Industry)
(sum(teCCS2rlf(te,rlf),
vm_co2capture(t,regi,"cco2","ico2","ccsinje",rlf))+sm_eps
)
;

***--------------------------------------------------
*' Share of atmospheric carbon in industry fuels
***--------------------------------------------------
q_IndstShareco2neutrcarbs(t,regi,entyFE)..
vm_IndstShareco2neutrcarbs(t,regi,entyFE)
=e=
(sum(entySeBio(entySE),
sum(emiMkt$(sector2emiMkt("indst",emiMkt)), vm_demFeSector_afterTax(t,regi,entySE,entyFE,"indst",emiMkt)) * pm_emifac_tailpipe(t,regi,entySE,entyFE))
+ sum(entySeSyn(entySE),
sum(emiMkt$(sector2emiMkt("indst",emiMkt)), vm_demFeSector_afterTax(t,regi,entySE,entyFE,"indst",emiMkt)) * pm_emifac_tailpipe(t,regi,entySE,entyFE) * v_shareAtmCO2inSynfuels(t,regi)$((sameas(entySE,"seliqsyn")) OR (sameas(entySE,"segasyn")))))
/
sum(se_carbs(entySE),
sum(emiMkt$(sector2emiMkt("indst",emiMkt)), vm_demFeSector_afterTax(t,regi,entySE,entyFE,"indst",emiMkt)) * pm_emifac_tailpipe(t,regi,entySE,entyFE)
+ sm_eps)
;

***--------------------------------------------------
*' Fraction of captured emissions that get stored geologically
***--------------------------------------------------
q_FracCCS(t,regi)..
vm_FracCCS(t,regi)
=e=
(sum(teCCS2rlf(te,rlf),
vm_co2CCS(t,regi,"cco2","ico2",te,rlf)) /
(sum(teCCS2rlf(te,rlf),
vm_co2capture(t,regi,"cco2","ico2","ccsinje",rlf))+sm_eps))
;


***--------------------------------------------------
*' All novel CDR emissions summed up, negative land-use-change emissions are not included
***--------------------------------------------------
q_emiCdrAll(t,regi)..
vm_emiCdrAll(t,regi)
=e= !! BECC + DACC
=e= !! BECC
(sum(emiBECCS2te(enty,enty2,te,enty3),vm_emiTeDetail(t,regi,enty,enty2,te,enty3))
+ sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,"cco2","ico2","ccsinje",rlf)))
!! + DACC + OAE process calcination emissions (that are carbon neutral as they are overcompensated by ocean uptake)
+ sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,"cco2","ico2","ccsinje",rlf))
!! - fossil CCS from DAC with fegas
- 0.9 * pm_emifac(t,regi,"segafos","fegas","tdfosgas","co2") * vm_demFeSector_afterTax(t,regi,"segafos","fegas","CDR","ETS"))
!! scaled by the fraction that gets stored geologically
* (sum(teCCS2rlf(te,rlf),
vm_co2CCS(t,regi,"cco2","ico2",te,rlf)) /
(sum(teCCS2rlf(te,rlf),
vm_co2capture(t,regi,"cco2","ico2","ccsinje",rlf))+sm_eps))
!! net negative emissions from co2luc
- p_macBaseMagpieNegCo2(t,regi)
!! negative emissions from the cdr module that are not stored geologically
- (vm_emiCdr(t,regi,"co2") + sum(teCCS2rlf(te,rlf), vm_ccs_cdr(t,regi,"cco2","ico2","ccsinje",rlf)))
* vm_FracCCS(t,regi)
!! OAE net ocean
+ (1 - s33_OAE_chem_decomposition) * vm_emiCdrTeDetail(t, regi, "oae")
!! CDR from enhanced weathering
+ vm_emiCdrTeDetail(t, regi, "weathering")
!! negative emissions from biochar
- sum(emiBiochar2te(enty,enty2,te,enty3), vm_emiTeDetail(t,regi,enty,enty2,te,enty3))
!! Industry CDR (CCS from carbon neutral fuels)
+ vm_IndCDR(t,regi)
;



***------------------------------------------------------
*' Total regional emissions are the sum of emissions from technologies, MAC-curves, CDR-technologies and emissions that are exogenously given for REMIND.
***------------------------------------------------------
Expand Down
Loading