diff --git a/.gitignore b/.gitignore index e38ef5e15f..3e2842b3fc 100644 --- a/.gitignore +++ b/.gitignore @@ -79,6 +79,9 @@ runtime.rds # ignore RStudio project files /*.Rproj +# ignore VS Code workspace files +/.vscode/ + # Main Python virtual environment .venv/ diff --git a/core/datainput.gms b/core/datainput.gms index 639ecf2e94..df9a9b6582 100644 --- a/core/datainput.gms +++ b/core/datainput.gms @@ -770,12 +770,50 @@ pm_cf(ttot,regi,"tdsynhos") = 0.6; pm_cf(ttot,regi,"tdsynpet") = 0.7; pm_cf(ttot,regi,"tdsyndie") = 0.7; *** eternal short-term fix for process-based industry +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" +pm_cf(ttot,regi,"chemOld") = 0.8; +pm_cf(ttot,regi,"chemElec") = 0.8; +pm_cf(ttot,regi,"chemH2") = 0.8; + +pm_cf(ttot,regi,"stCrNg") = 0.8; +pm_cf(ttot,regi,"stCrLiq") = 0.8; +pm_cf(ttot,regi,"stCrChemRe") = 0.8; + +pm_cf(ttot,regi,"mechRe") = 0.8; + +pm_cf(ttot,regi,"meSySol") = 0.8; +pm_cf(ttot,regi,"meSyNg") = 0.8; +pm_cf(ttot,regi,"meSyLiq") = 0.8; +pm_cf(ttot,regi,"meSySol_cc") = 0.8; +pm_cf(ttot,regi,"meSyNg_cc") = 0.8; +pm_cf(ttot,regi,"meSyLiq_cc") = 0.8; +pm_cf(ttot,regi,"meSyH2") = 0.8; +pm_cf(ttot,regi,"meSyChemRe") = 0.8; + +pm_cf(ttot,regi,"amSyCoal") = 0.8; +pm_cf(ttot,regi,"amSyNG") = 0.8; +pm_cf(ttot,regi,"amSyLiq") = 0.8; +pm_cf(ttot,regi,"amSyCoal_cc") = 0.8; +pm_cf(ttot,regi,"amSyNG_cc") = 0.8; +pm_cf(ttot,regi,"amSyLiq_cc") = 0.8; +pm_cf(ttot,regi,"amSyH2") = 0.8; + +pm_cf(ttot,regi,"mtoMta") = 0.8; +pm_cf(ttot,regi,"mtoMtaH2") = 0.8; +pm_cf(ttot,regi,"fertProd") = 0.8; +pm_cf(ttot,regi,"fertProdH2") = 0.8; +pm_cf(ttot,regi,"meToFinal") = 0.8; +pm_cf(ttot,regi,"amToFinal") = 0.8; + +$endif.cm_subsec_model_chemicals +$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" pm_cf(ttot,regi,"bf") = 0.8; pm_cf(ttot,regi,"eaf") = 0.8; pm_cf(ttot,regi,"bof") = 0.8; pm_cf(ttot,regi,"idr") = 0.8; pm_cf(ttot,regi,"idrcc") = 1.0; !! capex is derived from numbers per ton of CO2, where cf = 1 is assumed in conversion pm_cf(ttot,regi,"bfcc") = 1.0; !! capex is derived from numbers per ton of CO2, where cf = 1 is assumed in conversion +$endif.cm_subsec_model_steel *RP* phasing down the ngt cf to "peak load" cf of 5% pm_cf(ttot,regi,"ngt")$(ttot.val eq 2025) = 0.9 * pm_cf(ttot,regi,"ngt"); @@ -848,7 +886,7 @@ pm_omeg(regi,opTimeYr,te) = max(0, 1 - ((opTimeYr.val - 0.5) / p_lifetime_max(re *** Map each technology with its possible age opTimeYr2te(te,opTimeYr) $ sum(regi $ (pm_omeg(regi,opTimeYr,te) > 0), 1) = yes; -*** Map each model timestep with the possible age of technologies +*** Map each model timestep with the possible age of technologies tsu2opTimeYr(ttot,"1") = yes; loop((ttot,ttot2) $ (ord(ttot2) le ord(ttot)), loop(opTimeYr $ (opTimeYr.val = pm_ttot_val(ttot) - pm_ttot_val(ttot2) + 1), @@ -999,9 +1037,9 @@ $offdelim p_abatparam_CH4(tall,all_regi,all_enty,steps)$(ord(steps) gt 201) = p_abatparam_CH4(tall,all_regi,all_enty,"201"); p_abatparam_N2O(tall,all_regi,all_enty,steps)$(ord(steps) gt 201) = p_abatparam_N2O(tall,all_regi,all_enty,"201"); -*** Read methane emissions from fossil fuel extraction for calculating emission factors. +*** Read methane emissions from fossil fuel extraction for calculating emission factors. *** The base year determines whether the data comes from CEDS or EDGAR -$ifthen %cm_emifacs_baseyear% == "2005" +$ifthen %cm_emifacs_baseyear% == "2005" parameter p_emiFossilFuelExtr(all_regi,all_enty) "methane emissions in 2005 [Mt CH4], needed for the calculation of p_efFossilFuelExtr" / $ondelim @@ -1250,6 +1288,33 @@ loop(ttot$(ttot.val ge 2005), p_adj_seed_te(ttot,regi,'dac') = 0.25; p_adj_seed_te(ttot,regi,'oae_ng') = 0.25; p_adj_seed_te(ttot,regi,'oae_el') = 0.25; +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + !! not all existing tech are used in all regions + !! Low seeds for these prevent switching between exisitng tech + !! High seeds for new tech like H2 makes ist easy to switch to that. + !! Seeds have little/no effect on tech with large exisitng cap in a region + !!p_adj_seed_te(ttot,regi,"chemElec") = 0.50; + !!p_adj_seed_te(ttot,regi,"chemH2") = 0.50; + p_adj_seed_te(ttot,regi,"meSySol") = 0.0001; + p_adj_seed_te(ttot,regi,"meSyNg") = 0.0001; + p_adj_seed_te(ttot,regi,"meSyLiq") = 0.0001; + p_adj_seed_te(ttot,regi,"meSySol_cc") = 0.0001; + p_adj_seed_te(ttot,regi,"meSyNg_cc") = 0.0001; + p_adj_seed_te(ttot,regi,"meSyLiq_cc") = 0.0001; + p_adj_seed_te(ttot,regi,"meSyH2") = 0.25; + p_adj_seed_te(ttot,regi,"amSyCoal") = 0.0001; + p_adj_seed_te(ttot,regi,"amSyNG") = 0.0001; + p_adj_seed_te(ttot,regi,"amSyLiq") = 0.0001; + p_adj_seed_te(ttot,regi,"amSyCoal_cc") = 0.0001; + p_adj_seed_te(ttot,regi,"amSyNG_cc") = 0.0001; + p_adj_seed_te(ttot,regi,"amSyLiq_cc") = 0.0001; + p_adj_seed_te(ttot,regi,"amSyH2") = 2.0; + p_adj_seed_te(ttot,regi,"stCrLiq") = 0.0001; + p_adj_seed_te(ttot,regi,"stCrNg") = 0.0001; + p_adj_seed_te(ttot,regi,"mtoMta") = 0.0001; + p_adj_seed_te(ttot,regi,"mtoMtaH2") = 0.25; + p_adj_seed_te(ttot,regi,"fertProdH2") = 2.0; +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" *** steel technologies p_adj_seed_te(ttot,regi,"bfcc") = 0.05; @@ -1304,6 +1369,32 @@ $endif.cm_subsec_model_steel p_adj_coeff(ttot,regi,"dac") = 0.8; p_adj_coeff(ttot,regi,'oae_ng') = 0.8; p_adj_coeff(ttot,regi,'oae_el') = 0.8; +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + !! scaling factor for adjustment costs + !! old technologies have high costs, new technologies have low costs + !! default = 0.25 + !!p_adj_coeff(ttot,regi,"chemElec") = 0.25; + !!p_adj_coeff(ttot,regi,"chemH2") = 1.0; + p_adj_coeff(ttot,regi,"meSySol") = 3.0; + p_adj_coeff(ttot,regi,"meSyNg") = 3.0; + p_adj_coeff(ttot,regi,"meSyLiq") = 3.0; + p_adj_coeff(ttot,regi,"meSySol_cc") = 3.0; + p_adj_coeff(ttot,regi,"meSyNg_cc") = 3.0; + p_adj_coeff(ttot,regi,"meSyLiq_cc") = 3.0; + p_adj_coeff(ttot,regi,"meSyH2") = 0.8; + p_adj_coeff(ttot,regi,"amSyCoal") = 3.0; + p_adj_coeff(ttot,regi,"amSyNG") = 3.0; + p_adj_coeff(ttot,regi,"amSyLiq") = 3.0; + p_adj_coeff(ttot,regi,"amSyCoal_cc") = 3.0; + p_adj_coeff(ttot,regi,"amSyNG_cc") = 3.0; + p_adj_coeff(ttot,regi,"amSyLiq_cc") = 3.0; + p_adj_coeff(ttot,regi,"amSyH2") = 0.1; + p_adj_coeff(ttot,regi,"stCrLiq") = 3.0; + p_adj_coeff(ttot,regi,"stCrNg") = 3.0; + p_adj_coeff(ttot,regi,"mtoMta") = 1.0; + p_adj_coeff(ttot,regi,"mtoMtaH2") = 0.8; + p_adj_coeff(ttot,regi,"fertProdH2") = 0.1; +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" *** steel technologies p_adj_coeff(ttot,regi,"bfcc") = 1.0; @@ -1488,7 +1579,7 @@ $offdelim parameter p_macBaseIMAGE(tall,all_regi,all_enty) "baseline emissions of N2O from transport, adipic acid production, and nitric acid production based on data from van Vuuren" / $ondelim -$ifthen %cm_emifacs_baseyear% == "2005" +$ifthen %cm_emifacs_baseyear% == "2005" $include "./core/input/p_macBaseVanv.cs4r" $else $include "./core/input/p_macBaseHarmsen2022.cs4r" @@ -1587,12 +1678,25 @@ pm_emifacNonEnergy(ttot,regi,"segafos", "fegas","indst","co2") = f_nechem_emissi ***------ Read in projections for incineration rates of plastic waste--- *** "incineration rates [fraction]" + parameter f_incinerationShares(ttot,all_regi) "incineration rate of plastic waste" + +$ifthen.PlasticMFA "%cm_PlasticMFA%" == "on" +/ +$ondelim +$include "./core/input/f_incinerationSharesMFA.cs4r" +$offdelim +/; +$endif.PlasticMFA + +$ifthen.PlasticMFA "%cm_PlasticMFA%" == "off" / $ondelim $include "./core/input/f_incinerationShares.cs4r" $offdelim /; +$endif.PlasticMFA + pm_incinerationRate(ttot,all_regi)=f_incinerationShares(ttot,all_regi); *** some balances are not matching by small amounts; @@ -1669,7 +1773,7 @@ execute_load "input_ref.gdx", p_prodSeReference = vm_prodSe.l; execute_load "input_ref.gdx", pm_prodFEReference = vm_prodFe.l; execute_load "input_ref.gdx", p_prodUeReference = v_prodUe.l; execute_load "input_ref.gdx", p_co2CCSReference = vm_co2CCS.l; -*' load MAC costs from reference gdx. Values for t (i.e. after cm_start_year) will be overwritten in core/presolve.gms +*' load MAC costs from reference gdx. Values for t (i.e. after cm_start_year) will be overwritten in core/presolve.gms execute_load "input_ref.gdx" pm_macCost; ); diff --git a/core/input/generisdata_tech.prn b/core/input/generisdata_tech.prn index 71fe648676..2eefb6c17d 100644 --- a/core/input/generisdata_tech.prn +++ b/core/input/generisdata_tech.prn @@ -167,6 +167,36 @@ ccap0 0.0008 learn 0.15 +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" ++ chemOld chemElec chemH2 stCrNg stCrLiq amSyCoal amSyNG amSyLiq amSyH2 meSySol meSyNG meSyLiq meSyH2 +!! documentation & sources: see below +inco0 500 500 500 1080 1040 2100 875 1190 1250 520 300 290 1050 +omf 0.06 0.06 0.06 0.025 0.025 0.05 0.025 0.025 0.04 0.05 0.025 0.025 0.015 +constrTme 3 3 3 3 3 3 3 3 3 3 3 3 3 +lifetime 30 30 30 30 30 30 30 30 30 30 30 30 30 + ++ amSyCoal_cc amSyNg_cc amSyLiq_cc meSySol_cc meSyNg_cc meSyLiq_cc +!! documentation & sources: see below +inco0 610 650 610 855 1003 855 +omf 0.05 0.05 0.05 0.05 0.025 0.05 +constrTme 1 1 1 1 1 1 +lifetime 25 25 25 25 25 25 + ++ mtoMta mtoMtaH2 fertProd fertProdH2 amToFinal meToFinal +!! documentation & sources: see below +inco0 533 533 3280 3280 500 500 +omf 0.025 0.025 0.03 0.03 0.06 0.06 +constrTme 3 3 3 3 3 3 +lifetime 30 30 30 30 30 30 + ++ mechRe stCrChemRe meSyChemRe +!! documentation & sources: see below +inco0 318 2146 49 +omf 0.03 0.03 0.055 +constrTme 3 3 3 +lifetime 30 30 30 + +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" *** industry processes + bf bof idr eaf @@ -345,6 +375,156 @@ bfcc: idrcc: make slightly cheaper than bfcc as there is only one point source +chemOld chemElec and chemH2: + arbitrary value, as long as it's the same between all three. + 500 is commonly used in other tech + Saving later for Heat Gerneration Split + + +stCrNg and stCrLiq: + + Note: Steam crackers create a range of different products. + As a general principle, all carbon-containing products are included in the calculation as a reference for specific CAPEX etc, and produced hydrogen is used directly as an energy input. + + for Naphtha Steam Cracking + CAPEX ~ 2057 $/t Ethylene + (Sources: IEA, The Future of Petrochemicals: Towards more sustainable plastics and fertilisers, Paris, 2018. Table A3) + + Output ratio: 97.2 Naphtha → 31.86 Ethylene + 13.01 Propylene + 17.48 BTX + 3.78 Others + (Sources: Spallina17 Table 5.) + + inco0 ~ 2057 $/t * (31.86/(31.86+13.01+17.48)) /USD_2017 * USD_2015 ~ 1040 $/t + omf ~ 0.025 + + for NG Steam Cracking + CAPEX ~ 369.4(gas processing) + 912.6(co-Cracking) = 1282 Million $ + (Sources: Minbo Yang 2017. Table 2+3) + + Output ratio: 197.3 Ethane-propane → 125.0 Ethylene + 28.4 Propylene + 1.6 BTX + 10.8 Others [t/h] + (Sources: Minbo Yang 2017. Table 1) + + inco0 ~ 1282 Million $ * (1/(125.0+28.4+1.6)) /8760/0.8*1000*1000 /USD_2017 * USD_2015 ~ 1080 $/t + omf ~ 0.025 + + + +amSyCoal amSyNG amSyLiq and amSyH2: + + amSyCoal: + inco0 ~ 2175 /USD_2017 * USD_2015 ~ 2100 $/t + omf ~ 0.05 + (Sources: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5) + + amSyNG: + inco0 ~ 905 /USD_2017 * USD_2015 ~ 875 $/t + omf ~ 0.025 + (Sources: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 4) + + amSyLiq: + inco0 ~ 1203 /USD_2016 * USD_2015 ~ 1190 $/t + omf ~ 0.025 + (Sources: IEA, The Future of Petrochemicals: Towards more sustainable plastics and fertilisers, Paris, 2018. Table A3) + + amSyH2: + inco0 ~ 1.69 MEUR_2020/MW:LHV *1000 / 3.6 MJ/MWh * 18.9 MJ/kg * 1.08 USD/EUR = 9564 kgNH3/h + 9412 kgNH3/h / (8760 / 0.8 * 1000) /USD_2020 * USD_2015 ~ 1250 $/t + (Sources: Technology Data for Renewable Fuels by Danish Energy Agency. 103 Hydrogen to Ammonia) + omf ~ 0.04 + (Fasihi, M., Breyer, C., 2024. Global production potential of green methanol based on variable renewable electricity. Energy Environ. Sci. 17, 3503–3522. Table S10) + +amSyCoal_cc amSyNG_cc amSyLiq_cc: + + amSyCoal_cc: + Captured carbon ~ (3.9 kgCO2/kg - 0.2 kgCO2/kg) / 44 * 12 = 1.009 + inco0 ~ (2810 $/t - 2175 $/t) / 1.009 kgC/kg /USD_2017 * USD_2015 ~ 610 $/t + omf ~ 0.05 + (Sources: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5) + + amSyNG_cc: + Captured carbon ~ (2.35 kgCO2/kg - 0.12 kgCO2/kg) / 44 * 12 = 0.608 + inco0 ~ (1315 $/t - 905 $/t) / 0.608 kgC/kg /USD_2017 * USD_2015 ~ 650 $/t + omf ~ 0.05 + (Sources: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5) + + amSyLiq_cc: + nodata, just Assume same as asSyCoal_cc + +meSySol meSyNG meSyLiq and meSyH2: + meSySol: + inco0 ~ 26.7 BRMB_2024 / 6 Mt/a /USD_2024 * USD_2015 ~ 520$/t + (Sources: Real Chinese Project https://www.cgmia.org.cn/Web/News/Detail/21080) + omf ~ 0.05 + (Sources: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5) + + meSyNG: + inco0 ~ 310 /USD_2017 * USD_2015 ~ 300 $/t + omf ~ 0.025 + (Sources: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5) + + meSyLiq: + inco0 ~ 295 /USD_2016 * USD_2015 ~ 290 $/t + omf ~ 0.025 + (Sources: IEA, The Future of Petrochemicals: Towards more sustainable plastics and fertilisers, Paris, 2018. Table A3) + + meSyH2: + inco0 ~ 1.35 MEUR_2020/MW:LHV *1000 / 3.6 MJ/MWh * 19.9 MJ/kg * 1.08 USD/EUR = 8035 kgMeOH/h + 8035 kgNH3/h / (8760 / 0.8 * 1000) /USD_2020 * USD_2015 ~ 1050 $/t + (Sources: Technology Data for Renewable Fuels by Danish Energy Agency. 98 Methanol from hydrogen) + omf ~ 0.015 + (Sources: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5) + +meSySol_cc meSyNg_cc meSyLiq_cc: + + meSySol_cc: + Captured carbon ~ (3.3 kgCO2/kg - 0.17 kgCO2/kg) / 44 * 12 = 0.854 + inco0 ~ (1505 $/t - 750 $/t) / 0.854 kgC/kg /USD_2017 * USD_2015 ~ 855 $/t + omf ~ 0.05 + (Sources: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5) + + meSyNg_cc: + Captured carbon ~ (0.8 kgCO2/kg - 0.04 kgCO2/kg) / 44 * 12 = 0.207 + inco0 ~ (525 $/t - 310 $/t) / 0.207 kgC/kg /USD_2017 * USD_2015 ~ 1003 $/t + omf ~ 0.025 + (Sources: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5) + + meSyLiq_cc: + nodata, just Assume same as meSySol_cc + +mtoMta mtoMtaH2: + + inco0 ~ 320MM$ per (386 Propylene + 214 Ethylene) kt/a /600 * 1000 ~ 533 $/t + (Sources: S. Jasper and M. M. El-Halwagi, Processes, 2015, 3, 684–698. Table 2) + omf ~ 0.025 + (Sources: IEA, The Future of Petrochemicals: Towards more sustainable plastics and fertilisers, Paris, 2018. Table A3) + +fertProd fertProdH2: + + inco0 ~ 4.03MM$ per 1000t/a * 1000 /USD_2022 * USD_2015 ~ 3280 $/t + (Sources: Palys23 Section 2.3, Page 6) + omf ~ 0.03 + (Sources: Palys23 Section 2.3, Page 6) + +amToFinal meToFinal: + + dummy tech, zero cost + +mechRe meSyChemRe and stCrChemRe: + + for Mechanical Recycling + inco0 ~ 17.18MM$ per 150t/d /150 / (8760 * 0.8) /USD_2022 * USD_2015 ~ 318 $/t + omf = 0.03 (dummy number) + (Sources: Taylor Uekert 2023 Table S28.) + + for Chemical Recycling: Pyrolysis + inco0 ~ 107MM$ per 49.24kt/year /49.24 * 1000 /USD_2016 * USD_2015 ~ 2146 $/t + omf = 0.03 (dummy number) + (Sources: Geetanjali Yadav 2023 Table1, Table S9.) + + for Chemical Recycling: Gasification + inco0 ~ 148MM$ per 353.8 t/d /353.8 / (8760 * 0.8) USD_2022 * USD_2015 ~ 49 $/t + omf ~ 8.18 MUSD_2022/year /148.8 MUSD_2022 = 0.055 + (Sources: Afzal, Shaik, et al., Green Chemistry 25.13 (2023): 5068-5085. Table S3 and S4.) + $offtext *** EOF ./core/input/generisdata_tech.prn diff --git a/core/input/generisdata_vintages.prn b/core/input/generisdata_vintages.prn index d79369e3e8..649316cdab 100644 --- a/core/input/generisdata_vintages.prn +++ b/core/input/generisdata_vintages.prn @@ -165,6 +165,19 @@ $offtext 41 1.0 +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" ++ ChemOld StCrNG StCrLiq MeSySol MeSyNG MeSyLiq AmSyCoal AmSyNG AmSyLiq MtOMtA FertProd +1 1.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 +6 1.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 +11 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +16 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +21 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +26 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +31 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +36 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 +$endif.cm_subsec_model_chemicals + + $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" + bf bof idr eaf 1 1.0 1.0 1.0 1.0 diff --git a/core/sets.gms b/core/sets.gms index 2fdc406625..b6af359736 100755 --- a/core/sets.gms +++ b/core/sets.gms @@ -299,7 +299,88 @@ all_te "all energy technologies, including from modules" termX_nh3 "Export terminals for liquid ammonia (liquification)" termM_nh3 "Import terminals for liquid ammonia (regasification)" vess_nh3 "Vessels transporting liquid ammonia" -*** PCV: technologies related to steel + +*** technologies related to chemicals industry + chemOld + chemElec + chemH2 + + stCrNg + stCrLiq + stCrChemRe + + mechRe + + meSySol + meSyNg + meSyLiq + meSySol_cc + meSyNg_cc + meSyLiq_cc + meSyH2 + meSyChemRe + + amSyCoal + amSyNG + amSyLiq + amSyCoal_cc + amSyNG_cc + amSyLiq_cc + amSyH2 + + mtoMta + mtoMtaH2 + fertProd + fertProdH2 + meToFinal + amToFinal + + otherChem_old + otherChem_elec + otherChem_h2 + + mech_recycle + + hvc_stCrLiq + hvc_stCrNg + hvc_stCrChemRe + hvc_meSol + hvc_meNg + hvc_meLiq + hvc_meSol_gh2 + hvc_meSol_cc + hvc_meNg_cc + hvc_meLiq_cc + hvc_meh2 + hvc_mechemRe + + fertilizer_amSol + fertilizer_amNg + fertilizer_amLiq + fertilizer_amLiq_cc + fertilizer_amNg_cc + fertilizer_amSol_cc + fertilizer_amh2 + + meFinal_sol + meFinal_ng + meFinal_liq + meFinal_sol_gh2 + meFinal_sol_cc + meFinal_ng_cc + meFinal_liq_cc + meFinal_h2 + meFinal_chemRe + + amFinal_sol + amFinal_ng + amFinal_liq + amFinal_sol_cc + amFinal_ng_cc + amFinal_liq_cc + amFinal_h2 + +*** technologies related to steel industry ironMine "Mining of iron ore" idr "Iron direct reduction" eaf "Electric-arc furnace" @@ -313,9 +394,10 @@ all_te "all energy technologies, including from modules" idreaf_ng "Route: NG Direct reduction / EAF without CCS" idreaf_ng_ccs "Route: H2 Direct reduction / EAF with CCS" seceaf "Route: Scrap-loaded EAF" + pcc "outdated technology, only here to avoid compilation errors if input data containing information for this technology are used" pco "outdated technology, only here to avoid compilation errors if input data containing information for this technology are used" -*** transport technologies for deleted realization complex of module 35_transport +*** transport technologies for deleted realization complex of module 35_transport *** only here to make it possible to process input data that still includes data for these obsolete transport technologies apCarPeT "outdated transport technology" apCarDiT "outdated transport technology" @@ -397,6 +479,24 @@ all_enty "all types of quantities" entydummy "dummy FE for process based industry implementation" *** materials, feedstock, and industrial goods + + co2f "feedstock CO2" + co2fdummy "feedstock CO2 deummy" + +*** chemicals + otherChem + hvc + fertilizer + methanol + methanolH2 + ammonia + ammoniaH2 + methFinal + ammoFinal + naphtha + plasticWaste + +*** steel prsteel "Primary steel" sesteel "Secondary steel" dri "Directly reduced iron" @@ -489,7 +589,7 @@ all_enty "all types of quantities" perm "Carbon permit" peog "aggregated oil and gas, only relevant for calibration because IEA only provides aggregated data" bfco2 "CO2 emission from blast furnace" - + *** outdated entries, still used in module 04 until structuremappings are fixed fesoi "industry use of solid energy carriers" fehoi "industry use of liquid energy carriers" @@ -1095,7 +1195,7 @@ ttot(tall) "time index with spin-up, years between 1900 and 2150 with 5 to 20 *** 10-year intervals from 2060 to 2110, *** 20-year intervals from 2110 to 2150. / - 1900, 1905, 1910, 1915, 1920, 1925, 1930, 1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, 1980, 1985, 1990, 1995, 2000, + 1900, 1905, 1910, 1915, 1920, 1925, 1930, 1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, 1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020, 2025, 2030, 2035, 2040, 2045, 2050, 2055, 2060, 2070, 2080, 2090, 2100, 2110, 2130, 2150 @@ -1252,6 +1352,41 @@ te(all_te) "energy technologies" termX_lng "Export terminals for LNG (liquification)" termM_lng "Import terminals for LNG (regasification)" vess_lng "Vessels transporting LNG" +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + chemOld + chemElec + chemH2 + + stCrNg + stCrLiq + stCrChemRe + + mechRe + + meSySol + meSyNg + meSyLiq + meSySol_cc + meSyNg_cc + meSyLiq_cc + meSyH2 + meSyChemRe + + amSyCoal + amSyNG + amSyLiq + amSyCoal_cc + amSyNG_cc + amSyLiq_cc + amSyH2 + + mtoMta + mtoMtaH2 + fertProd + fertProdH2 + amToFinal + meToFinal +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" idr "Iron direct reduction" eaf "Electric-arc furnace" @@ -1333,6 +1468,30 @@ teAdj(all_te) "technologies with adjustment costs on capacity addition *** gridwind "grid between areas with high wind onshore production and the rest" gridwindon "grid between areas with high wind onshore production and the rest" gridwindoff "grid between areas with high wind offshore production and the rest" +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + chemElec "Other chemicals by Electricity" + chemH2 "Other chemicals by Hydrogen" + meSySol "Methanol by Soilds" + meSyNg "Methanol by Gas" + meSyLiq "Methanol by Liquids" + meSySol_cc "Methanol by Soilds CCS" + meSyNg_cc "Methanol by Gas CCS" + meSyLiq_cc "Methanol by Liquids CCS" + meSyH2 "Methanol by Hydrogen" + meSyChemRe "Methanol by Chemical Recycling" + amSyCoal "Ammonia by Coal" + amSyNG "Ammonia by Gas" + amSyLiq "Ammonia by Liquids" + amSyCoal_cc "Ammonia by Coal CCS" + amSyNG_cc "Ammonia by Gas CCS" + amSyLiq_cc "Ammonia by Liquids CCS" + amSyH2 "Ammonia by Hydrogen" + stCrLiq "Steam cracking by Naphtha" + stCrNg "Steam cracking by Natural Gas" + stCrChemRe "Steam cracking by Chemical Recycling" + mechRe "Mechanical Recycling" + mtoMta "Methanol to Olefins and Aromatics" +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" bfcc "Blast furnace CCS" idrcc "Direct reduction CCS" @@ -1960,7 +2119,9 @@ MacSector(all_enty) "sectors for which mac curves exist. Some MACs are used for n2owaste "waste (domestic sewage)" co2luc "land use change" co2cement "cement production (only process emissions)" +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" co2chemicals +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" co2steel $endif.cm_subsec_model_steel @@ -2778,7 +2939,9 @@ emiMac2mac(all_enty,all_enty) "mapping of emission sources to MACs - co2luc.co2luc co2cement_process. co2cement "process emissions are captured by kiln CCS too" co2cement . co2cement +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" co2chemicals . co2chemicals +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" co2steel . co2steel $endif.cm_subsec_model_steel @@ -2797,7 +2960,10 @@ emiMac2sector(all_enty,emi_sectors,sector_types,all_enty) "mapping of (n2ofertin, n2ofertcr, n2ofertsom, n2oanwstc, n2oanwstm, n2oanwstp, n2oagwaste).agriculture.process.n2o (n2oforest, n2osavan, n2opeatland).lulucf.process.n2o - (co2cement_process,co2cement,co2chemicals).indst.process.co2 + (co2cement_process,co2cement).indst.process.co2 +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" + co2chemicals.indst.process.co2 +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" co2steel.indst.process.co2 $endif.cm_subsec_model_steel diff --git a/core/sets_calculations.gms b/core/sets_calculations.gms index 45176259b9..6c2a838264 100644 --- a/core/sets_calculations.gms +++ b/core/sets_calculations.gms @@ -37,7 +37,7 @@ peRicardian(enty) = peBio(enty) + peEx(enty); en2se(enty,enty2,te) = pe2se(enty,enty2,te) + se2se(enty,enty2,te); en2en(enty,enty2,te) = pe2se(enty,enty2,te) + se2se(enty,enty2,te) + se2fe(enty,enty2,te) + fe2ue(enty,enty2,te) + ccs2te(enty,enty2,te) + fe2mat(enty,enty2,te); -te2rlf(te,rlf) = teFe2rlf(te,rlf) + teSe2rlf(te,rlf) + teue2rlf(te,rlf) + teCCS2rlf(te,rlf) + teCCU2rlf2(te,rlf) +teNoTransform2rlf(te,rlf) + teFe2rlfH2BI(te,rlf) + teMat2rlf(te,rlf); +te2rlf(te,rlf) = teFe2rlf(te,rlf) + teSe2rlf(te,rlf) + teue2rlf(te,rlf) + teCCS2rlf(te,rlf) + teSeCCU2rlf(te,rlf) +teNoTransform2rlf(te,rlf) + teFe2rlfH2BI(te,rlf) + teMat2rlf(te,rlf); ***---------------------------------------------------------------------------- *** Fill sets that were created empty and should be filled from the mappings above ***---------------------------------------------------------------------------- diff --git a/main.gms b/main.gms index 1633607c04..96e22ecd6b 100755 --- a/main.gms +++ b/main.gms @@ -1265,6 +1265,11 @@ parameter cm_wastelag "switch to decide whether waste from plastics lags ten years behind plastics production" ; cm_wastelag = 0; !! def = 0 no waste lag !! regexp = 1|0 +parameter + cm_maxIndPrcShareChange "Max change of share of historically used chemicals industry processes between time steps" +; + cm_maxIndPrcShareChange = 0.05; !! def 0.05 = 5 percent points change between time steps +*' *' parameter c_edgetReportAfter2010 "switch that turns on overwriting of EDGE-T results for 2005 and 2010 by NAs when set to 1" @@ -1932,6 +1937,8 @@ $setglobal cm_subsec_model_steel processes !! def = processes !! regexp = pro *** (off) no bounds for 2025 *** (on) some generous bounds for 2025 assuming that certain developments are not possible anymore even for fast growing technologies given 2023 data $setglobal cm_tech_bounds_2025 on !! def = on !! regexp = on|off +*** cm_subsec_model_chemicals "switch between ces-based and process-based chemicals implementation in subsectors realisation of industry module" +$setglobal cm_subsec_model_chemicals processes !! def = processes !! regexp = processes|ces *** set conopt version. Warning: conopt4 is in beta $setGlobal cm_conoptv conopt3 !! def = conopt3 *' c_empty_model "Short-circuit the model, just use the input as solution" @@ -1982,6 +1989,7 @@ $setGlobal cm_chaCoalBounds off !! def = off *' * (on): also non-optimal regions are solved again, up to cm_solver_try_max $setglobal cm_repeatNonOpt off !! def = off !! regexp = off|on +$setglobal cm_PlasticMFA off !! def = off !! regexp = ^(off|on)$ *' @stop *------------------------------------------------------------------------------------- diff --git a/modules/05_initialCap/on/preloop.gms b/modules/05_initialCap/on/preloop.gms index 62d694c2ff..4ea987ae2b 100644 --- a/modules/05_initialCap/on/preloop.gms +++ b/modules/05_initialCap/on/preloop.gms @@ -206,7 +206,7 @@ loop(regi, loop(regi, loop(opTimeYr2te(te,opTimeYr)$(NOT teReNoBio(te)), loop(tsu2opTime5(ttot,opTimeYr), - loop(pe2se(entyPe,entySe,te), + loop(pe2se(entyPe,entySe,te), o_INI_DirProdSeTe(regi,entySe,te) = p05_cap0(regi,te) * pm_cf("2005",regi,te) * pm_dataren(regi,"nur","1",te) ); sm_tmp = 1 / pm_ts(ttot) * p05_cap0(regi,te) * p05_vintage(regi,opTimeYr,te); diff --git a/modules/29_CES_parameters/calibrate/bounds.gms b/modules/29_CES_parameters/calibrate/bounds.gms index bad3b97540..473d2ea5ad 100644 --- a/modules/29_CES_parameters/calibrate/bounds.gms +++ b/modules/29_CES_parameters/calibrate/bounds.gms @@ -38,6 +38,7 @@ if (smax((t,regi_dyn29(regi),ipf)$( t.val gt 2005 putclose logfile, " " /; ); +$offOrder *' relax industry fixing over the calibration iterations sm_tmp = 5; !! last iteration with bounds on industry loop (pf_industry_relaxed_bounds_dyn37(in), @@ -50,13 +51,17 @@ loop (pf_industry_relaxed_bounds_dyn37(in), abs(pm_cesdata(t,regi,in,"offset_quantity")) ); - vm_cesIO.up(t,regi_dyn29(regi),in) - = ( pm_cesdata(t,regi,in,"quantity") - !! goes from 1.05 to 2.05 in +0.2 steps, then jumps to inf - * (1.05 + max(0, (sm_CES_calibration_iteration - 1) / sm_tmp)) - )$( sm_CES_calibration_iteration le sm_tmp ) - + INF$( sm_CES_calibration_iteration gt sm_tmp ); + vm_cesIO.up(t,regi_dyn29(regi),in)$(t.val gt 2005) + = max( + pm_cesdata(t-1,regi,in,"quantity"), + ( pm_cesdata(t,regi,in,"quantity") + !! goes from 1.05 to 2.05 in +0.2 steps, then jumps to inf + * (1.05 + max(0, (sm_CES_calibration_iteration - 1) / sm_tmp)) + ))$( sm_CES_calibration_iteration le sm_tmp ) + + INF$( sm_CES_calibration_iteration gt sm_tmp ); + ); +$onOrder loop(p29_building_relaxed_bounds_dyn(in), vm_cesIO.lo(t,regi_dyn29(regi),in)$(t.val gt 2020 AND SAMEAS(regi, "MEA")) diff --git a/modules/37_industry/subsectors/bounds.gms b/modules/37_industry/subsectors/bounds.gms index a79cea8242..0cba440a55 100755 --- a/modules/37_industry/subsectors/bounds.gms +++ b/modules/37_industry/subsectors/bounds.gms @@ -136,7 +136,6 @@ $drop cm_indstExogScen_set v37_regionalWasteIncinerationCCSshare.lo(t,regi) = 0.; v37_regionalWasteIncinerationCCSshare.up(t,regi) = p37_regionalWasteIncinerationCCSMaxShare(t,regi); -$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" !! fix processes procudction in historic years if (cm_startyear eq 2005, loop((ttot,regi,tePrc2opmoPrc(tePrc,opmoPrc))$(ttot.val ge 2005 AND ttot.val le 2020), @@ -144,14 +143,24 @@ if (cm_startyear eq 2005, ); ); -!! Switch to turn off steel CCS -if (cm_CCS_steel ne 1 OR cm_IndCCSscen ne 1, +!! Switch to turn off all CCS +if (cm_IndCCSscen ne 1, vm_cap.fx(t,regi,teCCPrc,rlf) = 0.; ); +!! TOCHECK:Qianzhi +if (cm_CCS_steel ne 1, + loop(tePrc$(teCCPrc(tePrc) AND secInd37_tePrc("steel", tePrc)), + vm_cap.fx(t,regi,tePrc,rlf) = 0.; + ); +); +if (cm_CCS_chemicals ne 1, + loop(tePrc$(teCCPrc(tePrc) AND secInd37_tePrc("chemicals", tePrc)), + vm_cap.fx(t,regi,tePrc,rlf) = 0.; + ); +); v37_shareWithCC.lo(t,regi,tePrc,opmoPrc) = 0.; v37_shareWithCC.up(t,regi,tePrc,opmoPrc) = 1.; -$endif.cm_subsec_model_steel $ifthen.fixedUE_scenario "%cm_fxIndUe%" == "on" @@ -164,4 +173,24 @@ $endif.fixedUE_scenario !! Fix to avoid reoccurring random infeasibilities. May need to be excluded if e.g. synfuels (or something else) are set to zero. vm_demFeSector_afterTax.lo(t,regi,entySe,"fesos","indst",emiMkt)$(NOT sameAs(emiMkt, "other")) = 1e-16; +v37_matShareChange.lo(t,regi,tePrc,opmoPrc,mat)$(tePrcStiffShare(tePrc,opmoPrc,mat)) = -cm_maxIndPrcShareChange; +v37_matShareChange.up(t,regi,tePrc,opmoPrc,mat)$(tePrcStiffShare(tePrc,opmoPrc,mat)) = cm_maxIndPrcShareChange; + +vm_outflowPrc.up(t,regi,"mechRe","standard") = 0.; !! Due to downgraded recycling and pure feedstock limitations + + +$ifthen.PlasticMFA "%cm_PlasticMFA%" == "on" +!! not all plastic is suitable for mechanical recycling, so this bound exists apart from the bound imposed +!! by total availability of plastic scrap +vm_outflowPrc.up(t,regi,"mechRe","standard") = p37_recycleMech(t,regi); +$endif.PlasticMFA + +!!vm_outflowPrc.up(t,regi,"stCrChemRe","standard") = 0.01; +!!vm_outflowPrc.up(t,regi,"meSyChemRe","standard") = 0.01; +v37_matFlow.up(t,regi,"plasticWaste") = 0.; !! Due to the limitations of the collection + +$ifthen.PlasticMFA "%cm_PlasticMFA%" == "on" +v37_matFlow.up(t,regi,"plasticWaste") = p37_plastcWaste(t,regi); +$endif.PlasticMFA + *** EOF ./modules/37_industry/subsectors/bounds.gms diff --git a/modules/37_industry/subsectors/datainput.gms b/modules/37_industry/subsectors/datainput.gms index 7e0d2c36eb..eb3c7eed70 100644 --- a/modules/37_industry/subsectors/datainput.gms +++ b/modules/37_industry/subsectors/datainput.gms @@ -22,9 +22,11 @@ Parameters en_cement 0.3 !! non-electric, electric en_cement_non_electric 2.0 !! solids, liquids, gases, hydrogen +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" ue_chemicals 1.7 !! energy, capital en_chemicals 0.3 !! fuels and high-temperature heat, electricity en_chemicals_fhth 3.0 !! solids, liquids, gases, electricity +$endif.cm_subsec_model_chemicals ue_steel 5 !! primary steel, secondary steel $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" @@ -48,10 +50,12 @@ pm_cesdata_sigma(ttot,"en_cement_non_electric")$ (ttot.val eq 2030) = 1.3; pm_cesdata_sigma(ttot,"en_cement_non_electric")$ (ttot.val eq 2035) = 1.7; pm_cesdata_sigma(ttot,"en_cement_non_electric")$ (ttot.val eq 2040) = 2.0; +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" pm_cesdata_sigma(ttot,"en_chemicals_fhth")$ (ttot.val le 2025) = 0.7; pm_cesdata_sigma(ttot,"en_chemicals_fhth")$ (ttot.val eq 2030) = 1.3; pm_cesdata_sigma(ttot,"en_chemicals_fhth")$ (ttot.val eq 2035) = 2.0; pm_cesdata_sigma(ttot,"en_chemicals_fhth")$ (ttot.val eq 2040) = 3.0; +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" pm_cesdata_sigma(ttot,"en_steel_furnace")$ (ttot.val le 2025) = 0.5; @@ -69,7 +73,7 @@ pm_cesdata_sigma(ttot,"en_otherInd_hth")$ (ttot.val eq 2040) = 2.0; loop ((ttot,steps)$( ttot.val ge 2005 ), - sm_tmp = steps.val * sm_dmac / sm_c_2_co2; !! CO2 price at MAC step [$/tCO2] + sm_tmp = steps.val * sm_dmac / sm_c_2_co2; !! CO2 price at MAC step [$/tCO2] $ifthen NOT "%cm_Industry_CCS_markup%" == "off" sm_tmp = sm_tmp / %cm_Industry_CCS_markup%; @@ -95,7 +99,7 @@ $endif.cm_subsec_model_steel if (cm_optimisticMAC eq 1, !! logarithmic curve through 0.75 @ $50 and 0.9 @ $150, limited to 0.95 - pm_abatparam_Ind(ttot,regi,emiInd37,steps)$( + pm_abatparam_Ind(ttot,regi,emiInd37,steps)$( YES $$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" AND NOT sameas(emiInd37,"co2steel") @@ -253,11 +257,13 @@ if (cm_IndCCSscen eq 1, emiMac2mac("co2cement_process","co2cement") = YES; ); +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" if (cm_CCS_chemicals eq 1, emiMacSector("co2chemicals") = YES; pm_macSwitch(ttot,regi,"co2chemicals") = YES; emiMac2mac("co2chemicals","co2chemicals") = YES; ); +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" if (cm_CCS_steel eq 1, @@ -315,12 +321,14 @@ Parameter p37_arcane_FE_limits(all_in,all_in) "minimum ratio of feelhth/feelwlth and feh2/fega (may be needed for calibration)" / feh2_cement . fega_cement 1e-5 +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" feh2_chemicals . fega_chemicals 1e-5 + feelhth_chemicals . feelwlth_chemicals 1e-5 +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" feh2_steel . fega_steel 1e-5 $endif.cm_subsec_model_steel feh2_otherInd . fega_otherInd 1e-5 - feelhth_chemicals . feelwlth_chemicals 1e-5 feelhth_otherInd . feelwlth_otherInd 1e-5 / ; @@ -439,9 +447,11 @@ pm_calibrate_eff_scale("feelhth_otherInd","fega_otherInd","width") = 15; pm_calibrate_eff_scale("feh2_cement","fega_cement","level") = 1.1; pm_calibrate_eff_scale("feh2_cement","fega_cement","midperiod") = 2050; pm_calibrate_eff_scale("feh2_cement","fega_cement","width") = 22; +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" pm_calibrate_eff_scale("feh2_chemicals","fega_chemicals","level") = 1.1; pm_calibrate_eff_scale("feh2_chemicals","fega_chemicals","midperiod") = 2050; pm_calibrate_eff_scale("feh2_chemicals","fega_chemicals","width") = 22; +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" pm_calibrate_eff_scale("feh2_steel","fega_steel","level") = 1.1; pm_calibrate_eff_scale("feh2_steel","fega_steel","midperiod") = 2050; @@ -487,20 +497,24 @@ p37_CESMkup(ttot,regi,in) = 0; *' Default industry mark-up cost without budget effect: *' mark-up cost on electrification (hth_electricity inputs), to reach > 1 MRS to *' gas/liquids as technical efficiency gains from electrification +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" pm_tau_ces_tax(t,regi,"feelhth_chemicals") = 100 * sm_TWa_2_MWh * 1e-12; -pm_tau_ces_tax(t,regi,"feelhth_otherInd") = 300 * sm_TWa_2_MWh * 1e-12; +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" pm_tau_ces_tax(t,regi,"feel_steel_secondary") = 100 * sm_TWa_2_MWh * 1e-12; $endif.cm_subsec_model_steel +pm_tau_ces_tax(t,regi,"feelhth_otherInd") = 300 * sm_TWa_2_MWh * 1e-12; *' mark-up cost on H2 inputs, to reach MRS around 1 to gas/liquids as similar *' technical efficiency +pm_tau_ces_tax(t,regi,"feh2_cement") = 100 * sm_TWa_2_MWh * 1e-12; +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" pm_tau_ces_tax(t,regi,"feh2_chemicals") = 100 * sm_TWa_2_MWh * 1e-12; -pm_tau_ces_tax(t,regi,"feh2_otherInd") = 50 * sm_TWa_2_MWh * 1e-12; +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" pm_tau_ces_tax(t,regi,"feh2_steel") = 50 * sm_TWa_2_MWh * 1e-12; $endif.cm_subsec_model_steel -pm_tau_ces_tax(t,regi,"feh2_cement") = 100 * sm_TWa_2_MWh * 1e-12; +pm_tau_ces_tax(t,regi,"feh2_otherInd") = 50 * sm_TWa_2_MWh * 1e-12; @@ -638,6 +652,7 @@ loop ((regi,t2)$( p37_steel_secondary_max_share_scenario(t2,regi) ), display "scenario limits for maximum secondary steel share", p37_steel_secondary_max_share; $endif.sec_steel_scen + Parameter p37_chemicals_feedstock_share(ttot,all_regi) "minimum share of feso/feli/fega in total chemicals FE input [0-1]" / $ondelim @@ -656,7 +671,7 @@ execute_load "input_ref.gdx", vm_demFeSector_afterTax; ); * Define carbon capture and storage share in waste incineration emissions -* capture rate increases linearly from zero in 2025 to value the set in the switch for the defined year, and it is kept constant for years afterwards +* capture rate increases linearly from zero in 2025 to the value set in the switch for the defined year, and it is kept constant for years afterwards p37_regionalWasteIncinerationCCSMaxShare(ttot,all_regi) = 0; $ifthen.cm_wasteIncinerationCCSshare not "%cm_wasteIncinerationCCSshare%" == "off" loop((ttot,ext_regi)$p37_wasteIncinerationCCSMaxShare(ttot,ext_regi), @@ -671,6 +686,27 @@ $endIf.cm_wasteIncinerationCCSshare *** --------------------------------------------------------------------------- p37_specMatDem(mat,all_te,opmoPrc) = 0.; +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" +!! stochiometric unit change from t NH3 to t N +p37_specMatDem("ammonia","fertProd","standard") = 17/14; !!Here the units of urea are based on nitrogen +p37_specMatDem("ammoniaH2","fertProdH2","standard") = 17/14; + +p37_specMatDem("methanol","mtoMta","standard") = 2.62; !!Dutta2019 Table 4 +p37_specMatDem("methanolH2","mtoMtaH2","standard") = 2.62; !!Dutta2019 Table 4 +p37_specMatDem("ammonia","amToFinal","standard") = 1; +p37_specMatDem("ammoniaH2","amToFinal","greenh2") = 1; +p37_specMatDem("methanol","meToFinal","standard") = 1; +p37_specMatDem("methanolH2","meToFinal","greenh2") = 1; + +!! p37_specMatDem("naphtha","stCrLiq","standard") = 18.3 / (sm_TWa_2_MWh/sm_giga_2_non); !! should not be needed any more + +p37_specMatDem("plasticWaste","mechRe","standard") = 1/0.79; !! Source: Taylor Uekert 2023 Table S1-S4. +p37_specMatDem("plasticWaste","meSyChemRe","standard") = 1/1.47; !! Source: Shaik Afzal 2023 Table 3. +p37_specMatDem("plasticWaste","stCrChemRe","standard") = 1/0.62; !! Source: Geetanjali Yadav 2023 Table S9. + +p37_specMatDem("co2fdummy","fertProdH2","standard") = 0.43; !!12/28 for NH₂CONH₂ (urea) +p37_specMatDem("co2fdummy","meSyH2","standard") = 0.375; !! 12/32 for CH₃OH +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" p37_specMatDem("dripell","idr","ng") = 1.44; !! Source: POSTED / Average of Devlin2022, Otto2017, Volg2018, Rechberge2020 p37_specMatDem("dripell","idr","h2") = 1.44; !! Source: POSTED / Copy from ng opMode @@ -689,6 +725,93 @@ $endif.cm_subsec_model_steel !!TODO: Think about accounting of integrated plants / casting & rolling p37_specFeDemTarget(all_enty,all_te,opmoPrc) = 0.; +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" +!! TODO Qianzhi 1MWh NH3,LHV = 0.19355 tons + +!! 1 / (sm_TWa_2_MWh/sm_giga_2_non) unit conversion: MWh/t output -> TWa/Gt output + +!! should not be needed anymore +!!p37_specFeDemTarget("fesos","chemOld","standard") = 1.5 / (sm_TWa_2_MWh/sm_giga_2_non); +!!p37_specFeDemTarget("fegas","chemOld","standard") = 3.0 / (sm_TWa_2_MWh/sm_giga_2_non); +!!p37_specFeDemTarget("fehos","chemOld","standard") = 3.9 / (sm_TWa_2_MWh/sm_giga_2_non); +!!p37_specFeDemTarget("feels","chemOld","standard") = 2.4 / (sm_TWa_2_MWh/sm_giga_2_non); + +!!p37_specFeDemTarget("fesos","chemElec","standard") = 1.2 / (sm_TWa_2_MWh/sm_giga_2_non); +!!p37_specFeDemTarget("fegas","chemElec","standard") = 2.7 / (sm_TWa_2_MWh/sm_giga_2_non); +!!p37_specFeDemTarget("fehos","chemElec","standard") = 3.3 / (sm_TWa_2_MWh/sm_giga_2_non); +!!p37_specFeDemTarget("feels","chemElec","standard") = 3.6 / (sm_TWa_2_MWh/sm_giga_2_non); + +!!p37_specFeDemTarget("fesos","chemH2","standard") = 1.2 / (sm_TWa_2_MWh/sm_giga_2_non); +!!p37_specFeDemTarget("fegas","chemH2","standard") = 2.7 / (sm_TWa_2_MWh/sm_giga_2_non); +!!p37_specFeDemTarget("fehos","chemH2","standard") = 3.3 / (sm_TWa_2_MWh/sm_giga_2_non); +!!p37_specFeDemTarget("feh2s","chemH2","standard") = 2.1 / (sm_TWa_2_MWh/sm_giga_2_non); +!!p37_specFeDemTarget("feels","chemH2","standard") = 1.8 / (sm_TWa_2_MWh/sm_giga_2_non); + +p37_specFeDemTarget("fehos","stCrNg","standard") = 15.8 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Yang, M., & You, F. (2017). Table1 NGL input/(Ethylene + By Products) +!!p37_specFeDemTarget("fegas","stCrNg","standard") = 2.8 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Yang, M., & You, F. (2017). Table1 External Energy input/(Ethylene + By Products) +p37_specFeDemTarget("fegas","stCrNg","standard") = 0.60 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Yang, M., & You, F. (2017). Table1 (External Energy input - Hydrogen Output)/(Ethylene + By Products) +p37_specFeDemTarget("feels","stCrNg","standard") = 0.54 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Yang, M., & You, F. (2017). Table1 Electricity input/(Ethylene + By Products) + +p37_specFeDemTarget("fehos","stCrLiq","standard") = 14.6 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Lucia S. Layritz 2021 Appendix A.2 Naphtha input/(Ethylene + By Products) +!!p37_specFeDemTarget("fegas","stCrLiq","standard") = sm_eps / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Lucia S. Layritz 2021 Appendix A.2 Naphtha input/(Ethylene + By Products) +p37_specFeDemTarget("feels","stCrLiq","standard") = 0.069 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Lucia S. Layritz 2021 Appendix A.2 Electricity input/(Ethylene + By Products) + +p37_specFeDemTarget("fegas","stCrChemRe","standard") = 0.84 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Geetanjali Yadav 2023 Table S20 Using co-producted naphtha and NGLs as fuel +p37_specFeDemTarget("feels","stCrChemRe","standard") = 0.24 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Geetanjali Yadav 2023 Table S12+S13, calculated from electricity costs + +p37_specFeDemTarget("fegas","mechRe","standard") = 0.29 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Taylor Uekert 2023 Table S1-S4 Weighted average of PE PP and PET +p37_specFeDemTarget("feels","mechRe","standard") = 0.54 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Taylor Uekert 2023 Table S1-S4 Weighted average of PE PP and PET + +p37_specFeDemTarget("fesos","meSySol","standard") = 10.3 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Dongliang, Wang, et al Energy 2021 Table 9 +p37_specFeDemTarget("feels","meSySol","standard") = 0.14 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Dongliang, Wang, et al Energy 2021 Table 9 + +p37_specFeDemTarget("fesos","meSySol","greenh2") = 4.6 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Dongliang, Wang, et al Energy 2021 Table 9 +p37_specFeDemTarget("feh2s","meSySol","greenh2") = 3.3 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Dongliang, Wang, et al Energy 2021 Table 9 +p37_specFeDemTarget("feels","meSySol","greenh2") = 0.14 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Dongliang, Wang, et al Energy 2021 Table 9 + +p37_specFeDemTarget("fegas","meSyNg","standard") = 8.8 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5 +p37_specFeDemTarget("feels","meSyNg","standard") = 0.083 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5 + +p37_specFeDemTarget("fehos","meSyLiq","standard") = 9.7 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Petrochemicals: Towards more sustainable plastics and fertilisers, Paris, 2018. Table A4 Assume Feedstock is 20Mwh +p37_specFeDemTarget("feels","meSyLiq","standard") = 0.56 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Petrochemicals: Towards more sustainable plastics and fertilisers, Paris, 2018. Table A4 + +p37_specFeDemTarget("fesos","meSySol_cc","standard") = 2.8 / (sm_TWa_2_MWh/sm_giga_2_non); !! TODO:Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5 Mwh/tC +p37_specFeDemTarget("feels","meSySol_cc","standard") = 0.065 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5 Mwh/tC + +p37_specFeDemTarget("feels","meSyNg_cc","standard") = 0.54 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5 Mwh/tC + +p37_specFeDemTarget("feels","meSyLiq_cc","standard") = 0.54 / (sm_TWa_2_MWh/sm_giga_2_non); !! Assume same as meSyNg_cc Mwh/tC + +p37_specFeDemTarget("feh2s","meSyH2","standard") = (6.4+0.58) / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: DEA Technology Data for Energy Carrier Generation and Conversion June 2017 98 Methanol from hydrogen, assuming steam input is produced from hydrogen +p37_specFeDemTarget("feels","meSyH2","standard") = 0.10 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: DEA Technology Data for Energy Carrier Generation and Conversion June 2017 98 Methanol from hydrogen + +p37_specFeDemTarget("fegas","meSyChemRe","standard") = 2.6 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Shaik Afzal 2023 Table S4+S5, calculated from minimum selling price breakdown +p37_specFeDemTarget("feels","meSyChemRe","standard") = 0.92 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Shaik Afzal 2023 Table S3+S5, calculated from minimum selling price breakdown + +p37_specFeDemTarget("fesos","amSyCoal","standard") = 10.7 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5 +p37_specFeDemTarget("feels","amSyCoal","standard") = 1.0 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5 + +p37_specFeDemTarget("fegas","amSyNG","standard") = 8.9 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 4 +p37_specFeDemTarget("feels","amSyNG","standard") = 0.083 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 4 + +p37_specFeDemTarget("fehos","amSyLiq","standard") = 9.0 / (sm_TWa_2_MWh/sm_giga_2_non); !! TODO Source: IEA, The Future of Petrochemicals: Towards more sustainable plastics and fertilisers, Paris, 2018. Table A4 +p37_specFeDemTarget("feels","amSyLiq","standard") = 0.56 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Petrochemicals: Towards more sustainable plastics and fertilisers, Paris, 2018. Table A4 + +p37_specFeDemTarget("feels","amSyCoal_cc","standard") = 0.44 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5 Mwh/tC + +p37_specFeDemTarget("feels","amSyNG_cc","standard") = 0.46 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5 Mwh/tC + +p37_specFeDemTarget("feels","amSyLiq_cc","standard") = 0.46 / (sm_TWa_2_MWh/sm_giga_2_non); !! Assume same as amSyNG_cc Mwh/tC + +p37_specFeDemTarget("feh2s","amSyH2","standard") = 6.0 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: DEA Technology Data for Energy Carrier Generation and Conversion June 2017 103 Hydrogen to Ammonia +p37_specFeDemTarget("feels","amSyH2","standard") = 0.49 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: GrinbergDana16 Supplementary Table 4 + +p37_specFeDemTarget("feels","mtoMta","standard") = 1.4 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Bazzanella17 Section 4.5.3 +p37_specFeDemTarget("feels","mtoMtaH2","standard") = 1.4 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Bazzanella17 Section 4.5.3 +p37_specFeDemTarget("feels","fertProd","standard") = 0.39 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Palys23 Section 2.3, Page 6 +p37_specFeDemTarget("feels","fertProdH2","standard") = 0.39 / (sm_TWa_2_MWh/sm_giga_2_non); !! Source: Palys23 Section 2.3, Page 6 + +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" !! numbers are given in MWh/t and converted to Remind units TWa/Gt with the factors after that (divided by 8.76) @@ -728,84 +851,302 @@ p37_specFeDemTarget("feels","idrcc","ng") = 0.11 * sm_c_2_co2 / (sm_TWa_ p37_specFeDemTarget("fegas","idrcc","ng") = 0.92 * sm_c_2_co2 / (sm_TWa_2_MWh/sm_giga_2_non); !! Copy from bfcc, but seems to be quite universal. See e.g. Rochelle 2016, who has slightly lower values. $endif.cm_subsec_model_steel + +p37_captureRate(all_te) = 0.; +p37_selfCaptureRate(all_te) = 0.; +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" +!! 95 % for everything +!!Source: IEA, The Future of Hydrogen. Seizing today’s opportunities, Assumptions Annex, Paris, 2019. PAGE | 5 + +!! Methanol synthesis has some feedstock carbon, which reduces the capture rate +!! For Coal (NG and Liq analogous): +!! total coal input: 47.8 GJ/t; emission factor of coal: 0.027 tC/GJ +!! total carbon input: (47.8 GJ/t * 0.027 tC/GJ) = 1.29 tC/tMeOH +!! carbon content of methanol: 12/32 = 0.375 tC/tMeOH +!! ==> feedstock share is 0.375/1.29 = 0.29 ==> energy share is 0.71 + +p37_captureRate("meSySol_cc") = 0.95 * 0.71; +p37_captureRate("meSyNg_cc") = 0.95 * 0.22; +p37_captureRate("meSyLiq_cc") = 0.95 * 0.5; +p37_selfCaptureRate("meSySol_cc") = 0.95; +p37_selfCaptureRate("meSyNg_cc") = 0.95; +p37_selfCaptureRate("meSyLiq_cc") = 0.95; + +p37_captureRate("amSyCoal_cc") = 0.95 * 0.66; !! Considering the carbon content in Urea +p37_captureRate("amSyNG_cc") = 0.95 * 0.28; +p37_captureRate("amSyLiq_cc") = 0.95 * 0.5; +p37_selfCaptureRate("amSyCoal_cc") = 0.95; +p37_selfCaptureRate("amSyNG_cc") = 0.95; +p37_selfCaptureRate("amSyLiq_cc") = 0.95; +$endif.cm_subsec_model_chemicals + +$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" +p37_captureRate("bfcc") = 0.73; !! Source: Witecka 2023, Figure 18 +p37_captureRate("idrcc") = 0.85; !! Source: IEA Steel Roadmap Fig. 2.11 +p37_selfCaptureRate("bfcc") = 0.9; +p37_selfCaptureRate("idrcc") = 0.9; +$endif.cm_subsec_model_steel + *** -------------------------------- +!!can be deleted in the long run +p37_priceMat(ttot,all_regi,all_enty) = 0.; +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" +!!Execute_Loadpoint "input" pm_FEPrice = pm_FEPrice; + +loop(t$(t.val > 2020), + loop(all_regi, +!! p37_priceMat(t,all_regi,"naphtha") = -0.4 * pm_FEPrice(t,all_regi,"fehos","indst","ETS"); + p37_priceMat(t,all_regi,"co2fdummy") = 3 * 44/12 * 0.3048 * (t.val-2024) ** (-0.623) ; !! Mahdi Fasihi 2024 + ); +); +!! Source: Geetanjali Yadav 2023 Table S12 → 0.6 $/kg +!! Source: Taylor Uekert 2023 Table Table S23 → 0.2-0.4 $/kg +!! Source: Shaik Afzal 2023 Table Table S6 → 0.4-0.8 $/kg +p37_priceMat(t,all_regi,"plasticWaste") = 0.1; + +$endif.cm_subsec_model_chemicals -p37_mat2ue(all_enty,all_in) = 0.; $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" -p37_mat2ue("sesteel","ue_steel_secondary") = 1.; -p37_mat2ue("prsteel","ue_steel_primary") = 1.; +!! IEA STeel Roadmap Fig 1.3 Caption: Scrap price 200-300 $/t +!! => take 250 $/t, unit 2020$US +loop(t$(t.val ge 2005), + p37_priceMat(t,all_regi,"eafscrap") = sm_D2020_2_D2017 * 0.250; + p37_priceMat(t,all_regi,"bofscrap") = sm_D2020_2_D2017 * 0.250; + !! Agora KSV-Rechner: 114 €2023/tSteel / (tn$ /bn t) + p37_priceMat(t,all_regi,"ironore") = sm_EURO2023_2_D2017 * 0.114; + !! Agora KSV-Rechner: 154 €2023/tSteel / (tn$ /bn t) + p37_priceMat(t,all_regi,"dripell") = sm_EURO2023_2_D2017 * 0.154; +); $endif.cm_subsec_model_steel + + + *** -------------------------------- +*** Chemicals Production volumes +*** -------------------------------- + -p37_ue_share(all_enty,all_in) = 0.; +!! 0. Data input +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" +pm_outflowPrcHist(tall,all_regi,all_te,opmoPrc) = 0.; +$endif.cm_subsec_model_chemicals +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" +Parameter + pm_outflowPrcHist(tall,all_regi,all_te,opmoPrc) "material flows per production route in 2020 [Gt or GtN for fertilizer]" + / +$ondelim +$include "./modules/37_industry/subsectors/input/p37_AllChem_Routes_Value_2020noCCS.cs4r"; +$offdelim + / +; +$endif.cm_subsec_model_chemicals + +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" +p37_mat2ue(tall,all_regi,all_enty,all_in) = 0.; +$endif.cm_subsec_model_chemicals +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" +Parameter + p37_mat2ue(tall,all_regi,all_enty,all_in) "conversion factors [2017$/kg or 2017$/kgN] for 2020-2050 to convert material [Gt or GtN] into UE [trn$2017]" + / +$ondelim +$include "./modules/37_industry/subsectors/input/p37_AllChemical_Mat2Ue.cs4r"; +$offdelim + / +; +!! constant before and after IEA report temporal scope +p37_mat2ue(t,regi,mat,in)$(t.val lt 2020) = p37_mat2ue("2020",regi,mat,in); +p37_mat2ue(t,regi,mat,in)$(t.val gt 2050) = p37_mat2ue("2050",regi,mat,in); + +!! ue_chemicals is measured in value_added (trn$2017), whilst material is measured in Gt +!! So this is the price of material in trn$2017/Gt = $2017/kg + +!! new calculation value added: Global plastic production volume 400.3 Mt Global plastic market size 712bn USD in 2022 https://www.statista.com/topics/5266/plastics-industry/#:~:text=Since%20the%20mass%20production%20of%20plastic%20products%20began,to%20experience%20considerable%20growth%20over%20the%20next%20decade. + +!!TODO QIanzhi: Change to 2017$ +!!p37_mat2ue(t,all_regi,"hvc","ue_chemicals") = 0.66; !!2017$/kg Source: https://businessanalytiq,com/procurementanalytics/index/ethylene-price-index/ +!!p37_mat2ue("fertilizer","ue_chemicals") = 0.73; !!2017$/kgN Source: https://farmdocdaily,illinois,edu/wp-content/uploads/2023/06/06132023_fig1,png 2020 Global Average +!!p37_mat2ue("methFinal","ue_chemicals") = 0.37; !!2017$/kg Source: https://www,methanex,com/about-methanol/pricing/ 2020 Global Average +!!p37_mat2ue("ammoFinal","ue_chemicals") = 0.69; !!2017$/kg Source: https://businessanalytiq,com/procurementanalytics/index/ammonia-price-index/ 2020 Global Average +p37_mat2ue(t,all_regi,"otherChem","ue_chemicals") = 1.; +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" -p37_ue_share("sesteel","ue_steel_secondary") = 1.; -p37_ue_share("prsteel","ue_steel_primary") = 1.; + +p37_mat2ue(t,all_regi,"sesteel","ue_steel_secondary") = 1.; +p37_mat2ue(t,all_regi,"prsteel","ue_steel_primary") = 1.; $endif.cm_subsec_model_steel -loop(ppfUePrc(in), - if(abs(sum(mat,p37_ue_share(mat,in))-1.) gt sm_eps, + +*** -------------------------------- +p37_ue_share(tall,all_regi,all_enty,all_in) = 0.; +pm_specFeDem(tall,all_regi,all_enty,all_te,opmoPrc) = 0.; +p37_matFlowHist(tall,all_regi,mat) = 0.; + +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" +!! HOT FIX +!! AmmoniaFinal equals total ammonia minus fertilizer ammonia +!! can this be deleted? (recalculated from mrindustry to avoid rounding errors) +pm_outflowPrcHist("2020",regi,"amToFinal","standard") + = sum((tePrc2matOut(tePrc,opmoPrc,mat))$(sameas("ammonia",mat)), + pm_outflowPrcHist("2020",regi,tePrc,opmoPrc)) + - (pm_outflowPrcHist("2020",regi,"fertProd","standard") + * p37_specMatDem("ammonia","fertProd","standard")) + ; +!! same for methanol +pm_outflowPrcHist("2020",regi,"meToFinal","standard") + = sum((tePrc2matOut(tePrc,opmoPrc,mat))$(sameas("methanol",mat)), + pm_outflowPrcHist("2020",regi,tePrc,opmoPrc)) + - (pm_outflowPrcHist("2020",regi,"mtoMta","standard") + * p37_specMatDem("methanol","mtoMta","standard")) + ; + +!! 1. Correct pm_outflowPrcHist, such that sum is consistent with UE +!! can this be deleted? +p37_ueHistTmp("2020",regi) + = sum((tePrc2matOut(tePrc,opmoPrc,mat), mat2ue(mat,in))$(sameas("ue_chemicals",in)), + pm_outflowPrcHist("2020",regi,tePrc,opmoPrc) + * p37_mat2ue("2020",regi,mat,in) + ); + +pm_outflowPrcHist("2020",regi,tePrc,opmoPrc)$(secInd37_tePrc("chemicals",tePrc)) + = pm_outflowPrcHist("2020",regi,tePrc,opmoPrc) + * pm_fedemand("2020",regi,"ue_chemicals") + / p37_ueHistTmp("2020",regi); + +!! 2. scale 2005 to 2015 with ue_chemicals +!! can this be deleted? +loop(t$(t.val ge 2005 AND t.val le 2015), + pm_outflowPrcHist(t,regi,tePrc,opmoPrc) + = pm_outflowPrcHist("2020",regi,tePrc,opmoPrc) + * pm_fedemand(t,regi,"ue_chemicals") + / pm_fedemand("2020",regi,"ue_chemicals"); +); + + +!! 3. Calc MatflowHist +!! can this be deleted? +p37_matFlowHist(t,regi,mat) = +sum(tePrc2matOut(tePrc,opmoPrc,mat), + pm_outflowPrcHist(t,regi,tePrc,opmoPrc) + ) +; +!! 4. Calc ue_share +!! can this be deleted? +p37_ue_share(t,regi,mat,in)$(mat2ue(mat,in) AND sameas(in,"ue_chemicals") AND t.val le 2020) = + (p37_mat2ue(t,regi,mat,in) * p37_matFlowHist(t,regi,mat)) + / pm_cesdata(t,regi,in,"quantity"); +; +p37_ue_share(t,regi,mat,in)$(t.val gt 2020) = p37_ue_share("2020",regi,mat,in); +$endif.cm_subsec_model_chemicals + +$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" +p37_ue_share(t,regi,"sesteel","ue_steel_secondary") = 1.; +p37_ue_share(t,regi,"prsteel","ue_steel_primary") = 1.; +$endif.cm_subsec_model_steel + +if (cm_startyear gt 2005, + Execute_Loadpoint "input_ref" p37_ue_share = p37_ue_share; +); + +loop((t,regi,ppfUePrc(in)), + if(abs(sum(mat,p37_ue_share(t,regi,mat,in))-1.) gt sm_eps, display p37_ue_share; abort "p37_ue_share must add to one for each ue"; ); ); *** -------------------------------- -p37_teMatShareHist(tePrc,opmoPrc,mat) = 0.; +p37_teMatShareHist(all_regi,tePrc,opmoPrc,mat) = 0.; +!! this can be deleted in the future +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" +loop(all_regi(regi), + loop(tePrc2matOut(tePrc, opmoPrc, mat), + if (p37_matFlowHist("2020", regi, mat) gt 0, + p37_teMatShareHist(regi, tePrc, opmoPrc, mat) = + pm_outflowPrcHist("2020", regi, tePrc, opmoPrc) + / p37_matFlowHist("2020", regi, mat); + else + p37_teMatShareHist(regi, tePrc, opmoPrc, mat) = 0; + ); + ); + ); + +$endif.cm_subsec_model_chemicals + $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" -p37_teMatShareHist("bof","unheated","prsteel") = 1.; -p37_teMatShareHist("eaf","sec","sesteel") = 1.; +p37_teMatShareHist(regi,"bof","unheated","prsteel") = 1.; +p37_teMatShareHist(regi,"eaf","sec","sesteel") = 1.; +p37_teMatShareHist(regi,"bf","standard","pigiron") = 1.; +p37_teMatShareHist(regi,"idr","ng","driron") = 1.; $endif.cm_subsec_model_steel -loop(matFin(mat), - if(abs(sum((tePrc,opmoPrc),p37_teMatShareHist(tePrc,opmoPrc,mat))-1.) gt sm_eps, +loop((regi,matFin(mat))$(NOT mat2ue(mat,"ue_chemicals")), + if(abs(sum((tePrc,opmoPrc),p37_teMatShareHist(regi,tePrc,opmoPrc,mat))-1.) gt sm_eps, display p37_teMatShareHist; abort "p37_teMatShareHist must add to one for each matFin"; ); ); -if(sum((tePrc,opmoPrc,mat)$(not matFin(mat)), p37_teMatShareHist(tePrc,opmoPrc,mat)) gt sm_eps, - display p37_teMatShareHist; - abort "p37_teMatShareHist must only be non-zero for matFin"; -); -*** -------------------------------- -s37_shareHistFeDemPenalty = 0.6; -*** -------------------------------- +!!if(sum((tePrc,opmoPrc,mat)$(not matFin(mat)), p37_teMatShareHist(tePrc,opmoPrc,mat)) gt sm_eps, +!! display p37_teMatShareHist; +!! abort "p37_teMatShareHist must only be non-zero for matFin"; +!!\); -p37_captureRate(all_te) = 0.; -p37_selfCaptureRate(all_te) = 0.; -$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" -p37_captureRate("bfcc") = 0.73; !! Source: Witecka 2023, Figure 18 -p37_captureRate("idrcc") = 0.85; !! Source: IEA Steel Roadmap Fig. 2.11 -p37_selfCaptureRate("bfcc") = 0.9; -p37_selfCaptureRate("idrcc") = 0.9; -$endif.cm_subsec_model_steel *** -------------------------------- -p37_priceMat(all_enty) = 0.; -$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" -!! IEA STeel Roadmap Fig 1.3 Caption: Scrap price 200-300 $/t -!! => take 250 $/t, unit 2020$US -p37_priceMat("eafscrap") = sm_D2020_2_D2017 * 0.250 ; -p37_priceMat("bofscrap") = sm_D2020_2_D2017 * 0.250; -!! Agora KSV-Rechner: 114 €2023/tSteel / (tn$ /bn t) -p37_priceMat("ironore") = sm_EURO2023_2_D2017 * 0.114; -!! Agora KSV-Rechner: 154 €2023/tSteel / (tn$ /bn t) -p37_priceMat("dripell") = sm_EURO2023_2_D2017 * 0.154; -$endif.cm_subsec_model_steel +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" +Parameter + p37_demFePrcHist(tall,all_regi,all_te,opmoPrc,all_enty) "total FE demand [EJ] per process in 2005-2020 (calculated from specific FE demand and production volume)" + / +$ondelim +$include "./modules/37_industry/subsectors/input/p37_AllChem_Energy_Value_2005_2020noCCS.cs4r"; +$offdelim + / +; +!! HOT FIX +!! OtherChem is totalChemicals-sum(all other processes) +!! is duplicate with mrindustry, could maybe be deleted +p37_demFePrcHist(t,regi,tePrc,opmoPrc,entyFe) = sm_EJ_2_TWa * p37_demFePrcHist(t,regi,tePrc,opmoPrc,entyFe); +loop(t$(t.val ge 2005 AND t.val le 2020), + p37_demFePrcHist(t,regi,"chemOld","standard","fesos") + = pm_fedemand(t,regi,"feso_chemicals") * sm_EJ_2_TWa + - sum((tePrc, opmoPrc)$(NOT sameas(tePrc,"chemOld")), p37_demFePrcHist(t,regi,tePrc,opmoPrc,"fesos")); + + p37_demFePrcHist(t,regi,"chemOld","standard","fehos") + = pm_fedemand(t,regi,"feli_chemicals") * sm_EJ_2_TWa + - sum((tePrc, opmoPrc)$(NOT sameas(tePrc,"chemOld")), p37_demFePrcHist(t,regi,tePrc,opmoPrc,"fehos")); + + p37_demFePrcHist(t,regi,"chemOld","standard","fegas") + = (pm_fedemand(t,regi,"fega_chemicals") + + pm_fedemand(t,regi,"feh2_chemicals")) * sm_EJ_2_TWa + - sum((tePrc, opmoPrc)$(NOT sameas(tePrc,"chemOld")), p37_demFePrcHist(t,regi,tePrc,opmoPrc,"fegas")); + + p37_demFePrcHist(t,regi,"chemOld","standard","feels") + = (pm_fedemand(t,regi,"feelhth_chemicals") + + pm_fedemand(t,regi,"feelwlth_chemicals")) * sm_EJ_2_TWa + - sum((tePrc, opmoPrc)$(NOT sameas(tePrc,"chemOld")), p37_demFePrcHist(t,regi,tePrc,opmoPrc,"feels")); +); +loop((t,regi,tePrc,opmoPrc)$(t.val ge 2005 AND t.val le 2020), + IF(pm_outflowPrcHist(t,regi,tePrc,opmoPrc) gt EPS, + loop(entyFe, + pm_specFeDem(t,regi,entyFe,tePrc,opmoPrc) + = p37_demFePrcHist(t,regi,tePrc,opmoPrc,entyFe) + / pm_outflowPrcHist(t,regi,tePrc,opmoPrc); + ); + ); +); +$endif.cm_subsec_model_chemicals + +s37_shareHistFeDemPenalty = 0.6; *** -------------------------------- -pm_specFeDem(tall,all_regi,all_enty,all_te,opmoPrc) = 0.; -pm_outflowPrcHist(tall,all_regi,all_te,opmoPrc) = 0.; -p37_matFlowHist(tall,all_regi,mat) = 0.; if (cm_startyear eq 2005, - loop(ttot$(ttot.val ge 2005 AND ttot.val le 2020), + loop(t$(t.val ge 2005 AND t.val le 2020), !! 2nd stage tech - loop(mat2ue(mat,in), - p37_matFlowHist(ttot,regi,mat) = pm_fedemand(ttot,regi,in) / p37_mat2ue(mat,in) * p37_ue_share(mat,in); + loop(mat2ue(mat,in)$(NOT sameas(in,"ue_chemicals")), + p37_matFlowHist(t,regi,mat) = pm_fedemand(t,regi,in) / p37_mat2ue(t,regi,mat,in) * p37_ue_share(t,regi,mat,in); loop(tePrc2matOut(tePrc,opmoPrc,mat), - pm_outflowPrcHist(ttot,regi,tePrc,opmoPrc) = p37_matFlowHist(ttot,regi,mat) * p37_teMatShareHist(tePrc,opmoPrc,mat); + pm_outflowPrcHist(t,regi,tePrc,opmoPrc) = p37_matFlowHist(t,regi,mat) * p37_teMatShareHist(regi,tePrc,opmoPrc,mat); ); ); @@ -813,35 +1154,37 @@ if (cm_startyear eq 2005, !! TODO: simply do this loop several times to fill more than two stages? loop((tePrc1,opmoPrc1,mat)$( sum((tePrc2,opmoPrc2), tePrc2matIn(tePrc2,opmoPrc2,mat)) - AND tePrc2matOut(tePrc1,opmoPrc1,mat)), - p37_matFlowHist(ttot,regi,mat) + AND tePrc2matOut(tePrc1,opmoPrc1,mat) + AND secInd37_tePrc("steel",tePrc1)), + p37_matFlowHist(t,regi,mat) = sum((tePrc2matOut(tePrc1,opmoPrc1,mat), tePrc2matIn(tePrc2,opmoPrc2,mat)), - !!TODO: enable p37_teMatShareHist here, too (has to be defined, though) - p37_specMatDem(mat,tePrc2,opmoPrc2) * pm_outflowPrcHist(ttot,regi,tePrc2,opmoPrc2) ); - pm_outflowPrcHist(ttot,regi,tePrc1,opmoPrc1) = p37_matFlowHist(ttot,regi,mat); + p37_specMatDem(mat,tePrc2,opmoPrc2) * pm_outflowPrcHist(t,regi,tePrc2,opmoPrc2) ); + pm_outflowPrcHist(t,regi,tePrc1,opmoPrc1) = p37_matFlowHist(t,regi,mat) * p37_teMatShareHist(regi,tePrc1,opmoPrc1,mat); ); - loop((entyFe,ppfUePrc), - p37_demFeTarget(ttot,regi,entyFe,ppfUePrc) = sum(tePrc2ue(tePrc,opmoPrc,ppfUePrc), pm_outflowPrcHist(ttot,regi,tePrc,opmoPrc) * p37_specFeDemTarget(entyFe,tePrc,opmoPrc)); - p37_demFeActual(ttot,regi,entyFe,ppfUePrc) = sum((fe2ppfen_no_ces_use(entyFe,all_in),ue2ppfenPrc(ppfUePrc,all_in)), pm_fedemand(ttot,regi,all_in) * sm_EJ_2_TWa); + loop((entyFe,ppfUePrc)$(not sameas(ppfUePrc, "ue_chemicals")), + p37_demFeTarget(t,regi,entyFe,ppfUePrc) = sum(tePrc2ue(tePrc,opmoPrc,ppfUePrc), pm_outflowPrcHist(t,regi,tePrc,opmoPrc) * p37_specFeDemTarget(entyFe,tePrc,opmoPrc)); + p37_demFeActual(t,regi,entyFe,ppfUePrc) = sum((fe2ppfen_no_ces_use(entyFe,all_in),ue2ppfenPrc(ppfUePrc,all_in)), pm_fedemand(t,regi,all_in) * sm_EJ_2_TWa); ); - p37_demFeRatio(ttot,regi,ppfUePrc) = sum(entyFe,p37_demFeActual(ttot,regi,entyFe,ppfUePrc)) / sum(entyFe,p37_demFeTarget(ttot,regi,entyFe,ppfUePrc)); + p37_demFeRatio(t,regi,ppfUePrc)$(not sameas(ppfUePrc, "ue_chemicals")) = sum(entyFe,p37_demFeActual(t,regi,entyFe,ppfUePrc)) / sum(entyFe,p37_demFeTarget(t,regi,entyFe,ppfUePrc)); - loop((tePrc2opmoPrc(tePrc,opmoPrc),regi,entyFe)$(p37_specFeDemTarget(entyFe,tePrc,opmoPrc) gt 0.01*sm_eps), - if((pm_outflowPrcHist(ttot,regi,tePrc,opmoPrc) gt sm_eps), - pm_specFeDem(ttot,regi,entyFe,tePrc,opmoPrc) + loop((tePrc2opmoPrc(tePrc,opmoPrc),regi,entyFe)$( + p37_specFeDemTarget(entyFe,tePrc,opmoPrc) gt 0.01*sm_eps + AND secInd37_tePrc("steel",tePrc)), + if((pm_outflowPrcHist(t,regi,tePrc,opmoPrc) gt sm_eps), + pm_specFeDem(t,regi,entyFe,tePrc,opmoPrc) = p37_specFeDemTarget(entyFe,tePrc,opmoPrc) * sum(tePrc2ue(tePrc,opmoPrc,in), - p37_demFeActual(ttot,regi,entyFe,in) - / p37_demFeTarget(ttot,regi,entyFe,in)); + p37_demFeActual(t,regi,entyFe,in) + / p37_demFeTarget(t,regi,entyFe,in)); else - pm_specFeDem(ttot,regi,entyFe,tePrc,opmoPrc) + pm_specFeDem(t,regi,entyFe,tePrc,opmoPrc) = p37_specFeDemTarget(entyFe,tePrc,opmoPrc) * (1. + s37_shareHistFeDemPenalty - * (sum(tePrc2ue(tePrc,opmoPrc,ppfUePrc), p37_demFeRatio(ttot,regi,ppfUePrc)) + * (sum(tePrc2ue(tePrc,opmoPrc,ppfUePrc), p37_demFeRatio(t,regi,ppfUePrc)) -1.)); ); ); @@ -849,27 +1192,107 @@ if (cm_startyear eq 2005, ); !! loop over other years and blend - loop((entyFeStat(all_enty), tePrc(all_te), opmoPrc), - if( (p37_specFeDemTarget(all_enty,all_te,opmoPrc) gt 0.), - loop(ttot$(ttot.val > 2020), - !! fedemand in excess of BAT halves until 2055 - !! gams cannot handle float exponents, so pre-compute 0.5^(1/(2055-2020)) = 0.9804 - pm_specFeDem(ttot,regi,all_enty,all_te,opmoPrc) - = p37_specFeDemTarget(all_enty,all_te,opmoPrc) - + (pm_specFeDem("2020",regi,all_enty,all_te,opmoPrc) - p37_specFeDemTarget(all_enty,all_te,opmoPrc)) - * power(0.9804, ttot.val - 2020) ; + loop((regi(all_regi),entyFeStat(all_enty), tePrc(all_te), opmoPrc), + if( pm_specFeDem("2020",all_regi,all_enty,all_te,opmoPrc) gt 0., + loop(t$(t.val > 2020), + !! fedemand in excess of BAT halves until 2055 + !! gams cannot handle float exponents, so pre-compute 0.5^(1/(2055-2020)) = 0.9804 + pm_specFeDem(t,regi,all_enty,all_te,opmoPrc) + = p37_specFeDemTarget(all_enty,all_te,opmoPrc) + + (pm_specFeDem("2020",regi,all_enty,all_te,opmoPrc) - p37_specFeDemTarget(all_enty,all_te,opmoPrc)) + * power(0.9804, t.val - 2020) + ); + else + pm_specFeDem(t,regi,all_enty,all_te,opmoPrc) = p37_specFeDemTarget(all_enty,all_te,opmoPrc) ); ); - ); + + +!! Hot fix on regional otherChem Energy Demand +!! calculate electricity and H2 demand for otherChem +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + + loop((entyFeStat(all_enty)), + loop(t$(t.val > 2020), + + !! Calc chemOld + !! stays constant after 2020 + pm_specFeDem(t,regi,all_enty,"chemOld","standard") = + pm_specFeDem("2020",regi,all_enty,"chemOld","standard"); + + !! Calc chemElec + !! all non-electricity scaled down to feedstock share + !! assumption: future otherChem sector has 65% feedstock (from Michajas or Simons data) + loop(entyFe$(NOT sameas(entyFe, "feels")), + pm_specFeDem(t, regi, entyFe, "chemElec", "standard") = + pm_specFeDem("2020", regi, entyFe, "chemOld", "standard") + * 0.65 + ); + + !! Calc feels for chemElec + !! all non-feedstock non-electricity energy of ChemOld with 15% efficiency improvement + !! source: Danish Energy Agency https://ens.dk/en/analyses-and-statistics/technology-data-industrial-process-heat + pm_specFeDem(t, regi, "feels", "chemElec", "standard") = + pm_specFeDem("2020", regi, "feels", "chemOld", "standard") + + 0.85 * ( sum(entyFe2$(NOT sameas(entyFe2, "feels")), pm_specFeDem("2020", regi, entyFe2, "chemOld", "standard")) + - sum(entyFe2$(NOT sameas(entyFe2, "feels")), pm_specFeDem(t, regi, entyFe2, "chemElec", "standard")) ); + + !! Calc chemH2 + !! see above + loop(entyFe$(NOT sameas(entyFe, "feels")), + pm_specFeDem(t, regi, entyFe, "chemH2", "standard") = + pm_specFeDem("2020", regi, entyFe, "chemOld", "standard") + * 0.65 + ); + + !! Calc feels for chemH2 + !! see above + pm_specFeDem(t, regi, "feels", "chemH2", "standard") = + pm_specFeDem("2020", regi, "feels", "chemOld", "standard"); + + !! Calc feh2s for chemH2 + !! see above but without efficiency improvement, assumption: hydrogen and gas have the same efficiency + pm_specFeDem(t, regi, "feh2s", "chemH2", "standard") = + sum(entyFe2$(NOT sameas(entyFe2, "feels")), pm_specFeDem("2020", regi, entyFe2, "chemOld", "standard")) + - sum(entyFe2$(NOT sameas(entyFe2, "feels")), pm_specFeDem(t, regi, entyFe2, "chemH2", "standard")); + + ); + ); + +$endif.cm_subsec_model_chemicals ); if (cm_startyear gt 2005, Execute_Loadpoint "input_ref" pm_specFeDem = pm_specFeDem; + Execute_Loadpoint "input_ref" p37_teMatShareHist = p37_teMatShareHist; ); if (cm_startyear gt 2005, execute_load "input_ref.gdx" v37_plasticWaste.l = v37_plasticWaste.l; ); + +$ifthen.PlasticMFA "%cm_PlasticMFA%" == "on" +Parameter + p37_recycleMech(tall,all_regi) "TODO" + / +$ondelim +$include "./modules/37_industry/subsectors/input/p37_RecycleMech.cs4r"; +$offdelim + / +; +$endif.PlasticMFA + +$ifthen.PlasticMFA "%cm_PlasticMFA%" == "on" +Parameter + p37_plastcWaste(tall,all_regi) "TODO" + / +$ondelim +$include "./modules/37_industry/subsectors/input/p37_PlasticWaste.cs4r"; +$offdelim + / +; +$endif.PlasticMFA + *** EOF ./modules/37_industry/subsectors/datainput.gms diff --git a/modules/37_industry/subsectors/declarations.gms b/modules/37_industry/subsectors/declarations.gms index 5df236b765..1d11cd8ea5 100644 --- a/modules/37_industry/subsectors/declarations.gms +++ b/modules/37_industry/subsectors/declarations.gms @@ -31,15 +31,16 @@ Parameters p37_demFeTarget(tall,all_regi,all_enty,all_in) "Total Fe demand that would be have been consumed historically for production of a UE if all tech had BAT efficiency" p37_demFeActual(tall,all_regi,all_enty,all_in) "Total historic Fe demand consumed for production of a UE" p37_specFeDemTarget(all_enty,all_te,opmoPrc) "Best available technology (will be reached in convergence year) [TWa/Gt_output]" - pm_outflowPrcHist(tall,all_regi,all_te,opmoPrc) "Exogenously prescribed production volume of processes in start year (from IEA data)" - p37_matFlowHist(tall,all_regi,all_enty) "Historic material flows" - p37_mat2ue(all_enty,all_in) "Contribution of process output to ue in CES tree; Trivial if just one material per UE, as in steel [Gt/Gt]" - p37_ue_share(all_enty,all_in) "Fixed share of material in ue" + pm_outflowPrcHist(tall,all_regi,all_te,opmoPrc) "Historic production volumes of processes [Gt]" + p37_matFlowHist(tall,all_regi,all_enty) "Total historic material flow calculated as the sum of outputs of all processes producing the respective material [Gt or GtN for fertilizer]" + p37_ue_share(tall,all_regi,all_enty,all_in) "Share of material to total ue in CES tree" + p37_mat2ue(tall,all_regi,all_enty,all_in) "Conversion factor of process output to ue in CES tree; Trivial if just one material per UE, as in steel [Gt/Gt], in chemicals [trn$2017/Gt]" + p37_ueHistTmp(tall,all_regi) "TODO - Can this be deleted?" p37_demFeRatio(tall,all_regi,all_in) "Ratio of historic Fe demand and Fe demand calculated from historic production and BAT specific demand" - p37_teMatShareHist(all_te,opmoPrc,mat) "Share that a tePrc/opmoPrc historically contibrutes to production of a matFin" + p37_teMatShareHist(all_regi,all_te,opmoPrc,mat) "Share that a tePrc/opmoPrc historically contributes to production of a matFin" p37_captureRate(all_te) "Capture rate of CCS technology" p37_selfCaptureRate(all_te) "Share of emissions from fossil fuels used for a CCS process which are captured by the CCS process itself" - p37_priceMat(all_enty) "Prices of external material input [US$/kg] = [trn$US/Gt]" + p37_priceMat(tall,all_regi,all_enty) "Prices of external material input [US$/kg] = [trn$US/Gt]" p37_chemicals_feedstock_share(ttot,all_regi) "minimum share of feso/feli/fega in total chemicals FE input [0-1]" p37_FeedstockCarbonContent(ttot,all_regi,all_enty) "carbon content of feedstocks [GtC/TWa]" @@ -54,11 +55,11 @@ Parameters o37_cementProcessEmissions(ttot,all_regi,all_enty) "cement process emissions [GtC/a]" o37_demFeIndTotEn(ttot,all_regi,all_enty,all_emiMkt) "total FE per energy carrier and emissions market in industry (sum over subsectors)" o37_shIndFE(ttot,all_regi,all_enty,secInd37,all_emiMkt) "share of subsector in FE industry energy carriers and emissions markets" - o37_demFeIndSub(ttot,all_regi,all_enty,all_enty,secInd37,all_emiMkt) "FE demand per industry subsector" + o37_demFeIndSub(ttot,all_regi,all_enty,all_enty,secInd37,all_emiMkt) "FE demand per industry subsector [TWa]" !! process-based implementation - o37_demFePrc(ttot,all_regi,all_enty,all_te,opmoPrc) "Process-based FE demand per FE type and process" + o37_demFePrc(ttot,all_regi,all_enty,all_te,opmoPrc) "Process-based FE demand per FE type and process [TWa]" o37_shareRoute(ttot,all_regi,all_te,opmoPrc,route) "The relative share (between 0 and 1) of a technology and operation mode outflow which belongs to a certain route; For example, bf.standard belongs partly to the route bfbof and partly to the route bfbof" - o37_ProdIndRoute(ttot,all_regi,mat,route) "produciton volume of a material via each process route" + o37_ProdIndRoute(ttot,all_regi,mat,route) "production volume of a material via each process route [Gt]" o37_demFeIndRoute(ttot,all_regi,all_enty,all_te,route,secInd37) "FE demand by FE type, process route and tech" o37_specificEmi(ttot,all_regi,all_te,opmoPrc) "Specific emissions of a technology; Needed as auxiliary for relative outflow calculation of CC tech" !! TODO: make route specific; So far, this only works because the relative outflow of each tech/opmo is the same for all routes. @@ -105,9 +106,13 @@ Positive Variables !! process-based implementation vm_outflowPrc(tall,all_regi,all_te,opmoPrc) "Production volume of processes in process-based model [Gt/a]" v37_matFlow(tall,all_regi,all_enty) "Production of materials [Gt/a]" + v37_matFlowPrim(tall,all_regi,all_enty) "Production of Primary materials [Gt/a]" v37_emiPrc(tall,all_regi,all_enty,all_te,opmoPrc) "Emissions per process and operation mode [GtC/a]" v37_shareWithCC(tall,all_regi,all_te,opmoPrc) "Share of process and operation mode equipped with carbon capture technology" vm_costMatPrc(tall,all_regi) "Cost of external material inputs such as iron ore in process-based industry [trn $2017/a]" + v37_matShareChange(tall,all_regi,all_te,opmoPrc,all_enty) "Change of share of processes with rectricted relative share change" + v37_chemFlow(tall,all_regi,all_enty) "Summed material outflow of historic processes with future restricted shares; Needed as auxiliary for calculating material outflows of historic processes from the restricted shares" + ; Variables @@ -152,7 +157,11 @@ $endif.no_calibration q37_demMatPrc(tall,all_regi,mat) "Material demand of processes" q37_prodMat(tall,all_regi,mat) "Production volume of processes equals material flow of output material" q37_mat2ue(tall,all_regi,mat,all_in) "Connect materials production to ue ces tree nodes" + q37_restrictMatShareChange(tall,all_regi,all_te,opmoPrc,all_enty) "Low Constraining the share of chemical fossil fuel technologies based on historical data" + q37_chemFlow(tall,all_regi,all_enty) "Restrict future share of processes where several historical processes exist for same material, e.g. Coal-MeOH-HVC vs steam cracker" + q37_limitCapMat(tall,all_regi,all_te) "Material-flow conversion is limited by capacities" + q37_limitCapMatHist(tall,all_regi,all_te) "Material-flow conversion is limited by capacities" q37_emiPrc(ttot,all_regi,all_enty,all_te,opmoPrc) "Local industry emissions pre-capture; Only used as baseline for CCS [GtC/a]" q37_emiCCPrc(tall,all_regi,emiInd37) "Captured emissions from CCS" q37_limitOutflowCCPrc(tall,all_regi,all_te) "Carbon capture processes can only capture as much co2 as the base process emits" diff --git a/modules/37_industry/subsectors/equations.gms b/modules/37_industry/subsectors/equations.gms index 698b03947f..d77def5a0f 100644 --- a/modules/37_industry/subsectors/equations.gms +++ b/modules/37_industry/subsectors/equations.gms @@ -81,9 +81,8 @@ $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,enty,secInd37)$( - entyFeCC37(enty) - OR sameas(enty,"co2cement_process") ) .. +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(enty),in)), @@ -228,12 +227,23 @@ q37_demFeFeedstockChemIndst(t,regi,entyFe,emiMkt) .. vm_demFeNonEnergySector(t,regi,entySe,entyFe,"indst",emiMkt) ) =e= - sum(fe2ppfEn(entyFe,in_chemicals_feedstock_37(in)), + ( + sum(fe2ppfEn(entyFe,in_chemicals_feedstock_37(in)), ( vm_cesIO(t,regi,in) + pm_cesdata(t,regi,in,"offset_quantity") - ) + )) + + + sum(secInd37Prc$(sameas(secInd37Prc,"chemicals")), + sum((secInd37_emiMkt(secInd37Prc,emiMkt), + secInd37_tePrc(secInd37Prc,tePrc), + tePrc2opmoPrc(tePrc,opmoPrc)), + pm_specFeDem(t,regi,entyFe,tePrc,opmoPrc) + * vm_outflowPrc(t,regi,tePrc,opmoPrc) + ) + ) + ) * p37_chemicals_feedstock_share(t,regi) - )$( entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) ) + $( entyFE2sector2emiMkt_NonEn(entyFe,"indst",emiMkt) ) ; *' Feedstocks have identical fossil/biomass/synfuel shares as industry FE @@ -432,7 +442,7 @@ q37_costMat(t,regi) .. vm_costMatPrc(t,regi) =e= sum(mat, - p37_priceMat(mat) + p37_priceMat(t,regi,mat) * v37_matFlow(t,regi,mat)) ; @@ -448,34 +458,71 @@ q37_prodMat(t,regi,mat)$( matOut(mat) ) .. ) ; +***------------------------------------------------------ +*' Restrict share change of certain technology paths +*' Structure of the equation: +*' - define share s_i(t) = a_i(t) / sum_i a_i(t) +*' - abs( s_i(t) - s_i(t-1) ) < max_change +*' Changes to avoid division by zero: +*' 1. replace by +*' s_i(t) - s_i(t-1) = change, with +*' change.low = -max_change and change.up = max_change +*' 2. multiply both sides with sum_i a_i(t) * sum_i a_i(t-1) +***------------------------------------------------------ +q37_chemFlow(t,regi,mat)$(sum((tePrc,opmoPrc), tePrcStiffShare(tePrc,opmoPrc,mat))) .. + v37_chemFlow(t,regi,mat) +=e= + sum((tePrc, opmoPrc)$(tePrcStiffShare(tePrc, opmoPrc, mat)), vm_outflowPrc(t,regi,tePrc,opmoPrc)) +; + +q37_restrictMatShareChange(t,regi,tePrc,opmoPrc,mat)$(t.val gt 2020 + AND tePrcStiffShare(tePrc,opmoPrc,mat)) .. + vm_outflowPrc(t,regi,tePrc,opmoPrc) +=e= + (p37_teMatShareHist(regi,tePrc,opmoPrc,mat)+ v37_matShareChange(t,regi,tePrc,opmoPrc,mat)) + * v37_chemFlow(t,regi,mat) !! Try to use different opmoPrc +; + ***------------------------------------------------------ *' Hand-over to CES ***------------------------------------------------------ q37_mat2ue(t,regi,mat,in)$( ppfUePrc(in) ) .. (vm_cesIO(t,regi,in) + pm_cesdata(t,regi,in,"offset_quantity")) - * p37_ue_share(mat,in) + * p37_ue_share(t,regi,mat,in) =e= sum(mat2ue(mat,in), - p37_mat2ue(mat,in) + p37_mat2ue(t,regi,mat,in) * v37_matFlow(t,regi,mat) ) ; + ***------------------------------------------------------ *' Definition of capacity constraints ***------------------------------------------------------ -q37_limitCapMat(t,regi,tePrc) .. - sum(tePrc2opmoPrc(tePrc,opmoPrc), - vm_outflowPrc(t,regi,tePrc,opmoPrc) - ) - =l= - sum(teMat2rlf(tePrc,rlf), - vm_capFac(t,regi,tePrc) - * vm_cap(t,regi,tePrc,rlf) - ) -; +q37_limitCapMatHist(t,regi,tePrc)$(t.val le 2020) .. + sum(tePrc2opmoPrc(tePrc,opmoPrc), + vm_outflowPrc(t,regi,tePrc,opmoPrc) + ) + =l= + sum(teMat2rlf(tePrc,rlf), + vm_capFac(t,regi,tePrc) + * vm_cap(t,regi,tePrc,rlf) + ) + ; + + q37_limitCapMat(t,regi,tePrc)$(t.val gt 2020) .. + sum(tePrc2opmoPrc(tePrc,opmoPrc), + vm_outflowPrc(t,regi,tePrc,opmoPrc) + ) + =e= + sum(teMat2rlf(tePrc,rlf), + vm_capFac(t,regi,tePrc) + * vm_cap(t,regi,tePrc,rlf) + ) + ; ***------------------------------------------------------ *' Emission from process based industry sector (pre CC) @@ -495,8 +542,7 @@ q37_emiPrc(t,regi,entyFe,tePrc,opmoPrc) .. ***------------------------------------------------------ *' Carbon capture processes can only capture as much co2 as the base process and the CCS process combined emit ***------------------------------------------------------ -q37_limitOutflowCCPrc(t,regi,teCCPrc)$( - sum((tePrc,opmoPrc,opmoCCPrc),tePrc2teCCPrc(tePrc,opmoPrc,teCCPrc,opmoCCPrc)) ) .. +q37_limitOutflowCCPrc(t,regi,teCCPrc) .. sum(tePrc2opmoPrc(teCCPrc,opmoCCPrc), vm_outflowPrc(t,regi,teCCPrc,opmoCCPrc) ) diff --git a/modules/37_industry/subsectors/postsolve.gms b/modules/37_industry/subsectors/postsolve.gms index 2caa266400..0eb2a9c38b 100644 --- a/modules/37_industry/subsectors/postsolve.gms +++ b/modules/37_industry/subsectors/postsolve.gms @@ -44,11 +44,11 @@ o37_shIndFE(ttot,regi,entyFe,secInd37,emiMkt)$( (vm_cesIO.l(ttot,regi,in) + pm_cesdata(ttot,regi,in,"offset_quantity")) ) - + sum((secInd37_emiMkt(secInd37Prc,emiMkt), - secInd37_tePrc(secInd37Prc,tePrc), - tePrc2opmoPrc(tePrc,opmoPrc)), + + sum((secInd37_emiMkt(secInd37,emiMkt), + secInd37_tePrc(secInd37,tePrc), + tePrc2opmoPrc(tePrc,opmoPrc))$(secInd37Prc(secInd37)), o37_demFePrc(ttot,regi,entyFe,tePrc,opmoPrc) - )$(secInd37Prc(secInd37)) + ) ) / o37_demFeIndTotEn(ttot,regi,entyFe,emiMkt) ; @@ -89,11 +89,11 @@ pm_IndstCO2Captured(ttot,regi,entySe,entyFe(entyFeCC37),secInd37,emiMkt)$( pm_NonFos_IndCC_fraction0(ttot,regi,emiInd37)$( sum(secInd37$secInd37_2_emiInd37(secInd37,emiInd37), (sum((entySe,entyFe,emiMkt), - pm_IndstCO2Captured(ttot,regi,entySe,entyFe,secInd37,emiMkt))))) - = sum(secInd37$secInd37_2_emiInd37(secInd37,emiInd37), - sum( (entySe,entyFe, emiMkt)$(NOT (entySeFos(entySe))), - pm_IndstCO2Captured(ttot,regi,entySe,entyFe,secInd37,emiMkt)) - / (sum((entySe,entyFe,emiMkt), + pm_IndstCO2Captured(ttot,regi,entySe,entyFe,secInd37,emiMkt))))) + = sum(secInd37$secInd37_2_emiInd37(secInd37,emiInd37), + sum( (entySe,entyFe, emiMkt)$(NOT (entySeFos(entySe))), + pm_IndstCO2Captured(ttot,regi,entySe,entyFe,secInd37,emiMkt)) + / (sum((entySe,entyFe,emiMkt), pm_IndstCO2Captured(ttot,regi,entySe,entyFe,secInd37,emiMkt)))) ; @@ -151,19 +151,51 @@ loop((tePrc,opmoPrc,teCCPrc,opmoCCPrc)$( !! init all to 1 o37_shareRoute(ttot,regi,tePrc,opmoPrc,route)$tePrc2route(tePrc,opmoPrc,route) = 1.; + + !! 1st stage with two second-stage processes + !! share = methanol * mtoMta*specDem / (mtoMta*specDem + meToFinal*specDem) + !! - loop over first stage techs + !! - loop over second stage techs sharing a route + !! - for each route, share_route is outflowPrc of 2nd stage tech of that route divided by sum_routes(outflowPrc of 2nd stage tech of route) + !! (outFlowPrc always multiplied by specMatDem) + loop((tePrc1,opmoPrc1,tePrc2,opmoPrc2,mat,route)$( + tePrc2matIn(tePrc2,opmoPrc2,mat) + AND tePrc2matOut(tePrc1,opmoPrc1,mat) + AND tePrc2route(tePrc1,opmoPrc1,route) + AND tePrc2route(tePrc2,opmoPrc2,route)), + o37_shareRoute(ttot,regi,tePrc1,opmoPrc1,route) + = vm_outflowPrc.l(ttot,regi,tePrc2,opmoPrc2) + * p37_specMatDem(mat,tePrc2,opmoPrc2) + / max( + sum((route2,tePrc3,opmoPrc3)$( + tePrc2matIn(tePrc3,opmoPrc3,mat) + AND tePrc2matOut(tePrc1,opmoPrc1,mat) + AND tePrc2route(tePrc1,opmoPrc1,route2) + AND tePrc2route(tePrc3,opmoPrc3,route2) + AND (NOT routeCC(route2))), + vm_outflowPrc.l(ttot,regi,tePrc3,opmoPrc3) + * p37_specMatDem(mat,tePrc3,opmoPrc3) + ), + sm_eps + ) + ; + ); + + loop((tePrc,opmoPrc,teCCPrc,opmoCCPrc,route)$( tePrc2teCCPrc(tePrc,opmoPrc,teCCPrc,opmoCCPrc) AND tePrc2route(teCCPrc,opmoCCPrc,route)), !! share of first-stage tech with CCS o37_shareRoute(ttot,regi,tePrc,opmoPrc,route)$(sum(entyFe,v37_emiPrc.l(ttot,regi,entyFe,tePrc,opmoPrc)) gt 0.) - = v37_shareWithCC.l(ttot,regi,tePrc,opmoPrc); + = o37_shareRoute(ttot,regi,tePrc,opmoPrc,route) + * v37_shareWithCC.l(ttot,regi,tePrc,opmoPrc); !! share of first-stage tech without CCS - loop(route2$( tePrc2route(tePrc,opmoPrc,route2) - AND NOT tePrc2route(teCCPrc,opmoCCPrc,route2)), + loop(routeCC2baseRoute(route,route2), o37_shareRoute(ttot,regi,tePrc,opmoPrc,route2) - = 1. - v37_shareWithCC.l(ttot,regi,tePrc,opmoPrc); + = o37_shareRoute(ttot,regi,tePrc,opmoPrc,route2) + * (1. - v37_shareWithCC.l(ttot,regi,tePrc,opmoPrc)); ); ); @@ -174,7 +206,7 @@ loop((tePrc1,opmoPrc1,tePrc2,opmoPrc2,mat,route)$( AND tePrc2route(tePrc1,opmoPrc1,route) AND tePrc2route(tePrc2,opmoPrc2,route)), !! The share of second-stage tech (such as eaf) which belongs to a certain route equals... - o37_shareRoute(ttot,regi,tePrc2,opmoPrc2,route)$(vm_outflowPrc.l(ttot,regi,tePrc2,opmoPrc2) gt 0.) + o37_shareRoute(ttot,regi,tePrc2,opmoPrc2,route)$(vm_outflowPrc.l(ttot,regi,tePrc2,opmoPrc2) gt sm_eps) !! ...the outflow of the first-stage tech (such as idr) which provides the input material (such as driron) to the second-stage... = vm_outflowPrc.l(ttot,regi,tePrc1,opmoPrc1) !! ...times the share of that 1st stage tech which belongs to a certain route @@ -187,7 +219,7 @@ loop((tePrc1,opmoPrc1,tePrc2,opmoPrc2,mat,route)$( *** determine production and FE demand by route *** --------------------------------------------------------------------------- -loop((mat,route)$(matFin(mat)), +loop((mat,route)$(matOut(mat)), o37_ProdIndRoute(ttot,regi,mat,route) = sum((tePrc,opmoPrc)$( tePrc2matOut(tePrc,opmoPrc,mat) AND tePrc2route(tePrc,opmoPrc,route)), @@ -199,8 +231,7 @@ loop((mat,route)$(matFin(mat)), !! o37_demFeIndRoute(ttot,regi,entyFe,tePrc,route,secInd37) = 0.; loop((entyFe,route,tePrc,opmoPrc,secInd37)$( tePrc2route(tePrc,opmoPrc,route) - AND secInd37_tePrc(secInd37,tePrc) - AND (p37_specFeDemTarget(entyFe,tePrc,opmoPrc) gt 0.) ), + AND secInd37_tePrc(secInd37,tePrc)), o37_demFeIndRoute(ttot,regi,entyFe,tePrc,route,secInd37) = o37_demFeIndRoute(ttot,regi,entyFe,tePrc,route,secInd37) !!sum (only necessary if several opmodes for one route) + vm_outflowPrc.l(ttot,regi,tePrc,opmoPrc) diff --git a/modules/37_industry/subsectors/sets.gms b/modules/37_industry/subsectors/sets.gms index 06e3f02bec..12489ece8d 100644 --- a/modules/37_industry/subsectors/sets.gms +++ b/modules/37_industry/subsectors/sets.gms @@ -40,7 +40,9 @@ Sets macInd37(all_enty) "industry CCS MACs" / co2cement +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" co2chemicals +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" co2steel $endif.cm_subsec_model_steel @@ -84,6 +86,7 @@ $endif.cm_subsec_model_steel ue_chemicals "useful energy of chemicals production" +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" en_chemicals "energy use of chemicals production" kap_chemicals "energy efficiency capital of chemicals production" en_chemicals_fhth "feedstock and high temperature heat energy use of chemicals production" @@ -93,6 +96,7 @@ $endif.cm_subsec_model_steel feh2_chemicals "hydrogen energy use of chemicals production" feelhth_chemicals "electric energy for high temperature heat in chemicals production" feelwlth_chemicals "electric energy for mechanical work and low temperature heat in chemicals production" +$endif.cm_subsec_model_chemicals ue_steel "useful energy of steel production" ue_steel_primary "useful energy of primary steel production" @@ -133,10 +137,12 @@ $endif.cm_subsec_model_steel en_cement . (en_cement_non_electric, feel_cement) en_cement_non_electric . (feso_cement, feli_cement, fega_cement, feh2_cement) +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" ue_chemicals . (en_chemicals, kap_chemicals) en_chemicals . (en_chemicals_fhth, feelwlth_chemicals) en_chemicals_fhth . (feso_chemicals, feli_chemicals, fega_chemicals, feh2_chemicals, feelhth_chemicals) +$endif.cm_subsec_model_chemicals ue_steel . (ue_steel_primary, ue_steel_secondary) $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" @@ -164,8 +170,10 @@ $endif.cm_subsec_model_steel ue_cement . (feso_cement, feli_cement, fega_cement, feh2_cement, feel_cement) +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" ue_chemicals . (feso_chemicals, feli_chemicals, fega_chemicals, feh2_chemicals, feelhth_chemicals, feelwlth_chemicals) +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" ue_steel_primary . (feso_steel, feli_steel, fega_steel, feh2_steel, @@ -190,7 +198,9 @@ $endif.cm_subsec_model_steel ppfKap_industry_dyn37(all_in) "energy efficiency capital of industry" / kap_cement +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" kap_chemicals +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" kap_steel_primary kap_steel_secondary @@ -201,8 +211,10 @@ $endif.cm_subsec_model_steel ppfen_industry_dyn37(all_in) "primary production factors energy - industry" / feso_cement, feli_cement, fega_cement, feh2_cement, feel_cement, +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" feso_chemicals, feli_chemicals, fega_chemicals, feh2_chemicals, feelhth_chemicals, feelwlth_chemicals, +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" feso_steel, feli_steel, fega_steel, feh2_steel, feel_steel_primary, feel_steel_secondary, @@ -224,7 +236,9 @@ $endif.cm_subsec_model_steel pf_quantity_shares_37(all_in,all_in) "quantities for the calibration defined as a percentage of another pf" / feh2_cement . fega_cement +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" feh2_chemicals . fega_chemicals +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" feh2_steel . fega_steel $endif.cm_subsec_model_steel @@ -241,9 +255,13 @@ $endif.cm_subsec_model_steel cement . (ue_cement, en_cement, kap_cement, en_cement_non_electric, feso_cement, feli_cement, fega_cement, feh2_cement, feel_cement) - chemicals . (ue_chemicals, en_chemicals, kap_chemicals, en_chemicals_fhth, + chemicals . (ue_chemicals +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" + , en_chemicals, kap_chemicals, en_chemicals_fhth, feso_chemicals, feli_chemicals, fega_chemicals, feh2_chemicals, - feelhth_chemicals, feelwlth_chemicals) + feelhth_chemicals, feelwlth_chemicals +$endif.cm_subsec_model_chemicals + ) steel . (ue_steel, ue_steel_primary, ue_steel_secondary $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" @@ -263,9 +281,11 @@ $endif.cm_subsec_model_steel ue_cement . (en_cement, kap_cement, en_cement_non_electric, feso_cement, feli_cement, fega_cement, feh2_cement, feel_cement) +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" ue_chemicals . (en_chemicals, kap_chemicals, en_chemicals_fhth, feso_chemicals, feli_chemicals, fega_chemicals, feh2_chemicals, feelhth_chemicals, feelwlth_chemicals) +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" ue_steel_primary . (en_steel_primary, kap_steel_primary, en_steel_furnace, @@ -290,13 +310,19 @@ $endif.cm_subsec_model_steel fe2ppfEn37(all_enty,all_in) "match ESM entyFe to ppfen" / - fesos . (feso_cement, feso_chemicals, feso_otherInd) - fehos . (feli_cement, feli_chemicals, feli_otherInd) - fegas . (fega_cement, fega_chemicals, fega_otherInd) - feh2s . (feh2_cement, feh2_chemicals, feh2_otherInd) + fesos . (feso_cement, feso_otherInd) + fehos . (feli_cement, feli_otherInd) + fegas . (fega_cement, fega_otherInd) + feh2s . (feh2_cement, feh2_otherInd) fehes . fehe_otherInd - feels . (feel_cement, feelhth_chemicals, feelwlth_chemicals, - feelhth_otherInd, feelwlth_otherInd) + feels . (feel_cement, feelhth_otherInd, feelwlth_otherInd) +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "ces" + fesos . feso_chemicals + fehos . feli_chemicals + fegas . fega_chemicals + feh2s . feh2_chemicals + feels . (feelhth_chemicals, feelwlth_chemicals) +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" fesos . feso_steel fehos . feli_steel @@ -345,6 +371,9 @@ ppfen_MkupCost37(all_in) "primary production factors in industry on which CES secInd37Prc(secInd37) "Sub-sectors with process-based modeling" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + chemicals +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" steel $endif.cm_subsec_model_steel @@ -352,6 +381,45 @@ $endif.cm_subsec_model_steel tePrc(all_te) "Technologies used in process-based model (including CCS)" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + chemOld "process to produce otherChem with historic FE demand" + chemElec "process to produce otherChem with higher share of feels and improved efficiency" + chemH2 "process to produce otherChem with higher share of feh2s" + + stCrNg "ethane/propane steam cracking" + stCrLiq "naphtha steam cracking" + stCrChemRe "pyrolysis (chemical recycling) of plastic waste" + + mechRe "mechanical recycling of plastic waste" + + meSySol "methanol synthesis from coal/biomass" + meSyNg "methanol synthesis from NG" + meSyLiq "methanol synthesis from oil" + meSySol_cc "CC for methanol synthesis from coal/biomass" + meSyNg_cc "CC for methanol synthesis from NG" + meSyLiq_cc "CC for methanol synthesis from oil" + meSyH2 "methanol synthesis from hydrogen" + meSyChemRe "gasification (chemical recycling) of plastic waste" + + amSyCoal "ammonia synthesis from coal/biomass" + amSyNG "ammonia synthesis from NG" + amSyLiq "ammonia synthesis from oil" + amSyCoal_cc "CC for ammonia synthesis from coal/biomass" + amSyNG_cc "CC for ammonia synthesis from NG" + amSyLiq_cc "CC for ammonia synthesis from oil" + amSyH2 "Ammonia synthesis from hydrogen" + + !! differentiate between mtoMta and mtoMtaH2 such that the share of mtoMta (the old technology) can be constrained + !! after liquids disaggregation by Robert there can be a more specific set differentiating between coal and biomass + !! same for fertilizer prod; fertProdH2 needs carbon feedstock + mtoMta "Methanol to olefins/methanol to aromatics (production of HVC from methanol from fossil feedstocks)" + mtoMtaH2 "mtoMta from green methanol" + fertProd "Fertilizer production from ammonia from fossil feedstocks" + fertProdH2 "Fertilizer production from green ammonia" + meToFinal "dummy process to convert methanol or methanolH2 to methFinal" + amToFinal "dummy process to convert ammonia or ammoniaH2 to ammoFinal" + +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" bf bof @@ -363,17 +431,52 @@ $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" $endif.cm_subsec_model_steel / - teCCPrc(tePrc) "Technologies used in process-based model (only CCS)" +teCCPrc(all_te) "Technologies used in process-based model (only CCS)" / - $$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" +$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" bfcc idrcc - $$endif.cm_subsec_model_steel +$endif.cm_subsec_model_steel + +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + !! maybe add cc for heat generation part of steam cracker, but may not be worth it because we switch to H2 or electricity for heat generation + meSySol_cc + meSyNg_cc + meSyLiq_cc + + amSyCoal_cc + amSyNG_cc + amSyLiq_cc +$endif.cm_subsec_model_chemicals / +teCUPrc(all_te) "Technologies using CO2 as a feedstock" + / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + meSyH2 + fertProdH2 +$endif.cm_subsec_model_chemicals + / mat(all_enty) "Materials considered in process-based model; Can be input and/or output of a process" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + otherChem "All other chemicals not covered in the specific process-representation" + hvc "High-value chemicals; consist of ethylene, propylene and BTX" + fertilizer "Nitrogen fertilizer; consists of urea, ammonium nitrate, ammonium sulfate and calcium ammonium nitrate" + methanol "Methanol produced from fesos, fehos or fegas; intermediate product" + methanolH2 "Methanol produced from hydrogen or gasification of plastic waste (differentiation from methanol in order to restrict historic shares of mtoMta); intermediate product" + ammonia "Ammonia produced from fesos, fehos or fegas; intermediate product" + ammoniaH2 "Ammonia produced from hydrogen (needs co2f input in fertilizer production in difference to ammonia)" + methFinal "Methanol; final product" + ammoFinal "Ammonia; final product" + !! REMINDER: once we co2f from the CCU module, make sure that it isn't subtracted twice (once by taking it from CCU, once by subtracting feedstock carbon) + co2f + co2fdummy + + naphtha "Naphtha" + plasticWaste "Plastic waste, mixed" +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" prsteel sesteel @@ -388,6 +491,17 @@ $endif.cm_subsec_model_steel matIn(all_enty) "Materials which serve as input to a process" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + methanol + methanolH2 + ammonia + ammoniaH2 + co2f + co2fdummy + + naphtha + plasticWaste +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" eafscrap "Steel scrap used in EAF" bofscrap "Steel scrap used in BOF" @@ -400,6 +514,17 @@ $endif.cm_subsec_model_steel matOut(all_enty) "Materials which serve as output of a process" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + otherChem + hvc + fertilizer + methanol + methanolH2 + ammonia !! ammonia tech + ammoniaH2 + methFinal + ammoFinal +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" prsteel sesteel @@ -410,6 +535,13 @@ $endif.cm_subsec_model_steel matFin(mat) "Final products of a process-based production route" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + otherChem + hvc + fertilizer + methFinal + ammoFinal +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" prsteel sesteel @@ -419,6 +551,9 @@ $endif.cm_subsec_model_steel opmoPrc "Operation modes for technologies in process-based model" / standard "Only one operation mode implemented" +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + greenh2 "Input of green hydrogen to adjust the C-H ratio" +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" ng "Direct reduction using natural gas" h2 "Direct reduction using hydrogen" @@ -430,6 +565,9 @@ $endif.cm_subsec_model_steel ppfUePrc(all_in) "Ue CES tree nodes connected to process based implementation, which therefore become primary production factors (ppf)" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + ue_chemicals +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" ue_steel_primary ue_steel_secondary @@ -438,6 +576,53 @@ $endif.cm_subsec_model_steel route(all_te) "Process routes; Currently only used for reporting" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + + otherChem_old + otherChem_elec + otherChem_h2 + + mech_recycle + + hvc_stCrLiq + hvc_stCrNg + hvc_stCrChemRe + hvc_meSol + hvc_meNg + hvc_meLiq + hvc_meSol_gh2 + hvc_meSol_cc + hvc_meNg_cc + hvc_meLiq_cc + hvc_meh2 + hvc_mechemRe + + fertilizer_amSol + fertilizer_amNg + fertilizer_amLiq + fertilizer_amLiq_cc + fertilizer_amNg_cc + fertilizer_amSol_cc + fertilizer_amh2 + + meFinal_sol + meFinal_ng + meFinal_liq + meFinal_sol_gh2 + meFinal_sol_cc + meFinal_ng_cc + meFinal_liq_cc + meFinal_h2 + meFinal_chemRe + + amFinal_sol + amFinal_ng + amFinal_liq + amFinal_sol_cc + amFinal_ng_cc + amFinal_liq_cc + amFinal_h2 +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" idreaf_ng idreaf_ng_ccs @@ -450,6 +635,14 @@ $endif.cm_subsec_model_steel ppfen_no_ces_use(all_in) "FE nodes of all_in that are not part of the CES tree in the process-based industry model; Needed for pm_fedemand data input" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + feso_chemicals + feli_chemicals + fega_chemicals + feh2_chemicals, + feelhth_chemicals + feelwlth_chemicals +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" feso_steel feli_steel @@ -464,8 +657,43 @@ $endif.cm_subsec_model_steel *** B) mappings *** ----------------------- -tePrc2opmoPrc(tePrc,opmoPrc) "Mapping of technologies onto available operation modes" - / +tePrc2opmoPrc(all_te,opmoPrc) "Mapping of technologies onto available operation modes" + / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + chemOld . standard + chemElec . standard + chemH2 . standard + + stCrNg . standard + stCrLiq . standard + stCrChemRe . standard + + mechRe . standard + + meSySol . (standard,greenh2) !! methanol synthesis needs hydrogen apart from coal, can be from green hydrogen or coal gasification + meSyNg . standard + meSyLiq . standard + meSySol_cc . standard + meSyNg_cc . standard + meSyLiq_cc . standard + meSyH2 . standard + meSyChemRe . standard + + amSyCoal . standard + amSyNG . standard + amSyLiq . standard + amSyCoal_cc . standard + amSyNG_cc . standard + amSyLiq_cc . standard + amSyH2 . standard + + mtoMta . standard + mtoMtaH2 . standard + fertProd . standard + fertProdH2 . standard + meToFinal . (standard,greenh2) + amToFinal . (standard,greenh2) +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" idr . (ng,h2) eaf . (pri,sec) @@ -476,8 +704,27 @@ $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" $endif.cm_subsec_model_steel / -tePrc2matIn(tePrc,opmoPrc,mat) "Mapping of technologies onto input materials" +tePrc2matIn(all_te,opmoPrc,mat) "Mapping of technologies onto input materials" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + fertProd . standard . ammonia + fertProdH2 . standard . ammoniaH2 + mtoMta . standard . methanol + mtoMtaH2 . standard . methanolH2 + meToFinal . standard . methanol + meToFinal . greenh2 . methanolH2 + amToFinal . standard . ammonia + amToFinal . greenh2 . ammoniaH2 + + meSyH2 . standard . co2fdummy + fertProdH2 . standard . co2fdummy + stCrLiq . standard . naphtha + + mechRe . standard . plasticWaste + stCrChemRe . standard . plasticWaste + meSyChemRe . standard . plasticWaste + +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" idr . (h2,ng) . dripell eaf . pri . driron @@ -487,8 +734,36 @@ $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" $endif.cm_subsec_model_steel / -tePrc2matOut(tePrc,opmoPrc,mat) "Mapping of industry process technologies onto their output materials" - / +tePrc2matOut(all_te,opmoPrc,mat) "Mapping of industry process technologies onto their output materials" + / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + chemOld . standard . otherChem + chemElec . standard . otherChem + chemH2 . standard . otherChem + + stCrNg . standard . hvc + stCrLiq . standard . hvc + stCrChemRe . standard . hvc + mechRe . standard . hvc + + meSySol . (standard,greenh2) . methanol + meSyNg . standard . methanol + meSyLiq . standard . methanol + meSyH2 . standard . methanolH2 + meSyChemRe . standard . methanolH2 + + amSyCoal . standard . ammonia + amSyNG . standard . ammonia + amSyLiq . standard . ammonia + amSyH2 . standard . ammoniaH2 + + mtoMta . standard . hvc + mtoMtaH2 . standard . hvc + fertProd . standard . fertilizer + fertProdH2 . standard . fertilizer + meToFinal . (standard,greenh2) . methFinal + amToFinal . (standard,greenh2) . ammoFinal +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" bf . standard . pigiron bof . unheated . prsteel @@ -498,28 +773,138 @@ $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" $endif.cm_subsec_model_steel / -tePrc2ue(tePrc,opmoPrc,all_in) "Mapping of industry process technologies to the UE ces nodes they directly or indirectly feed into" +matStiffShare(all_enty) "Materials with restricted change of relative process volume shares" + / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + hvc + methanol + ammonia +$endif.cm_subsec_model_chemicals + / + +tePrcStiffShare(all_te,opmoPrc,all_enty) "Industry process technologies with restricted change of relative shares" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + + stCrNg . standard . hvc + stCrLiq . standard . hvc + mtoMta . standard . hvc + + meSySol . standard . methanol + meSyNg . standard . methanol + meSyLiq . standard . methanol + + amSyCoal . standard . ammonia + amSyNG . standard . ammonia + amSyLiq . standard . ammonia + +$endif.cm_subsec_model_chemicals + / + +tePrc2ue(all_te,opmoPrc,all_in) "Mapping of industry process technologies to the UE ces nodes they directly or indirectly feed into" + / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + chemOld . standard . ue_chemicals + chemElec . standard . ue_chemicals + chemH2 . standard . ue_chemicals + + stCrNg . standard . ue_chemicals + stCrLiq . standard . ue_chemicals + stCrChemRe . standard . ue_chemicals + mechRe . standard . ue_chemicals + + meSySol . (standard,greenh2) . ue_chemicals + meSySol_cc . standard . ue_chemicals + meSyNg . standard . ue_chemicals + (meSyLiq,meSyLiq_cc) . standard . ue_chemicals + meSyH2 . standard . ue_chemicals + meSyChemRe . standard . ue_chemicals + + (amSyCoal,amSyCoal_cc) . standard . ue_chemicals + (amSyNG,amSyNG_cc) . standard . ue_chemicals + (amSyLiq,amSyLiq_cc) . standard . ue_chemicals + amSyH2 . standard . ue_chemicals + + mtoMta . standard . ue_chemicals + mtoMtaH2 . standard . ue_chemicals + fertProd . standard . ue_chemicals + fertProdH2 . standard . ue_chemicals + meToFinal . (standard,greenh2) . ue_chemicals + amToFinal . (standard,greenh2) . ue_chemicals + +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" - (bf,bfcc) . standard . ue_steel_primary - bof . unheated . ue_steel_primary - idr . (h2,ng) . ue_steel_primary - idrcc . ng . ue_steel_primary - eaf . pri . ue_steel_primary - eaf . sec . ue_steel_secondary + (bf,bfcc) . standard . ue_steel_primary + bof . unheated . ue_steel_primary + idr . (h2,ng) . ue_steel_primary + idrcc . ng . ue_steel_primary + eaf . pri . ue_steel_primary + eaf . sec . ue_steel_secondary $endif.cm_subsec_model_steel / -tePrc2teCCPrc(tePrc,opmoPrc,tePrc,opmoPrc) "Mapping of base technologies to CCS technologies" +tePrc2teCCPrc(all_te,opmoPrc,all_te,opmoPrc) "Mapping of base technologies to CCS technologies" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + meSySol . standard . meSySol_cc . standard + meSyNg . standard . meSyNg_cc . standard + meSyLiq . standard . meSyLiq_cc . standard + + amSyCoal . standard . amSyCoal_cc . standard + amSyNG . standard . amSyNG_cc . standard + amSyLiq . standard . amSyLiq_cc . standard +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" bf . standard . bfcc . standard idr . ng . idrcc . ng $endif.cm_subsec_model_steel / -tePrc2route(tePrc,opmoPrc,route) "Mapping of technologies onto the production routes they belong to" - / +tePrc2route(all_te,opmoPrc,route) "Mapping of technologies onto the production routes they belong to" + / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + + chemOld . standard . otherChem_old + chemElec . standard . otherChem_elec + chemH2 . standard . otherChem_h2 + + stCrNg . standard . hvc_stCrLiq + stCrLiq . standard . hvc_stCrNg + stCrChemRe. standard . hvc_stCrChemRe + + mechRe . standard . mech_recycle + + meSySol . standard . (hvc_meSol, meFinal_sol, hvc_meSol_cc, meFinal_sol_cc) + meSyNg . standard . (hvc_meNg, meFinal_ng, hvc_meNg_cc, meFinal_ng_cc) + meSyLiq . standard . (hvc_meLiq, meFinal_liq, hvc_meLiq_cc, meFinal_liq_cc) + meSySol . greenh2 . (hvc_meSol_gh2, meFinal_sol_gh2) + meSySol_cc . standard . (hvc_meSol_cc, meFinal_sol_cc) + meSyNg_cc . standard . (hvc_meNg_cc, meFinal_ng_cc) + meSyLiq_cc . standard . (hvc_meLiq_cc, meFinal_liq_cc) + meSyH2 . standard . (hvc_meh2, meFinal_h2) + meSyChemRe . standard . (hvc_mechemRe, meFinal_chemRe) + + amSyCoal . standard . (fertilizer_amSol, amFinal_sol, fertilizer_amSol_cc, amFinal_sol_cc) + amSyNG . standard . (fertilizer_amNg, amFinal_ng, fertilizer_amNg_cc, amFinal_ng_cc) + amSyLiq . standard . (fertilizer_amLiq, amFinal_liq, fertilizer_amLiq_cc, amFinal_liq_cc) + amSyCoal_cc . standard . (fertilizer_amSol_cc, amFinal_sol_cc) + amSyNG_cc . standard . (fertilizer_amNg_cc, amFinal_ng_cc) + amSyLiq_cc . standard . (fertilizer_amLiq_cc, amFinal_liq_cc) + amSyH2 . standard . (fertilizer_amh2, amFinal_h2) + + mtoMta . standard . (hvc_meSol, hvc_meSol_gh2, hvc_meNg, hvc_meLiq, + hvc_meSol_cc, hvc_meNg_cc, hvc_meLiq_cc) + mtoMtaH2 . standard . hvc_meh2 + fertProd . standard . (fertilizer_amSol, fertilizer_amNg, fertilizer_amLiq, + fertilizer_amSol_cc, fertilizer_amNg_cc, fertilizer_amLiq_cc) + fertProdH2 . standard . fertilizer_amh2 + meToFinal . standard . (meFinal_sol, meFinal_sol_gh2, meFinal_ng, meFinal_liq, + meFinal_sol_cc, meFinal_ng_cc, meFinal_liq_cc) + meToFinal . greenh2 . meFinal_h2 + amToFinal . standard . (amFinal_sol, amFinal_ng, amFinal_liq, + amFinal_sol_cc, amFinal_ng_cc, amFinal_liq_cc) + amToFinal . greenh2 . amFinal_h2 +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" eaf . sec . seceaf idr . h2 . idreaf_h2 @@ -536,9 +921,63 @@ $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" bfcc . standard . bfbof_ccs $endif.cm_subsec_model_steel / + + +!! for reporting +routeCC(route) "TODO" + / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + hvc_meSol_cc + hvc_meNg_cc + hvc_meLiq_cc + fertilizer_amLiq_cc + fertilizer_amNg_cc + fertilizer_amSol_cc + meFinal_sol_cc + meFinal_ng_cc + meFinal_liq_cc + amFinal_sol_cc + amFinal_ng_cc + amFinal_liq_cc + +$endif.cm_subsec_model_chemicals +$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" + idreaf_ng_ccs + bfbof_ccs +$endif.cm_subsec_model_steel + / + +routeCC2baseRoute(route,route) "TODO" + / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + hvc_meSol_cc . hvc_meSol + hvc_meNg_cc . hvc_meNg + hvc_meLiq_cc . hvc_meLiq + fertilizer_amLiq_cc . fertilizer_amLiq + fertilizer_amNg_cc . fertilizer_amNg + fertilizer_amSol_cc . fertilizer_amSol + meFinal_sol_cc . meFinal_sol + meFinal_ng_cc . meFinal_ng + meFinal_liq_cc . meFinal_liq + amFinal_sol_cc . amFinal_sol + amFinal_ng_cc . amFinal_ng + amFinal_liq_cc . amFinal_liq +$endif.cm_subsec_model_chemicals +$ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" + idreaf_ng_ccs . idreaf_ng + bfbof_ccs . bfbof +$endif.cm_subsec_model_steel + / mat2ue(mat,all_in) "Mapping of materials (final route products) onto the UE ces tree node the model is connected to" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + otherChem . ue_chemicals + hvc . ue_chemicals + fertilizer . ue_chemicals + methFinal . ue_chemicals + ammoFinal . ue_chemicals +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" prsteel . ue_steel_primary sesteel . ue_steel_secondary @@ -547,6 +986,42 @@ $endif.cm_subsec_model_steel fe2mat(all_enty,all_enty,all_te) "Set of industry technologies to be included in en2en, which connects capex and opex to budget" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + entydummy.entydummy.chemOld + entydummy.entydummy.chemElec + entydummy.entydummy.chemH2 + + entydummy.entydummy.stCrNg + entydummy.entydummy.stCrLiq + entydummy.entydummy.stCrChemRe + + entydummy.entydummy.mechRe + + entydummy.entydummy.meSySol + entydummy.entydummy.meSyNg + entydummy.entydummy.meSyLiq + entydummy.entydummy.meSySol_cc + entydummy.entydummy.meSyNg_cc + entydummy.entydummy.meSyLiq_cc + entydummy.entydummy.meSyH2 + entydummy.entydummy.meSyChemRe + + entydummy.entydummy.amSyCoal + entydummy.entydummy.amSyNG + entydummy.entydummy.amSyLiq + entydummy.entydummy.amSyCoal_cc + entydummy.entydummy.amSyNG_cc + entydummy.entydummy.amSyLiq_cc + entydummy.entydummy.amSyH2 + + entydummy.entydummy.mtoMta + entydummy.entydummy.mtoMtaH2 + entydummy.entydummy.fertProd + entydummy.entydummy.fertProdH2 + entydummy.entydummy.meToFinal + entydummy.entydummy.amToFinal + +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" entydummy.entydummy.bf entydummy.entydummy.bof @@ -557,8 +1032,44 @@ $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" $endif.cm_subsec_model_steel / -secInd37_tePrc(secInd37,tePrc) "Mapping of technologies onto industry subsectors" - / +secInd37_tePrc(secInd37,all_te) "Mapping of technologies onto industry subsectors" + / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + chemicals . chemOld + chemicals . chemElec + chemicals . chemH2 + + chemicals . stCrNg + chemicals . stCrLiq + chemicals . stCrChemRe + + chemicals . mechRe + + chemicals . meSySol + chemicals . meSyNg + chemicals . meSyLiq + chemicals . meSySol_cc + chemicals . meSyNg_cc + chemicals . meSyLiq_cc + chemicals . meSyH2 + chemicals . meSyChemRe + + chemicals . amSyCoal + chemicals . amSyNG + chemicals . amSyLiq + chemicals . amSyCoal_cc + chemicals . amSyNG_cc + chemicals . amSyLiq_cc + chemicals . amSyH2 + + chemicals . mtoMta + chemicals . mtoMtaH2 + chemicals . fertProd + chemicals . fertProdH2 + chemicals . meToFinal + chemicals . amToFinal + +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" steel . idr steel . eaf @@ -572,6 +1083,12 @@ $endif.cm_subsec_model_steel fe2ppfen_no_ces_use(all_enty,all_in) "Match ESM entyFe to ppfen that are not used in the CES tree, but for datainput for process-bases industry" / +$ifthen.cm_subsec_model_chemicals "%cm_subsec_model_chemicals%" == "processes" + fesos . feso_chemicals + fehos . feli_chemicals + fegas . fega_chemicals + feels . (feelhth_chemicals, feelwlth_chemicals) +$endif.cm_subsec_model_chemicals $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "processes" fesos . feso_steel fehos . feli_steel @@ -625,7 +1142,8 @@ $endif.calibrate teMat2rlf(tePrc,"1") = YES; alias(tePrc,tePrc1,tePrc2); -alias(opmoPrc,opmoCCPrc,opmoPrc1,opmoPrc2); +alias(tePrc,tePrc1,tePrc2,tePrc3); +alias(opmoPrc,opmoCCPrc,opmoPrc1,opmoPrc2,opmoPrc3); alias(route,route2); alias(entyFeCC37,entyFeCC37_2); alias(secInd37_2_pf,secInd37_2_pf2); diff --git a/modules/39_CCU/off/sets.gms b/modules/39_CCU/off/sets.gms index e889bce983..5d1c4965c9 100644 --- a/modules/39_CCU/off/sets.gms +++ b/modules/39_CCU/off/sets.gms @@ -25,22 +25,28 @@ te_ccu39(all_te) "CCU technologies" / - teCCU2rlf(all_te,rlf) "mapping for CCU technologies to grades" +/ +/ + + +teSeCCU2rlf(all_te,rlf) "mapping for CCU technologies to grades" / (h22ch4) . 1 (MeOH) . 1 / + ; -alias(teCCU2rlf,teCCU2rlf2); ***------------------------------------------------------------------------- *** add module specific sets and mappings to the global sets and mappings ***------------------------------------------------------------------------- +teCCU2rlf(teSeCCU2rlf) = YES; +teCCU2rlf(teCUPrc,"1") = YES; -enty(enty_ccu39) = YES; -te(te_ccu39) = YES; +enty(enty_ccu3) = YES; +te(te_ccu39) = YES; *** EOF ./modules/39_CCU/off/sets.gms diff --git a/modules/39_CCU/on/bounds.gms b/modules/39_CCU/on/bounds.gms index 0086f9d989..bd2d4a656d 100644 --- a/modules/39_CCU/on/bounds.gms +++ b/modules/39_CCU/on/bounds.gms @@ -45,7 +45,7 @@ if(cm_emiscen = 1, ); ***---------------------------------------------------------------------------- -*** force synthetic liquids in as a minimum share of total liquids if cm_shSynLiq switch used +*** force synthetic liquids in as a minimum share of total liquids if cm_shSynLiq switch used ***---------------------------------------------------------------------------- if (cm_shSynLiq gt 0, @@ -55,7 +55,7 @@ if (cm_shSynLiq gt 0, ); ***---------------------------------------------------------------------------- -*** force synthetic gases in as a minimum share of total liquids if cm_shSynGas switch used +*** force synthetic gases in as a minimum share of total liquids if cm_shSynGas switch used ***---------------------------------------------------------------------------- if (cm_shSynGas gt 0, diff --git a/modules/39_CCU/on/equations.gms b/modules/39_CCU/on/equations.gms index 5951701833..c631016f92 100644 --- a/modules/39_CCU/on/equations.gms +++ b/modules/39_CCU/on/equations.gms @@ -12,40 +12,46 @@ *' calculate CCU emissions (= CO2 demand of CCU technologies) *** --------------------------------------------------------- -q39_emiCCU(t,regi,te)$(te_ccu39(te)).. +q39_emiCCU(t,regi,te)$(te_ccu39(te) OR teCUPrc(te)).. sum(teCCU2rlf(te,rlf), vm_co2CCUshort(t,regi,"cco2","ccuco2short",te,rlf) ) =e= - sum(se2se_ccu39(enty,enty2,te), - p39_co2_dem(t,regi,enty,enty2,te) + sum(se2se_ccu39(enty,enty2,te), + p39_co2_dem(t,regi,enty,enty2,te) * vm_prodSe(t,regi,enty,enty2,te) ) + + + sum(tePrc2matIn(tePrc,opmoPrc,mat)$(sameAs(mat,"co2f")), + p37_specMatDem(mat,tePrc,opmoPrc) + * vm_outflowPrc(t,regi,tePrc,opmoPrc) + ) + ; -*' calculate v39_shSynLiq, share of synthetic (hydrogen-based) liquids in all SE liquids if cm_shSynLiq switch used +*' calculate v39_shSynLiq, share of synthetic (hydrogen-based) liquids in all SE liquids if cm_shSynLiq switch used q39_shSynLiq(t,regi)$(cm_shSynLiq gt 0).. ( sum(pe2se(entyPe,entySe,te)$seAgg2se("all_seliq",entySe), vm_prodSe(t,regi,entyPe,entySe,te)) + sum(se2se(entySe,entySe2,te)$seAgg2se("all_seliq",entySe2), vm_prodSe(t,regi,entySe,entySe2,te)) ) * v39_shSynLiq(t,regi) =e= - sum(se2se(entySe,entySe2,te)$(sameAs(entySe, "seh2") AND + sum(se2se(entySe,entySe2,te)$(sameAs(entySe, "seh2") AND sameAs(entySe2, "seliqsyn") AND - te_ccu39(te)), + te_ccu39(te)), vm_prodSe(t,regi,entySe,entySe2,te)) ; -*' calculate v39_shSynGas, share of synthetic (hydrogen-based) gas in all SE gases if cm_shSynGas switch used +*' calculate v39_shSynGas, share of synthetic (hydrogen-based) gas in all SE gases if cm_shSynGas switch used q39_shSynGas(t,regi)$(cm_shSynGas gt 0).. ( sum(pe2se(entyPe,entySe,te)$seAgg2se("all_sega",entySe), vm_prodSe(t,regi,entyPe,entySe,te)) + sum(se2se(entySe,entySe2,te)$seAgg2se("all_sega",entySe2), vm_prodSe(t,regi,entySe,entySe2,te)) ) * v39_shSynGas(t,regi) =e= - sum(se2se(entySe,entySe2,te)$(sameAs(entySe, "seh2") AND + sum(se2se(entySe,entySe2,te)$(sameAs(entySe, "seh2") AND sameAs(entySe2, "segasyn") AND - te_ccu39(te)), + te_ccu39(te)), vm_prodSe(t,regi,entySe,entySe2,te)) ; diff --git a/modules/39_CCU/on/sets.gms b/modules/39_CCU/on/sets.gms index 9f400c51fb..6c1f4c2f3f 100644 --- a/modules/39_CCU/on/sets.gms +++ b/modules/39_CCU/on/sets.gms @@ -37,30 +37,29 @@ se2se_ccu39(all_enty,all_enty,all_te) "map secondary energy to secondary ene teCCU2rlf(all_te,rlf) "mapping for CCU technologies to grades" / - (h22ch4) . 1 - (MeOH) . 1 / teSeCCU2rlf(all_te,rlf) "mapping for secondary energy CCU technologies to grades" / - (h22ch4) . 1 - (MeOH) . 1 + (h22ch4) . 1 + (MeOH) . 1 / ; -alias(teCCU2rlf,teCCU2rlf2); - ***------------------------------------------------------------------------- *** add module specific sets and mappings to the global sets and mappings ***------------------------------------------------------------------------- -enty(enty_ccu39) = YES; -te(te_ccu39) = YES; -se2se(se2se_ccu39) = YES; -teSe2rlf(teCCU2rlf) = YES; -teAdj(te_ccu39) = YES; +teCCU2rlf(teSeCCU2rlf) = YES; +teCCU2rlf(teCUPrc,"1") = YES; + +enty(enty_ccu39) = YES; +te(te_ccu39) = YES; +se2se(se2se_ccu39) = YES; +teSe2rlf(teCCU2rlf) = YES; +teAdj(te_ccu39) = YES; *** EOF ./modules/39_CCU/on/sets.gms