diff --git a/core/presolve.gms b/core/presolve.gms index 312c3f52a..1f20fc765 100644 --- a/core/presolve.gms +++ b/core/presolve.gms @@ -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 @@ -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") @@ -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), @@ -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; @@ -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 @@ -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); @@ -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)), @@ -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")), @@ -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; @@ -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 ) = @@ -391,7 +394,7 @@ loop (ttot$( ttot.val ge 2015 ), Display "computed abatement levels at carbon price", pm_macAbatLev; - + ***-------------------------------------- *** MAC costs ***-------------------------------------- diff --git a/modules/37_industry/subsectors/equations.gms b/modules/37_industry/subsectors/equations.gms index 615662995..37de62fde 100644 --- a/modules/37_industry/subsectors/equations.gms +++ b/modules/37_industry/subsectors/equations.gms @@ -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)) ; diff --git a/modules/37_industry/subsectors/presolve.gms b/modules/37_industry/subsectors/presolve.gms deleted file mode 100644 index d18daabdb..000000000 --- a/modules/37_industry/subsectors/presolve.gms +++ /dev/null @@ -1,24 +0,0 @@ -*** | (C) 2006-2023 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/37_industry/subsectors/presolve.gms - -*' The process emissions from cement production are calculated using a fixed -*' CO2-to-clinker ratio (0.5262 kg CO2/kg clinker), region-specific -*' clinker-to-cement ratios, and the cement production from the production -*' function. -*' Last iteration's cement production value is used, since the MAC mechanism is -*' outside of the optimisation loop. -vm_emiIndBase.fx(ttot,regi,"co2cement_process","cement")$( ttot.val ge 2005 ) - = s37_clinker_process_CO2 - * p37_clinker_cement_ratio(ttot,regi) - * vm_cesIO.l(ttot,regi,"ue_cement") - / sm_c_2_co2; - - -***p37_emiFac(ttot,regi,entyFe) = sum((entySe,te)$(se2fe(entySe,entyFe,te) and entySeFos(entySe)), pm_emifac(ttot,regi,entySe,entyFe,te,"co2")); - -*** EOF ./modules/37_industry/subsectors/presolve.gms diff --git a/modules/37_industry/subsectors/realization.gms b/modules/37_industry/subsectors/realization.gms index 0e0855cd0..bc70e2151 100644 --- a/modules/37_industry/subsectors/realization.gms +++ b/modules/37_industry/subsectors/realization.gms @@ -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