Skip to content

Commit

Permalink
Merge pull request #1673 from JakobBD/penalize_cementprocessemi
Browse files Browse the repository at this point in the history
make cement process emissions variable for conopt
  • Loading branch information
JakobBD authored May 22, 2024
2 parents 0db5204 + 2924b6b commit e234ac4
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 43 deletions.
27 changes: 15 additions & 12 deletions core/presolve.gms
Original file line number Diff line number Diff line change
Expand Up @@ -117,14 +117,14 @@ loop(regi,

p_priceCO2(ttot,regi) = pm_taxCO2eqSum(ttot,regi) * 1000;

*** Define co2 price for entities that are used in MAC.
*** Define co2 price for entities that are used in MAC.
loop((enty,enty2)$emiMac2mac(enty,enty2), !! make sure that both mac sectors and mac curves have prices asigned as both sets are used in calculations below
pm_priceCO2forMAC(ttot,regi,enty) = p_priceCO2(ttot,regi);
pm_priceCO2forMAC(ttot,regi,enty2) = p_priceCO2(ttot,regi);
);

*** Redefine the MAC price for regions with emission tax defined by the regipol module
$IFTHEN.emiMkt not "%cm_emiMktTarget%" == "off"
$IFTHEN.emiMkt not "%cm_emiMktTarget%" == "off"
loop(ext_regi$regiEmiMktTarget(ext_regi),
loop(regi$regi_groupExt(ext_regi,regi),
*** average CO2 price aggregated by FE
Expand Down Expand Up @@ -169,7 +169,9 @@ vm_macBase.fx(ttot,regi,"ch4wsts")$(ttot.val ge 2005) = p_emineg_econometric(reg
vm_macBase.fx(ttot,regi,"ch4wstl")$(ttot.val ge 2005) = p_emineg_econometric(regi,"ch4wstl","p1") * pm_pop(ttot,regi) * (1000*pm_gdp(ttot,regi) / (pm_pop(ttot,regi)*pm_shPPPMER(regi)))**p_emineg_econometric(regi,"ch4wstl","p2");
vm_macBase.fx(ttot,regi,"n2owaste")$(ttot.val ge 2005) = p_emineg_econometric(regi,"n2owaste","p1") * pm_pop(ttot,regi) * (1000*pm_gdp(ttot,regi) / (pm_pop(ttot,regi)*pm_shPPPMER(regi)))**p_emineg_econometric(regi,"n2owaste","p2");

vm_macBase.fx(ttot,regi,"co2cement_process")$( ttot.val ge 2005 )

$ifthen.fixed_shares "%industry%" == "fixed_shares"
vm_macBase.fx(ttot,regi,"co2cement_process")$( ttot.val ge 2005 )
= ( pm_pop(ttot,regi)
* ( (1 - p_switch_cement(ttot,regi))
* p_emineg_econometric(regi,"co2cement_process","p1")
Expand All @@ -189,6 +191,7 @@ vm_macBase.fx(ttot,regi,"co2cement_process")$( ttot.val ge 2005 )

vm_emiIndBase.fx(ttot,regi,"co2cement_process","cement")$( ttot.val ge 2005 )
= vm_macBase.lo(ttot,regi,"co2cement_process");
$endif.fixed_shares

* *** Reduction of cement demand due to CO2 price markups *** *
if ( NOT (cm_IndCCSscen eq 1 AND cm_CCS_cement eq 1),
Expand All @@ -202,7 +205,7 @@ if ( NOT (cm_IndCCSscen eq 1 AND cm_CCS_cement eq 1),
display "CO2 price for computing Cement Demand Reduction [$/tC]",
pm_CementAbatementPrice;

!! The demand reduction function a = 160 / (p + 200) + 0.2 assumes that demand
!! The demand reduction function a = 160 / (p + 200) + 0.2 assumes that demand
!! for cement is reduced by 40% if the price doubles (CO2 price of $200) and
!! that demand reductions of 80% can be achieved in the limit.
pm_ResidualCementDemand("2005",regi) = 1;
Expand Down Expand Up @@ -230,7 +233,7 @@ if ( NOT (cm_IndCCSscen eq 1 AND cm_CCS_cement eq 1),
display "Cement Demand Reduction, price of limited reduction",
pm_CementAbatementPrice;

!! Costs of cement demand reduction are the integral under the activity
!! Costs of cement demand reduction are the integral under the activity
!! reduction curve times baseline emissions.
!! a = 160 / (p + 200) + 0.2
!! A = 160 ln(p + 200) + 0.2p
Expand Down Expand Up @@ -282,7 +285,7 @@ pm_macAbat(ttot,regi,enty,steps)
;
pm_macAbat(ttot,regi,enty,steps)$(ttot.val gt 2100) = pm_macAbat("2100",regi,enty,steps);

*** Abatement options are in steps of length sm_dmac; options at zero price are
*** Abatement options are in steps of length sm_dmac; options at zero price are
*** in the first step
pm_macStep(ttot,regi,enty)$(MacSector(enty))
= min(801, ceil(pm_priceCO2forMAC(ttot,regi,enty) / sm_dmac) + 1);
Expand All @@ -294,8 +297,8 @@ p_priceGas(ttot,regi)=q_balPe.m(ttot,regi,"pegas")/(qm_budget.m(ttot,regi)+sm_ep
pm_macStep(ttot,regi,"ch4gas")
= min(801, ceil(max(pm_priceCO2forMAC(ttot,regi,"ch4gas") * (25/s_gwpCH4), max(0,(p_priceGas(ttot,regi)-p_priceGas("2005",regi))) ) / sm_dmac) + 1);
pm_macStep(ttot,regi,"ch4coal")
= min(801, ceil(max(pm_priceCO2forMAC(ttot,regi,"ch4coal") * (25/s_gwpCH4), 0.5 * max(0,(p_priceGas(ttot,regi)-p_priceGas("2005",regi))) ) / sm_dmac) + 1);
= min(801, ceil(max(pm_priceCO2forMAC(ttot,regi,"ch4coal") * (25/s_gwpCH4), 0.5 * max(0,(p_priceGas(ttot,regi)-p_priceGas("2005",regi))) ) / sm_dmac) + 1);

*** limit yearly increase of MAC usage to sm_macChange
p_macAbat_lim(ttot,regi,enty)
= sum(steps$(ord(steps) eq pm_macStep(ttot-1,regi,enty)),
Expand All @@ -304,7 +307,7 @@ p_macAbat_lim(ttot,regi,enty)
+ sm_macChange * pm_ts(ttot)
;

*** if intended abatement pm_macAbat is higher than this limit, pm_macStep has to
*** if intended abatement pm_macAbat is higher than this limit, pm_macStep has to
*** be set to the highest step number where pm_macAbat is still lower or equal to
*** this limit
loop ((ttot,regi,MacSector(enty))$(NOT sameas(enty,"co2luc")),
Expand All @@ -317,7 +320,7 @@ loop ((ttot,regi,MacSector(enty))$(NOT sameas(enty,"co2luc")),
);
);

*** In USA, EUR and JPN, abatement measures for CH4 emissions from waste started
*** In USA, EUR and JPN, abatement measures for CH4 emissions from waste started
*** in 1990. These levels of abatement are enforced as a minimum in all
*** scenarios including BAU.
p_macUse2005(regi,enty) = 0.0;
Expand All @@ -329,7 +332,7 @@ p_macUse2005(regi,"ch4wsts")$(pm_gdp_gdx("2005",regi)/pm_pop("2005",regi) ge 10)
*** This includes sum of sub-categories from MAgPIE (see mapping emiMac2mac).
pm_macAbat(ttot,regi,MacSectorMagpie(enty),"1") = 0;

*** phase in use of zero cost abatement options until 2040 if there is no
*** phase in use of zero cost abatement options until 2040 if there is no
*** carbon price
p_macLevFree(ttot,regi,enty)$( ttot.val gt 2005 )
=
Expand Down Expand Up @@ -391,7 +394,7 @@ loop (ttot$( ttot.val ge 2015 ),

Display "computed abatement levels at carbon price", pm_macAbatLev;


***--------------------------------------
*** MAC costs
***--------------------------------------
Expand Down
17 changes: 11 additions & 6 deletions modules/37_industry/subsectors/equations.gms
Original file line number Diff line number Diff line change
Expand Up @@ -81,23 +81,28 @@ $endif.exogDem_scen
*' energy mix, as that is what can be captured); vm_emiIndBase itself is not used for emission
*' accounting, just as a CCS baseline.
***------------------------------------------------------
q37_emiIndBase(t,regi,entyFe,secInd37) ..
vm_emiIndBase(t,regi,entyFe,secInd37)
q37_emiIndBase(t,regi,enty,secInd37)$( entyFeCC37(enty) OR sameas(enty,"co2cement_process") ) ..
vm_emiIndBase(t,regi,enty,secInd37)
=e=
sum((secInd37_2_pf(secInd37,ppfen_industry_dyn37(in)),fe2ppfEn(entyFeCC37(entyFe),in)),
sum((secInd37_2_pf(secInd37,ppfen_industry_dyn37(in)),fe2ppfEn(entyFeCC37(enty),in)),
( vm_cesIO(t,regi,in)
- ( p37_chemicals_feedstock_share(t,regi)
* vm_cesIO(t,regi,in)
)$( in_chemicals_feedstock_37(in) )
)
*
sum(se2fe(entySeFos,entyFe,te),
pm_emifac(t,regi,entySeFos,entyFe,te,"co2")
sum(se2fe(entySeFos,enty,te),
pm_emifac(t,regi,entySeFos,enty,te,"co2")
)
)$(NOT secInd37Prc(secInd37))
+
(s37_clinker_process_CO2
* p37_clinker_cement_ratio(t,regi)
* vm_cesIO(t,regi,"ue_cement")
/ sm_c_2_co2)$(sameas(enty,"co2cement_process") AND sameas(secInd37,"cement"))
+
sum((secInd37_tePrc(secInd37,tePrc),tePrc2opmoPrc(tePrc,opmoPrc)),
v37_emiPrc(t,regi,entyFe,tePrc,opmoPrc)
v37_emiPrc(t,regi,enty,tePrc,opmoPrc)
)$(secInd37Prc(secInd37))
;

Expand Down
24 changes: 0 additions & 24 deletions modules/37_industry/subsectors/presolve.gms

This file was deleted.

1 change: 0 additions & 1 deletion modules/37_industry/subsectors/realization.gms
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ $Ifi "%phase%" == "datainput" $include "./modules/37_industry/subsectors/datainp
$Ifi "%phase%" == "equations" $include "./modules/37_industry/subsectors/equations.gms"
$Ifi "%phase%" == "preloop" $include "./modules/37_industry/subsectors/preloop.gms"
$Ifi "%phase%" == "bounds" $include "./modules/37_industry/subsectors/bounds.gms"
$Ifi "%phase%" == "presolve" $include "./modules/37_industry/subsectors/presolve.gms"
$Ifi "%phase%" == "postsolve" $include "./modules/37_industry/subsectors/postsolve.gms"
*######################## R SECTION END (PHASES) ###############################
*** EOF ./modules/37_industry/subsectors/realization.gms

0 comments on commit e234ac4

Please sign in to comment.