diff --git a/CHANGELOG.md b/CHANGELOG.md index a16d322bb..f64e4d5ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### input data/calibration - new input data rev6.84 [[#1757](https://github.com/remindmodel/remind/pull/1757)] +- new input data rev6.95 in US$2017[[#1812]] (https://github.com/remindmodel/remind/pull/1812) - CES parameter and gdx files calibrated with new default diffLin2Lin for NPi [[#1747](https://github.com/remindmodel/remind/pull/1747)] and [[#1757](https://github.com/remindmodel/remind/pull/1757)] @@ -17,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). [[1828]][(https://github.com/remindmodel/remind/pull/1828)] ### changed +- shift base unit from US$2005 to US$2017 [[#1812]] (https://github.com/remindmodel/remind/pull/1812) - plastic waste by default does not lag plastics production by ten years anymore; can be re-activated using `cm_wastelag` - moved to edgeTransport 2.0 version [[#1749](https://github.com/remindmodel/remind/pull/1749)] diff --git a/DESCRIPTION b/DESCRIPTION index c8a16bb94..d10f40021 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -17,8 +17,8 @@ Imports: data.table, devtools, dplyr, - edgeTransport (>= 2.3.0), - reporttransport (>= 0.0.11), + edgeTransport (>= 2.7.0), + reporttransport (>= 0.5.0), flexdashboard, GDPuc, gdx (>= 1.53.0), @@ -45,13 +45,16 @@ Imports: magpiesets, mip (>= 0.150.0), modelstats, - mrremind, + mrremind (>= 0.191.2), + mrcommons (>= 1.43.6), + mrdrivers (>= 3.0.0), + mrtransport (>= 0.7.1), mrvalidation, ncdf4, nleqslv, optparse, piamenv (>= 0.4.0), - piamInterfaces (>= 0.27.2), + piamInterfaces (>= 0.31.0), piamPlotComparison (>= 0.0.10), piamutils, plotly, @@ -61,7 +64,7 @@ Imports: raster, readr, readxl, - remind2 (>= 1.147.2), + remind2 (>= 1.156.1), renv, reshape2, reticulate, diff --git a/config/default.cfg b/config/default.cfg index 935a9c6e6..cac360943 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -28,10 +28,10 @@ cfg$regionmapping <- "config/regionmappingH12.csv" cfg$extramappings_historic <- "" #### Current input data revision (.) #### -cfg$inputRevision <- "6.92" +cfg$inputRevision <- "6.95" #### Current CES parameter and GDX revision (commit hash) #### -cfg$CESandGDXversion <- "d4c62a8f11e8a6827310519df09c98eb425a4070" +cfg$CESandGDXversion <- "ffbff5da0c24de39586df082716e5af449f5f231" #### Force the model to download new input data #### cfg$force_download <- FALSE diff --git a/core/datainput.gms b/core/datainput.gms index 469ed5597..f46f0478a 100644 --- a/core/datainput.gms +++ b/core/datainput.gms @@ -6,14 +6,14 @@ *** | Contact: remind@pik-potsdam.de *** SOF ./core/datainput.gms -*AJS* technical. initialize parameters so that they are read from gdx +*** technical. initialize parameters so that they are read from gdx vm_co2eq.l(ttot,regi) = 0; vm_emiAll.l(ttot,regi,enty) = 0; vm_emiCO2Sector.l(ttot,all_regi,emi_sectors) = 0; -*AJS* initialize parameter (avoid compilation errors) -* do this at the start of datainput to prevent accidental overwriting +*** initialize parameter (avoid compilation errors) +*** do this at the start of datainput to prevent accidental overwriting pm_SolNonInfes(regi) = 1; !! assume the starting point came from a feasible solution pm_capCum0(ttot,regi,teLearn)$( (ttot.val ge 2005) and (pm_SolNonInfes(regi) eq 1)) = 0; @@ -21,7 +21,7 @@ pm_globalMeanTemperature(tall) = 0; pm_globalMeanTemperatureZeroed1900(tall) = 0; pm_temperatureImpulseResponseCO2(tall,tall) = 0; -*AL* Initialise to avoid compilation errors in presolve if variable not in input.gdx +*** Initialise to avoid compilation errors in presolve if variable not in input.gdx vm_demFeForEs.L(t,regi,entyFe,esty,teEs) = 0; vm_demFeForEs.L(t,regi,fe2es(entyFe,esty,teEs)) = 0.1; @@ -41,14 +41,12 @@ pm_dt("1900") = 5; pm_dt(ttot)$(ttot.val > 1900) = ttot.val - pm_ttot_val(ttot-1); display pm_ts, pm_dt; - loop(ttot, loop(tall$((ttot.val le tall.val) AND (pm_ttot_val(ttot+1) ge tall.val)), pm_interpolWeight_ttot_tall(tall) = ( p_tall_val(tall) - pm_ttot_val(ttot) ) / ( pm_ttot_val(ttot+1) - pm_ttot_val(ttot) ); ); ); - pm_tall_2_ttot(tall, ttot)$((ttot.val lt tall.val) AND (pm_ttot_val(ttot+1) gt tall.val)) = Yes; pm_ttot_2_tall(ttot,tall)$((ttot.val = tall.val) ) = Yes; @@ -106,14 +104,12 @@ $offdelim ; p_developmentState(tall,all_regi) = f_developmentState(tall,all_regi,"%c_GDPpcScen%"); - *** Load information from BAU run Execute_Loadpoint 'input' vm_cesIO, vm_invMacro; pm_gdp_gdx(ttot,regi) = vm_cesIO.l(ttot,regi,"inco"); p_inv_gdx(ttot,regi) = vm_invMacro.l(ttot,regi,"kap"); - *------------------------------------------------------------------------------------ *------------------------------------------------------------------------------------ *** ESM @@ -133,10 +129,10 @@ pm_shGasLiq_fe_lo(ttot,regi,sector)=0; *------------------------------------------------------------------------------------ -*** Technology data input read-in and manipulation +*** Technology data input read-in and manipulation START *------------------------------------------------------------------------------------ -*** Note: future to be its own module perhaps -*** Note: in module 5 there are more cost manipulation after initial capacities are calculated, be aware those can overwrite your technology values for policy runs if you set them here in the core +*** In module 5 there are more cost manipulation after initial capacities are calculated, +*** be aware those can overwrite your technology values for policy runs if you set them here in the core ***--------------------------------------------------------------------------- *** Reading in and initializing global data ***--------------------------------------------------------------------------- @@ -146,8 +142,9 @@ $include "./core/input/generisdata_tech.prn" $include "./core/input/generisdata_trade.prn" ; -*** CG warning: some of the SSP1 and SSP5 costs are not consistent with the story line (e.g. under SSP1 blue H2 and some fossil fuel CCS technologies have lower costs than in SSP2). This is to be fixed in the future when new SSP storylines are implemented, unclear when (29-1-2024). In the future, SSP1 and SSP5 data should be implemented as switches to avoid errors -*JH* SSP energy technology scenario +*** CG warning: some of the SSP1 and SSP5 costs are not consistent with the story line (e.g. under SSP1 blue H2 and some fossil fuel CCS technologies have lower costs than in SSP2). +*** This is to be fixed in the future when new SSP storylines are implemented, unclear when (29-1-2024). +*** In the future, SSP1 and SSP5 data should be implemented as switches to avoid errors table f_dataglob_SSP1(char,all_te) "Techno-economic assumptions consistent with SSP1" $include "./core/input/generisdata_tech_SSP1.prn" $include "./core/input/generisdata_trade.prn" @@ -158,8 +155,8 @@ $include "./core/input/generisdata_trade.prn" ; $ifthen.WindOff %cm_wind_offshore% == "1" -*CG* set wind offshore, storage and grid to be the same as wind onshore (later should be integrated into input data) -* main difference between onshore and offshore is the difference in f32_factorStorage +*** set wind offshore, storage and grid to be the same as wind onshore (later should be integrated into input data) +*** main difference between onshore and offshore is the difference in f32_factorStorage fm_dataglob(char,"storwindoff") = fm_dataglob(char,"storwind"); fm_dataglob(char,"gridwindoff") = fm_dataglob(char,"gridwind"); f_dataglob_SSP1(char,"storwindoff") = f_dataglob_SSP1(char,"storwind"); @@ -168,17 +165,6 @@ f_dataglob_SSP5(char,"storwindoff") = f_dataglob_SSP5(char,"storwind"); f_dataglob_SSP5(char,"gridwindoff") = f_dataglob_SSP5(char,"gridwind"); $endif.WindOff -***--------------------------------------------------------------------------- -*** Reading in and initializing regional cost data -***--------------------------------------------------------------------------- -parameter p_inco0(ttot,all_regi,all_te) "regionalized technology costs Unit: USD$/KW" -/ -$ondelim -$include "./core/input/p_inco0.cs4r" -$offdelim -/ -; - *** initializing energy service capital pm_esCapCost(tall,all_regi,all_teEs) = 0; @@ -201,8 +187,7 @@ if (cm_VRE_supply_assumptions eq 3, fm_dataglob("incolearn","spv") = 4960; ); - -*JH* New nuclear assumption for SSP5 +*** New nuclear assumption for SSP5 if (cm_nucscen eq 6, f_dataglob_SSP5("inco0","tnrs") = 6270; !! increased from 4000 to 6270 with the update of technology costs in REMIND 1.7 to keep the percentage increase between SSP2 and SSP5 constant ); @@ -223,31 +208,42 @@ $endif.WindOff display fm_dataglob; -*TD* ccsinje cost scenarios -* low estimate: ccsinje cost prior to 03/2024; i.e. ~11 USD/tCO2 in 2025, decreasing to ~7.5USD/tCO2 as of 2035 +*** ccsinje cost scenarios +*** low estimate: ccsinje cost prior to 03/2024; i.e. ~11 USD/tCO2 in 2025, decreasing to ~7.5USD/tCO2 as of 2035 $if "%cm_ccsinjeCost%" == "low" fm_dataglob("tech_stat","ccsinje") = 2; $if "%cm_ccsinjeCost%" == "low" fm_dataglob("inco0","ccsinje") = 220; $if "%cm_ccsinjeCost%" == "low" fm_dataglob("constrTme","ccsinje") = 0; -* high estimate: ~20USD/tCO2 (constant), assuming upper end of storage cost and long transport distances +*** high estimate: ~20USD/tCO2 (constant), assuming upper end of storage cost and long transport distances $if "%cm_ccsinjeCost%" == "high" fm_dataglob("inco0","ccsinje") = 550; ***--------------------------------------------------------------------------- *** Manipulating global or regional cost technology data - relative value ***--------------------------------------------------------------------------- *** Overwrite default technology cost parameter values based on specific scenario configs -$if not "%cm_incolearn%" == "off" parameter p_new_incolearn(all_te) / %cm_incolearn% /; -$if not "%cm_incolearn%" == "off" fm_dataglob("incolearn",te)$p_new_incolearn(te)=p_new_incolearn(te); -$if not "%cm_inco0Factor%" == "off" parameter p_new_inco0Factor(all_te) / %cm_inco0Factor% /; -$if not "%cm_inco0Factor%" == "off" fm_dataglob("inco0",te)$p_new_inco0Factor(te)=p_new_inco0Factor(te)*fm_dataglob("inco0",te); -$if not "%cm_inco0RegiFactor%" == "off" parameter p_new_inco0RegiFactor(all_te) / %cm_inco0RegiFactor% /; -$if not "%cm_inco0RegiFactor%" == "off" p_inco0(ttot,regi,te)$(p_inco0(ttot,regi,te) and p_new_inco0RegiFactor(te)) = p_new_inco0RegiFactor(te)*p_inco0(ttot,regi,te); -$if not "%cm_learnRate%" == "off" parameter p_new_learnRate(all_te) / %cm_learnRate% /; -$if not "%cm_learnRate%" == "off" fm_dataglob("learn",te)$p_new_learnRate(te)=p_new_learnRate(te); +$if not "%cm_incolearn%" == "off" parameter p_new_incolearn(all_te) / %cm_incolearn% /; +$if not "%cm_incolearn%" == "off" fm_dataglob("incolearn",te)$p_new_incolearn(te) = p_new_incolearn(te); +$if not "%cm_inco0Factor%" == "off" parameter p_new_inco0Factor(all_te) / %cm_inco0Factor% /; +$if not "%cm_inco0Factor%" == "off" fm_dataglob("inco0",te)$p_new_inco0Factor(te) = p_new_inco0Factor(te) * fm_dataglob("inco0",te); +$if not "%cm_learnRate%" == "off" parameter p_new_learnRate(all_te) / %cm_learnRate% /; +$if not "%cm_learnRate%" == "off" fm_dataglob("learn",te)$p_new_learnRate(te) = p_new_learnRate(te); + +*** generisdata_tech is in $2015. Needs to be converted to $2017 +fm_dataglob("inco0",te) = s_D2015_2_D2017 * fm_dataglob("inco0",te); +fm_dataglob("incolearn",te) = s_D2015_2_D2017 * fm_dataglob("incolearn",te); +fm_dataglob("omv",te) = s_D2015_2_D2017 * fm_dataglob("omv",te); -*RP* the new cost data in generisdata_tech is now in $2015. As long as the model runs in $2005, these values have first to be converted to D2005 by dividing by 1.2 downwards -fm_dataglob("inco0",te) = s_D2015_2_D2005 * fm_dataglob("inco0",te); -fm_dataglob("incolearn",te) = s_D2015_2_D2005 * fm_dataglob("incolearn",te); -fm_dataglob("omv",te) = s_D2015_2_D2005 * fm_dataglob("omv",te); -p_inco0(ttot,regi,te) = s_D2015_2_D2005 * p_inco0(ttot,regi,te); +***--------------------------------------------------------------------------- +*** Reading in and initializing regional cost data +***--------------------------------------------------------------------------- +parameter p_inco0(ttot,all_regi,all_te) "regionalized technology costs Unit: USD$/KW" +/ +$ondelim +$include "./core/input/p_inco0.cs4r" +$offdelim +/ +; + +$if not "%cm_inco0RegiFactor%" == "off" parameter p_new_inco0RegiFactor(all_te) / %cm_inco0RegiFactor% /; +$if not "%cm_inco0RegiFactor%" == "off" p_inco0(ttot,regi,te)$(p_inco0(ttot,regi,te) and p_new_inco0RegiFactor(te)) = p_new_inco0RegiFactor(te) * p_inco0(ttot,regi,te); *** inco0 (and incolearn) are given in $/kW (or $/(tC/a) for ccs-related tech or $/(t/a) for process-based industry) *** convert to REMIND units, i.e., T$/TW (or T$/(GtC/a) for ccs-related tech or T$/(Gt/a) for process-based industry) @@ -262,10 +258,9 @@ p_inco0(ttot,regi,te) = s_DpKW_2_TDpTW * p_inco0(ttot,regi,te); fm_dataglob("inco0","csp") = 0.7 * fm_dataglob("inco0","csp"); fm_dataglob("incolearn","csp") = 0.7 * fm_dataglob("incolearn","csp"); -*KK* adjust costs for oae from USD/GtCaO to USD/GtC +*** adjust costs for oae from USD/GtCaO to USD/GtC fm_dataglob("inco0", "oae_ng") = fm_dataglob("inco0", "oae_ng") / (cm_33_OAE_eff / sm_c_2_co2); fm_dataglob("inco0", "oae_el") = fm_dataglob("inco0", "oae_el") / (cm_33_OAE_eff / sm_c_2_co2); - *** -------------------------------------------------------------------------------- *** Regionalize technology investment cost data *** ------------------------------------------------------------------------------- @@ -302,7 +297,6 @@ $endif ) ); - *** nuclear sees 3% higher interest rates during construction time due to higher construction time risk, see "The economic future of nuclear power - A study conducted at The University of Chicago" (2004) loop(te$sameas(te,"tnrs"), p_tkpremused(regi,te) = 1/fm_dataglob("constrTme",te) @@ -317,7 +311,6 @@ $endif display p_tkpremused; *** modify regionalized cost data using cost premium during construction time - pm_data(regi,"inco0",te) = (1 + p_tkpremused(regi,te) ) * pm_data(regi,"inco0",te); pm_data(regi,"incolearn",te) = (1 + p_tkpremused(regi,te) ) * pm_data(regi,"incolearn",te); p_inco0(ttot,regi,teRegTechCosts) = (1 + p_tkpremused(regi,teRegTechCosts) ) * p_inco0(ttot,regi,teRegTechCosts); @@ -333,27 +326,26 @@ pm_data(regi,"floorcost",teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi, $ifthen.floorscen NOT %cm_floorCostScen% == "default" p_oldFloorCostdata(regi,teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi,"incolearn",te); $endif.floorscen - *** calculate floor costs for learning technologies if historical price structure prevails $ifthen.floorscen %cm_floorCostScen% == "pricestruc" -** compute maximum tech cost in 2015 for a given tech among regions +*** compute maximum tech cost in 2015 for a given tech among regions p_maxRegTechCost2015(teRegTechCosts) = SMax(regi, p_inco0("2015",regi,teRegTechCosts)); -*take the ratio of the tech cost in 2015 and the maximum cost, and multiply with the global floor to get new floorcost that preserves the price structure +*** take the ratio of the tech cost in 2015 and the maximum cost, and multiply with the global floor to get new floorcost that preserves the price structure pm_data(regi,"floorcost",teLearn(te))$(p_maxRegTechCost2015(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2015",regi,te) / p_maxRegTechCost2015(te); -* for newer data than 2015, use these +*** for newer data than 2015, use these p_maxRegTechCost2020(teRegTechCosts) = SMax(regi, p_inco0("2020",regi,teRegTechCosts)); pm_data(regi,"floorcost",teLearn(te))$(p_maxRegTechCost2020(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2020",regi,te) / p_maxRegTechCost2020(te); -* report the new floor cost data +*** report the new floor cost data p_newFloorCostdata(regi,teLearn(te))$(p_maxRegTechCost2015(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2015",regi,te) / p_maxRegTechCost2015(te); p_newFloorCostdata(regi,teLearn(te))$(p_maxRegTechCost2020(te) ne 0) = p_oldFloorCostdata(regi,te) * p_inco0("2020",regi,te) / p_maxRegTechCost2020(te); $endif.floorscen *** calculate floor costs for learning technologies if there is technology transfer $ifthen.floorscen %cm_floorCostScen% == "techtrans" -** compute maximum income GDP PPP per capita among regions in 2050 +*** compute maximum income GDP PPP per capita among regions in 2050 p_gdppcap2050_PPP(regi) = pm_gdp("2050",regi) / pm_shPPPMER(regi) / pm_pop("2050",regi); p_maxPPP2050 = SMax(regi, p_gdppcap2050_PPP(regi)); -*take the ratio of the PPP income and the maximum income, and multiply with the global floor to get new floorcost that simulates tech transfer where costs are solely dependent on local wages, not on IP rent +*** take the ratio of the PPP income and the maximum income, and multiply with the global floor to get new floorcost that simulates tech transfer where costs are solely dependent on local wages, not on IP rent pm_data(regi,"floorcost",teLearn(te))$(p_maxPPP2050 ne 0) = p_oldFloorCostdata(regi,te) * p_gdppcap2050_PPP(regi) / p_maxPPP2050; p_newFloorCostdata(regi,teLearn(te))$(p_maxPPP2050 ne 0) = p_oldFloorCostdata(regi,te) * p_gdppcap2050_PPP(regi) / p_maxPPP2050; $endif.floorscen @@ -367,8 +359,9 @@ $ifthen.REG_techcosts not "%cm_techcosts%" == "GLO" !! cm_techcosts is REG or pm_data(regi,"incolearn",teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi,"floorcost",te) ; $endif.REG_techcosts +*** ------------------------------------------------------------------------------- *** Calculate learning parameters: - +*** ------------------------------------------------------------------------------- *** global exponent *** parameter calculation for global level, that regional values can gradually converge to fm_dataglob("learnExp_woFC",teLearn(te)) = log(1 - fm_dataglob("learn",te)) / log(2); @@ -403,8 +396,8 @@ $else pm_data(regi,"learnMult_wFC","spv") = pm_data(regi,"incolearn","spv") / (sum(regi2,p_capCum("2020",regi2,"spv")) ** pm_data(regi,"learnExp_wFC","spv")); $endif -*FS initialize learning curve for most advanced technologies as defined by tech_stat = 4 in generisdata_tech.prn (with very small real-world capacities in 2020) -* equally for all regions based on global cumulate capacity of ccap0 and incolearn (difference between initial investment cost and floor cost) +*FS* initialize learning curve for most advanced technologies as defined by tech_stat = 4 in generisdata_tech.prn (with very small real-world capacities in 2020) +*** equally for all regions based on global cumulate capacity of ccap0 and incolearn (difference between initial investment cost and floor cost) pm_data(regi,"learnMult_wFC",te)$( pm_data(regi,"tech_stat",te) eq 4 ) = pm_data(regi,"incolearn",te) / ( fm_dataglob("ccap0",te) @@ -413,17 +406,18 @@ pm_data(regi,"learnMult_wFC",te)$( pm_data(regi,"tech_stat",te) eq 4 ) display p_capCum; display pm_data; - +*** ------------------------------------------------------------------------------- *** end learning parameters +*** ------------------------------------------------------------------------------- -*RP* 2012-03-07: Markup for advanced technologies +*** Markup for advanced technologies table p_costMarkupAdvTech(s_statusTe,tall) "Multiplicative investment cost markup for early time periods (until 2030) on advanced technologies (CCS, Hydrogen) that are not modeled through endogenous learning" $include "./core/input/p_costMarkupAdvTech.prn" ; *** add mark-up cost for tech_stat 4 and 5 technologies as for tech_stat 3 technologies in first years -p_costMarkupAdvTech("4",ttot)=p_costMarkupAdvTech("3",ttot); -p_costMarkupAdvTech("5",ttot)=p_costMarkupAdvTech("3",ttot); +p_costMarkupAdvTech("4",ttot) = p_costMarkupAdvTech("3",ttot); +p_costMarkupAdvTech("5",ttot) = p_costMarkupAdvTech("3",ttot); loop (teNoLearn(te), pm_inco0_t(ttot,regi,te) = pm_data(regi,"inco0",te); @@ -437,7 +431,7 @@ loop (teNoLearn(te), ); display pm_inco0_t; -*FL* regional differentiation and convergence of non-learning technologies costs +*** regional differentiation and convergence of non-learning technologies costs $ifthen.REG2040_techcosts "%cm_techcosts%" == "REG2040" !! cm_techcosts REG2040 *** for 2015-2040, use differentiated costs when available for a specific non-learning technology loop(te$( teNoLearn(te) AND teRegTechCosts(te) ), @@ -482,17 +476,16 @@ $ifthen.REG_techcosts "%cm_techcosts%" == "REG" !! cm_techcosts REG ); $endif.REG_techcosts - *------------------------------------------------------------------------------------ -*** END of Technology cost data input read-in and manipulation in core +*** Technology data input read-in and manipulation END *------------------------------------------------------------------------------------ *** Note: in modules/05_initialCap/on/preloop.gms, there are additional adjustment to investment *** cost in the near term due to calibration of historical energy conversion efficiencies based on *** initial capacities *------------------------------------------------------------------------------------ -*JH* Determine CCS injection rates -*LP* for c_ccsinjecratescen =0 the storing variable vm_co2CCS will be fixed to 0 in bounds.gms, the sm_ccsinjecrate=0 will cause a division by 0 error in the 21_tax module +*** Determine CCS injection rates +*** for c_ccsinjecratescen =0 the storing variable vm_co2CCS will be fixed to 0 in bounds.gms, the sm_ccsinjecrate=0 will cause a division by 0 error in the 21_tax module s_ccsinjecrate = 0.005 if (c_ccsinjecratescen eq 2, s_ccsinjecrate = s_ccsinjecrate * 0.50 ); !! Lower estimate if (c_ccsinjecratescen eq 3, s_ccsinjecrate = s_ccsinjecrate * 1.50 ); !! Upper estimate @@ -514,7 +507,7 @@ table fm_dataemiglob(all_enty,all_enty,all_te,all_enty) "read-in of emissions f $include "./core/input/generisdata_emi.prn" ; -parameter pm_share_ind_fesos(tall,all_regi) "Share of coal solids (coaltr) used in the industry (rest is residential)" +parameter pm_share_ind_fesos(tall,all_regi) "Share of coal solids (coaltr) used in the industry (rest is residential)" / $ondelim $include "./core/input/p_share_ind_fesos.cs4r" @@ -522,7 +515,7 @@ $offdelim / ; -parameter pm_share_ind_fesos_bio(tall,all_regi) "Share of biomass solids (biotr) used in the industry (rest is residential)" +parameter pm_share_ind_fesos_bio(tall,all_regi) "Share of biomass solids (biotr) used in the industry (rest is residential)" / $ondelim $include "./core/input/p_share_ind_fesos_bio.cs4r" @@ -530,7 +523,7 @@ $offdelim / ; -parameter pm_share_ind_fehos(tall,all_regi) "Share of heating oil used in the industry (rest is residential)" +parameter pm_share_ind_fehos(tall,all_regi) "Share of heating oil used in the industry (rest is residential)" / $ondelim $include "./core/input/p_share_ind_fehos.cs4r" @@ -559,7 +552,7 @@ pm_share_trans("2130",regi) = 0.865; pm_share_trans("2150",regi) = 0.872; -*JH* CO2 capture rate of CCS technologies (new SSP5 assumptions) +*** CO2 capture rate of CCS technologies (new SSP5 assumptions) if (c_ccscapratescen eq 2, fm_dataemiglob("pecoal","seel","igccc","co2") = 0.2; fm_dataemiglob("pecoal","seel","igccc","cco2") = 25.9; @@ -604,7 +597,7 @@ $offdelim *** Import and set regional data ***--------------------------------------------------------------------------- -*RP* 2012-07-24: CO2-technologies don't have own emissions, but the pipeline leakage rate (s_co2pipe_leakage) is multiplied on the individual pe2se +*** CO2-technologies don't have own emissions, but the pipeline leakage rate (s_co2pipe_leakage) is multiplied on the individual pe2se s_co2pipe_leakage = 0.01; loop(emi2te(enty,enty2,te,enty3)$teCCS(te), @@ -646,7 +639,7 @@ $offdelim ; pm_IO_trade(ttot,regi,enty,char) = f_IO_trade(ttot,regi,enty,char) * sm_EJ_2_TWa; -*LB* use scaled data for export to guarantee net trade = 0 for each traded good +*** use scaled data for export to guarantee net trade = 0 for each traded good loop(tradePe, loop(ttot, if(sum(regi2, pm_IO_trade(ttot,regi2,tradePe,"Xport")) ne 0, @@ -670,7 +663,7 @@ p_cint(regi,"co2","peoil","7")=0.2283105600; p_cint(regi,"co2","peoil","8")=0.4153983800; $ifthen.WindOff %cm_wind_offshore% == "0" -** historical installed capacity +*** historical installed capacity *** read-in of pm_histCap.cs3r $Offlisting table pm_histCap(tall,all_regi,all_te) "historical installed capacity" @@ -722,12 +715,12 @@ $endif.WindOff pm_cf(ttot,regi,te) = f_cf(ttot,regi,te); ***pm_cf(ttot,regi,"h2turbVRE") = 0.15; pm_cf(ttot,regi,"elh2VRE") = 0.6; -*short-term fix for new synfuel td technologies +*** short-term fix for new synfuel td technologies pm_cf(ttot,regi,"tdsyngas") = 0.65; pm_cf(ttot,regi,"tdsynhos") = 0.6; pm_cf(ttot,regi,"tdsynpet") = 0.7; pm_cf(ttot,regi,"tdsyndie") = 0.7; -*JD eternal short-term fix for process-based industry +*** eternal short-term fix for process-based industry pm_cf(ttot,regi,"bf") = 0.8; pm_cf(ttot,regi,"bfcc") = 0.8; pm_cf(ttot,regi,"bof") = 0.8; @@ -751,11 +744,10 @@ pm_cf(ttot,regi,"tdh2i") = pm_cf(ttot,regi,"tdh2s"); *** Region- and tech-specific early retirement rates -***Regional* loop(ext_regi$pm_extRegiEarlyRetiRate(ext_regi), pm_regiEarlyRetiRate(t,regi,te)$(regi_group(ext_regi,regi)) = pm_extRegiEarlyRetiRate(ext_regi); ); -*Tech-specific* +***Tech-specific* *RP*: reduce early retirement for technologies with additional characteristics that are difficult to represent in REMIND, eg. industries built around heating/CHP plants, or flexibility from ngt plants pm_regiEarlyRetiRate(t,regi,"ngt") = 0.3 * pm_regiEarlyRetiRate(t,regi,"ngt"); !! ngt should only be phased out very slowly, as they provide flexibility - which REMIND is not too good at capturing endogeneously pm_regiEarlyRetiRate(t,regi,"gaschp") = 0.5 * pm_regiEarlyRetiRate(t,regi,"gaschp"); !! chp should only be phased out slowly, as district heating networks/ industry uses are designed to a specific heat input @@ -812,7 +804,7 @@ loop(regi, ); ); -*LB* calculate mapping tsu2opTimeYr +*** calculate mapping tsu2opTimeYr alias(ttot, tttot); tsu2opTimeYr(ttot,opTimeYr) = no; tsu2opTimeYr(ttot,"1") = yes; @@ -1370,7 +1362,6 @@ if(c_macscen eq 2, if(c_macscen eq 1, pm_macSwitch(emiMacSector) = 1; ); -*pm_macCostSwitch(enty)=pm_macSwitch(enty); *** for NDC and NPi switch off landuse MACs $if %carbonprice% == "off" pm_macSwitch(emiMacMagpie) = 0; @@ -1388,7 +1379,6 @@ $offdelim ; pm_taxCO2eq(ttot,regi)$(ttot.val le 2020) = f_taxCO2eqHist(ttot,regi) * sm_DptCO2_2_TDpGtC; - *DK* LU emissions are abated in MAgPIE in coupling mode *** An alternative to the approach below could be to introduce a new value for c_macswitch that only deactivates the LU MACs $if %cm_MAgPIE_coupling% == "on" pm_macSwitch(enty)$emiMacMagpie(enty) = 0; diff --git a/core/declarations.gms b/core/declarations.gms index 1e98f91bd..e4648ecfd 100644 --- a/core/declarations.gms +++ b/core/declarations.gms @@ -245,7 +245,7 @@ p_co2CCSReference(ttot,all_regi,all_enty,all_enty,all_te,rlf) "Captured CO2 p_prodAllReference(ttot,all_regi,all_te) "Sum of the above in the reference run. As each te has only one type of output, the differing units should not be a problem" -* Energy carrier Prices +*** Energy carrier Prices pm_FEPrice(ttot,all_regi,all_enty,sector,emiMkt) "parameter to capture all FE prices across sectors and markets (tr$2005/TWa)" pm_FEPrice_iter(iteration,ttot,all_regi,all_enty,sector,emiMkt) "parameter to capture all FE prices across sectors and markets (tr$2005/TWa) across iterations" pm_SEPrice(ttot,all_regi,all_enty) "parameter to capture all SE prices (tr$2005/TWa)" @@ -505,7 +505,7 @@ qm_co2eqCum(all_regi) "cumulate regional emission q_budgetCO2eqGlob "global emission budget balance" q_emiTeDetailMkt(ttot,all_regi,all_enty,all_enty,all_te,all_enty,all_emiMkt) "detailed energy specific emissions per region and market" -q_emiTeMkt(ttot,all_regi,all_enty,all_emiMkt) "total energy-emissions per region and market" +q_emiTeMkt(ttot,all_regi,all_enty,all_emiMkt) "total energy-emissions per region and market" q_emiEnFuelEx(ttot,all_regi,all_enty) "energy emissions from fuel extraction" q_emiAllMkt(ttot,all_regi,all_enty,all_emiMkt) "total regional emissions for each emission market" @@ -561,9 +561,6 @@ $IFTHEN.sehe_upper not "%cm_sehe_upper%" == "off" q_heat_limit(ttot,all_regi) "equation to limit maximum level of secondary energy district heating and heat pumps use" $ENDIF.sehe_upper -***---------------------------------------------------------------------------------------- -***----------------------------------------------trade module------------------------------ - ; ***---------------------------------------------------------------------------------------- *** SCALARS @@ -571,11 +568,6 @@ $ENDIF.sehe_upper scalars o_modelstat "critical solver status for solution" -***---------------------------------------------------------------------------------------- -***------------------------------------------------MACRO module---------------------------- - -***---------------------------------------------------------------------------------------- -***-----------------------------------------------ESM module------------------------------- pm_conv_TWa_EJ "conversion from TWa to EJ" /31.536/, sm_c_2_co2 "conversion from c to co2" /3.666666666667/, *** conversion factors of time units @@ -605,9 +597,12 @@ s_MtCO2_2_GtC "conversion factor from Mt s_MtCH4_2_TWa "Energy content of methane. MtCH4 --> TWa: 1 MtCH4 = 1.23 * 10^6 toe * 42 GJ/toe * 10^-9 EJ/GJ * 1 TWa/31.536 EJ = 0.001638 TWa (BP statistical review)" /0.001638/ -sm_h2kg_2_h2kWh "convert kilogramme of hydrogen to kwh energy value." /32.5/ +s_D2015_2_D2017 "Convert US$2015 to US$2017" /1.0292/ +sm_D2005_2_D2017 "Convert US$2005 to US$2017" /1.231/ +sm_D2020_2_D2017 "Convert US$2020 to US$2017" /0.9469/ +sm_EURO2023_2_D2017 "Convert EURO 2023 to US$2017" /0.8915/ -s_D2015_2_D2005 "Convert $2015 to $2005 by dividing by 1.2: 1/1.2 = 0.8333" /0.8333/ +sm_h2kg_2_h2kWh "convert kilogramme of hydrogen to kwh energy value." /32.5/ sm_DptCO2_2_TDpGtC "Conversion multiplier to go from $/tCO2 to T$/GtC: 44/12/1000" /0.00366667/ s_co2pipe_leakage "Leakage rate of CO2 pipelines. [0..1]" @@ -630,16 +625,13 @@ sm_globalBudget_dev "actual level of global cu sm_eps "small number: 1e-9 " /1e-9/ sm_CES_calibration_iteration "current calibration iteration number, loaded from environment variable cm_CES_calibration_iteration" /0/ - -***---------------------------------------------------------------------------------------- -***----------------------------------------------trade module------------------------------ ; +sm_dmac = sm_D2005_2_D2017 * sm_dmac; sm_tgn_2_pgc = (44/28) * s_gwpN2O * (12/44) * 0.001; sm_tgch4_2_pgc = s_gwpCH4 * (12/44) * 0.001; -***---------------------------------------------------------------------------------------- -*----------------------------------------------carbon intensities of coal, oil, and gas +*** carbon intensities of coal, oil, and gas pm_cintraw("pecoal") = 26.1 / s_zj_2_twa; pm_cintraw("peoil") = 20.0 / s_zj_2_twa; pm_cintraw("pegas") = 15.0 / s_zj_2_twa; diff --git a/core/input/generisdata_tech.prn b/core/input/generisdata_tech.prn index f1f712a65..131297738 100644 --- a/core/input/generisdata_tech.prn +++ b/core/input/generisdata_tech.prn @@ -1,6 +1,5 @@ *** SOF ./core/input/generisdata_tech.prn $ontext -IMPORTANT: all costs are now given in $2015! As long as the model runs in $2005, the values need to be converted in datainput.gms tech_stat technology status: how close a technology is to market readiness. Scale: 0-3, with 0 'I can go out and build a GW plant today' to 3 'Still some research necessary' inco0 Initial investment costs given in $[2015] / kW[output] capacity; for dac/prc cc: $[2015] / (tC[captured]/a); for other indutry prc: $[2015]/(t[output]/a) constrTme Construction time in years, needed to calculate turn-key cost premium compared to overnight costs diff --git a/core/input/generisdata_tech_SSP1.prn b/core/input/generisdata_tech_SSP1.prn index 8cee32202..f9be16c02 100644 --- a/core/input/generisdata_tech_SSP1.prn +++ b/core/input/generisdata_tech_SSP1.prn @@ -1,6 +1,5 @@ *** SOF ./core/input/generisdata_tech_SSP1.prn $ontext -IMPORTANT: all costs are now given in $2015! As long as the model runs in $2005, the values need to be converted in datainput.gms tech_stat technology status: how close a technology is to market readiness. Scale: 0-3, with 0 'I can go out and build a GW plant today' to 3 'Still some research necessary' inco0 Initial investment costs given in $[2015] / kW[output] capacity; for dac: $[2015] / (tC[captured]/a) constrTme Construction time in years, needed to calculate turn-key cost premium compared to overnight costs diff --git a/core/input/generisdata_tech_SSP5.prn b/core/input/generisdata_tech_SSP5.prn index e91cfeb85..b530d35d0 100644 --- a/core/input/generisdata_tech_SSP5.prn +++ b/core/input/generisdata_tech_SSP5.prn @@ -1,6 +1,5 @@ *** SOF ./core/input/generisdata_tech_SSP5.prn $ontext -IMPORTANT: all costs are now given in $2015! As long as the model runs in $2005, the values need to be converted in datainput.gms tech_stat technology status: how close a technology is to market readiness. Scale: 0-3, with 0 'I can go out and build a GW plant today' to 3 'Still some research necessary' inco0 Initial investment costs given in $[2015] / kW[output] capacity; for dac: $[2015] / (tC[captured]/a) constrTme Construction time in years, needed to calculate turn-key cost premium compared to overnight costs diff --git a/core/input/generisdata_trade.prn b/core/input/generisdata_trade.prn index 764f484ef..e171649b9 100644 --- a/core/input/generisdata_trade.prn +++ b/core/input/generisdata_trade.prn @@ -1,6 +1,5 @@ *** SOF ./core/input/generisdata_trade.prn $ontext -IMPORTANT: all costs are now given in $2015! As long as the model runs in $2005, the values need to be converted in datainput.gms tech_stat Technology status: how close a technology is to market readiness. Scale: 0-3, with 0 'I can go out and build a GW plant today' to 3 'Still some research necessary'. inco0 Initial investment costs given in $(2015)/kW(output) capacity. Independent of distance. inco0_d Initial investment costs given in $(2015)/kW(output) capacity. Per 1000km. diff --git a/core/postsolve.gms b/core/postsolve.gms index ad69844c8..12a35b130 100644 --- a/core/postsolve.gms +++ b/core/postsolve.gms @@ -825,13 +825,13 @@ p_FEPrice_by_SE_Sector_EmiMkt(t,regi,entySe,entyFe,sector,emiMkt)$(abs (qm_budge loop((t,regi,entySe,entyFe,sector,emiMkt)$(sefe(entySe,entyFe) AND sector2emiMkt(sector,emiMkt) AND entyFe2Sector(entyFe,sector)), *** initialize prices - p_FEPrice_by_Sector_EmiMkt(t,regi,entyFe,sector,emiMkt)=0; - pm_FEPrice_by_SE_Sector(t,regi,entySe,entyFe,sector)=0; - p_FEPrice_by_SE_EmiMkt(t,regi,entySe,entyFe,emiMkt)=0; - p_FEPrice_by_SE(t,regi,entySe,entyFe)=0; - p_FEPrice_by_Sector(t,regi,entyFe,sector)=0; - p_FEPrice_by_EmiMkt(t,regi,entyFe,emiMkt)=0; - p_FEPrice_by_FE(t,regi,entyFe)=0; + p_FEPrice_by_Sector_EmiMkt(t,regi,entyFe,sector,emiMkt) = 0; + pm_FEPrice_by_SE_Sector(t,regi,entySe,entyFe,sector) = 0; + p_FEPrice_by_SE_EmiMkt(t,regi,entySe,entyFe,emiMkt) = 0; + p_FEPrice_by_SE(t,regi,entySe,entyFe) = 0; + p_FEPrice_by_Sector(t,regi,entyFe,sector) = 0; + p_FEPrice_by_EmiMkt(t,regi,entyFe,emiMkt) = 0; + p_FEPrice_by_FE(t,regi,entyFe) = 0; *** lower level marginal price is equal to non-zero, non-eps minimal price at higher level loop(entySe2, diff --git a/core/presolve.gms b/core/presolve.gms index 8493b6eb9..38954ad66 100644 --- a/core/presolve.gms +++ b/core/presolve.gms @@ -350,8 +350,8 @@ p_macLevFree(ttot,regi,enty)$( ttot.val gt 2005 ) $IFTHEN.scaleEmiHist %c_scaleEmiHistorical% == "on" -**p_macLevFree(ttot,regi,emiMacMagpie(enty))=0; -* Set minimum abatment levels based on historical emissions +*** p_macLevFree(ttot,regi,emiMacMagpie(enty))=0; +*** Set minimum abatment levels based on historical emissions p_macLevFree("2010",regi,enty)$(p_histEmiSector("2005",regi,"ch4","agriculture","process") AND (sameas(enty,"ch4rice") OR sameas(enty,"ch4animals") OR sameas(enty,"ch4anmlwst"))) = max( 0, 1 - (p_histEmiSector("2010",regi,"ch4","agriculture","process")+p_histEmiSector("2010",regi,"ch4","lulucf","process"))/(p_histEmiSector("2005",regi,"ch4","agriculture","process")+p_histEmiSector("2005",regi,"ch4","lulucf","process"))); p_macLevFree(ttot,regi,enty)$((ttot.val ge 2015) AND p_histEmiSector("2005",regi,"ch4","agriculture","process") AND (sameas(enty,"ch4rice") OR sameas(enty,"ch4animals") OR sameas(enty,"ch4anmlwst"))) = max( 0, 1 - (p_histEmiSector("2015",regi,"ch4","agriculture","process")+p_histEmiSector("2015",regi,"ch4","lulucf","process"))/(p_histEmiSector("2005",regi,"ch4","agriculture","process")+p_histEmiSector("2005",regi,"ch4","lulucf","process")) ); p_macLevFree("2010",regi,enty)$(p_histEmiSector("2005",regi,"ch4","agriculture","process") AND (sameas(enty,"n2ofertin") OR sameas(enty,"n2ofertcr") OR sameas(enty,"n2oanwstc") OR sameas(enty,"n2oanwstm") OR sameas(enty,"n2oanwstp"))) = max( 0, 1 - (p_histEmiSector("2010",regi,"n2o","agriculture","process")+p_histEmiSector("2010",regi,"n2o","lulucf","process"))/(p_histEmiSector("2005",regi,"n2o","agriculture","process")+p_histEmiSector("2005",regi,"n2o","lulucf","process")) ); @@ -377,7 +377,7 @@ pm_macAbatLev(ttot,regi,enty)$( ttot.val gt 2015 ) pm_macAbat(ttot,regi,enty,steps) ), p_macLevFree(ttot,regi,enty) - ); + ); pm_macAbatLev("2015",regi,"co2luc") = 0; pm_macAbatLev("2020",regi,"co2luc") = 0; diff --git a/core/sets.gms b/core/sets.gms index 88995d976..ce1f71336 100755 --- a/core/sets.gms +++ b/core/sets.gms @@ -77,7 +77,8 @@ gdp_SSP2EU_NAV_all "NAVIGATE demand scenarios: All measures (ele + act + tec)" gdp_SSP2EU_CAMP_weak "CAMPAIGNers scenario with low ambition lifestyle change" gdp_SSP2EU_CAMP_strong "CAMPAIGNers scenario with high ambition lifestyle change" gdp_SSP2_demDiffer_IKEA "Demand reduction in Global North (CAZ,EUR,JPN,NEU,USA) and demand increase in Emerging regions (IND,LAM,OAS,SSA). Reduction follows the factor f of demRedStrong scenario, while increase uses factor 2-f." -gdp_SSP2EU_demRedStrong "edget internal demScen, might be removed soon" +gdp_SSP2_demRedStrong "edget internal demScen, might be removed soon" +gdp_SSP2_demRedWeak / all_GDPpcScen "all possible GDP per capita scenarios (GDP and Population from the same SSP-scenario" diff --git a/main.gms b/main.gms index ec69744f2..448872343 100755 --- a/main.gms +++ b/main.gms @@ -1214,7 +1214,7 @@ $setglobal cm_rcp_scen none !! def = "none" !! regexp = none|rcp20|rcp *' * (2023_cond): all NDCs conditional to international financial support published until December 31, 2023 *' * (2023_uncond): all NDCs independent of international financial support published until December 31, 2023 *' * Other supported years are 2022, 2021 and 2018, always containing NDCs published until December 31 of that year -$setglobal cm_NDC_version 2023_cond !! def = "2023_cond" !! regexp = 20(18|2[1-4])_(un)?cond +$setglobal cm_NDC_version 2024_cond !! def = "2024_cond" !! regexp = 20(18|2[1-4])_(un)?cond *' cm_netZeroScen "choose scenario of net zero targets of netZero realization of module 46_carbonpriceRegi" *' *' (NGFS_v4): settings used for NGFS v4, 2023 diff --git a/modules/02_welfare/ineqLognormal/datainput.gms b/modules/02_welfare/ineqLognormal/datainput.gms index 5f7460555..ba0effb47 100644 --- a/modules/02_welfare/ineqLognormal/datainput.gms +++ b/modules/02_welfare/ineqLognormal/datainput.gms @@ -11,15 +11,15 @@ $if %cm_less_TS% == "on" pm_welf("2060") = 0.9; *RP* 2012-03-06: Inconvenience costs on seprod $IFTHEN.INCONV %cm_INCONV_PENALTY% == "on" -p02_inconvpen_lap(ttot,regi,"coaltr")$(ttot.val ge 2005) = 0.5; !! In dollar per GJ seprod at 1.000$/cap GDP, or 10$/GJ at 10.000$_GDP/cap -p02_inconvpen_lap(ttot,regi,"biotr")$(ttot.val ge 2005) = 1.0; !! In dollar per GJ seprod -p02_inconvpen_lap(ttot,regi,"biotrmod")$(ttot.val ge 2005) = 0.25; !! In dollar per GJ seprod. Biotrmod is a mix of wood stoves and automated wood pellets for heating, which has lower air pollution and other discomfort effects +p02_inconvpen_lap(ttot,regi,"coaltr")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.5; !! In dollar per GJ seprod at 1.000$/cap GDP, or 10$/GJ at 10.000$_GDP/cap +p02_inconvpen_lap(ttot,regi,"biotr")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 1.0; !! In dollar per GJ seprod +p02_inconvpen_lap(ttot,regi,"biotrmod")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.25; !! In dollar per GJ seprod. Biotrmod is a mix of wood stoves and automated wood pellets for heating, which has lower air pollution and other discomfort effects *' Transformation of coal to liquids/gases/H2 brings local pollution, which is less accepted at higher incomes -> use the inconvenience cost channel -p02_inconvpen_lap(ttot,regi,"coalftrec")$(ttot.val ge 2005) = 0.9; !! In dollar per GJ seprod -p02_inconvpen_lap(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = 0.9; !! equivalent to 4$/GJ at 40.000$_GDP/cap, or 10$/GJ at 100.000$_GDP/cap -p02_inconvpen_lap(ttot,regi,"coalgas")$(ttot.val ge 2005) = 0.9; !! -p02_inconvpen_lap(ttot,regi,"coalh2")$(ttot.val ge 2005) = 0.9; !! -p02_inconvpen_lap(ttot,regi,"coalh2c")$(ttot.val ge 2005) = 0.9; !! +p02_inconvpen_lap(ttot,regi,"coalftrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; !! In dollar per GJ seprod +p02_inconvpen_lap(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; !! equivalent to 4$/GJ at 40.000$_GDP/cap, or 10$/GJ at 100.000$_GDP/cap +p02_inconvpen_lap(ttot,regi,"coalgas")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; +p02_inconvpen_lap(ttot,regi,"coalh2")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; +p02_inconvpen_lap(ttot,regi,"coalh2c")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; p02_inconvpen_lap(ttot,regi,te)$(ttot.val ge 2005) = p02_inconvpen_lap(ttot,regi,te) * 4.3 * 1E-4; !! this is now equivalent to 1$/GJ at 1000$/per Capita in the welfare logarithm p02_inconvpen_lap(ttot,regi,te)$(ttot.val ge 2005) = p02_inconvpen_lap(ttot,regi,te) * (1/sm_giga_2_non) / sm_GJ_2_TWa; !! conversion util/(GJ/cap) -> util/(TWa/Gcap) *RP* these values are all calculated on seprod level. @@ -27,7 +27,7 @@ display p02_inconvpen_lap; $ENDIF.INCONV *BS* 2020-03-12: additional inputs for inequality -* To Do: rename file, then also in "files" and moinput::fullREMIND.R +*** To Do: rename file, then also in "files" and mrremind::fullREMIND.R parameter f02_ineqTheil(tall,all_regi,all_GDPscen) "Gini data" / $ondelim @@ -39,23 +39,19 @@ p02_ineqTheil(ttot,regi)$(ttot.val ge 2005) = f02_ineqTheil(ttot,regi,"%cm_GDPsc display p02_ineqTheil; -* for a policy run, we need to load values coming from the baseline for consumption, tax revenues and energy expenditures: +*** for a policy run, we need to load values coming from the baseline for consumption, tax revenues and energy expenditures: if ((cm_emiscen ne 1), Execute_Loadpoint 'input_ref' p02_taxrev_redistr0_ref=v02_taxrev_Add.l; Execute_Loadpoint 'input_ref' p02_cons_ref=vm_cons.l; Execute_Loadpoint 'input_ref' p02_energyExp_ref=v02_energyExp.l; Execute_Loadpoint 'input_ref' p02_damageFactor_ref=vm_damageFactor.l; - -* if energy system costs are used: -* Execute_Loadpoint 'input_ref' p02_energyExp_ref=vm_costEnergySys.l; - ); -* income elasticity of tax revenues redistribution. +*** income elasticity of tax revenues redistribution. p02_distrBeta(ttot,regi)$(ttot.val ge 2005) = cm_distrBeta; -* for a baseline we need the following variables to be 0: +*** for a baseline we need the following variables to be 0: p02_energyExp_ref(ttot,regi)$(cm_emiscen eq 1)=0; p02_taxrev_redistr0_ref(ttot,regi)$(cm_emiscen eq 1)=0; v02_taxrev_Add.l(ttot,regi)$(cm_emiscen eq 1)=0; @@ -63,13 +59,13 @@ v02_energyExp_Add.l(ttot,regi)$(cm_emiscen eq 1)=0; v02_energyexpShare.l(ttot,regi)$(cm_emiscen eq 1)=0; v02_revShare.l(ttot,regi)$(cm_emiscen eq 1)=0; -* For runs that are not baseline, we need to initialize: -* taxrev_Add, because they are used in the condition sign: +*** For runs that are not baseline, we need to initialize: +*** taxrev_Add, because they are used in the condition sign: v02_taxrev_Add.l(ttot,regi)$(cm_emiscen ne 1)=0; -* and v02_energyExp to the level in the baseline so the model can have a start value +*** and v02_energyExp to the level in the baseline so the model can have a start value v02_energyExp.l(ttot,regi)$(cm_emiscen eq 1)=p02_energyExp_ref(ttot,regi)$(cm_emiscen eq 1); -*parameters for translating output damage into consumption loss +*** parameters for translating output damage into consumption loss parameter f02_damConsFactor(all_regi,dam_factors) "for translating output to consumption losses from KW damage function" / $ondelim diff --git a/modules/02_welfare/utilitarian/datainput.gms b/modules/02_welfare/utilitarian/datainput.gms index 0aedb70f3..4579c365a 100644 --- a/modules/02_welfare/utilitarian/datainput.gms +++ b/modules/02_welfare/utilitarian/datainput.gms @@ -11,15 +11,15 @@ pm_welf("2060") = 0.9; *RP* 2012-03-06: Inconvenience costs on seprod $IFTHEN.INCONV %cm_INCONV_PENALTY% == "on" -p02_inconvpen_lap(ttot,regi,"coaltr")$(ttot.val ge 2005) = 0.5; !! In dollar per GJ seprod at 1.000$/cap GDP, or 10$/GJ at 10.000$_GDP/cap -p02_inconvpen_lap(ttot,regi,"biotr")$(ttot.val ge 2005) = 1.0; !! In dollar per GJ seprod -p02_inconvpen_lap(ttot,regi,"biotrmod")$(ttot.val ge 2005) = 0.25; !! In dollar per GJ seprod. Biotrmod is a mix of wood stoves and automated wood pellets for heating, which has lower air pollution and other discomfort effects +p02_inconvpen_lap(ttot,regi,"coaltr")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.5; !! In dollar per GJ seprod at 1.000$/cap GDP, or 10$/GJ at 10.000$_GDP/cap +p02_inconvpen_lap(ttot,regi,"biotr")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 1.0; !! In dollar per GJ seprod +p02_inconvpen_lap(ttot,regi,"biotrmod")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.25; !! In dollar per GJ seprod. Biotrmod is a mix of wood stoves and automated wood pellets for heating, which has lower air pollution and other discomfort effects *' Transformation of coal to liquids/gases/H2 brings local pollution, which is less accepted at higher incomes -> use the inconvenience cost channel -p02_inconvpen_lap(ttot,regi,"coalftrec")$(ttot.val ge 2005) = 0.9; !! In dollar per GJ seprod -p02_inconvpen_lap(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = 0.9; !! equivalent to 4$/GJ at 40.000$_GDP/cap, or 10$/GJ at 100.000$_GDP/cap -p02_inconvpen_lap(ttot,regi,"coalgas")$(ttot.val ge 2005) = 0.9; !! -p02_inconvpen_lap(ttot,regi,"coalh2")$(ttot.val ge 2005) = 0.9; !! -p02_inconvpen_lap(ttot,regi,"coalh2c")$(ttot.val ge 2005) = 0.9; !! +p02_inconvpen_lap(ttot,regi,"coalftrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; !! In dollar per GJ seprod +p02_inconvpen_lap(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; !! equivalent to 4$/GJ at 40.000$_GDP/cap, or 10$/GJ at 100.000$_GDP/cap +p02_inconvpen_lap(ttot,regi,"coalgas")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; +p02_inconvpen_lap(ttot,regi,"coalh2")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; +p02_inconvpen_lap(ttot,regi,"coalh2c")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.9; p02_inconvpen_lap(ttot,regi,te)$(ttot.val ge 2005) = p02_inconvpen_lap(ttot,regi,te) * 4.3 * 1E-4; !! this is now equivalent to 1$/GJ at 1000$/per Capita in the welfare logarithm p02_inconvpen_lap(ttot,regi,te)$(ttot.val ge 2005) = p02_inconvpen_lap(ttot,regi,te) * (1/sm_giga_2_non) / sm_GJ_2_TWa; !! conversion util/(GJ/cap) -> util/(TWa/Gcap) *RP* these values are all calculated on seprod level. diff --git a/modules/21_tax/off/not_used.txt b/modules/21_tax/off/not_used.txt index 12e8c638e..d50474410 100644 --- a/modules/21_tax/off/not_used.txt +++ b/modules/21_tax/off/not_used.txt @@ -24,7 +24,6 @@ cm_fetaxscen, switch, ??? cm_gdximport_target, switch, ??? pm_pop,parameter,??? cm_so2tax_scen,switch,??? -sm_DpGJ_2_TDpTWa,switch,??? vm_cesIO,variable,??? vm_co2eq,variable,??? cm_emiscen,input,questionnaire @@ -72,3 +71,4 @@ pm_gdp,input,only needed if tax is on pm_cf,input,only needed if tax is on vm_shDemSeel,input,only needed if tax is on pm_teAnnuity,input,only needed if tax is on +sm_D2005_2_D2017,input,no conversion needed diff --git a/modules/21_tax/on/datainput.gms b/modules/21_tax/on/datainput.gms index 0f9b64208..781b768fc 100644 --- a/modules/21_tax/on/datainput.gms +++ b/modules/21_tax/on/datainput.gms @@ -77,33 +77,22 @@ if(cm_fetaxscen eq 0, *** -------------------------PE2SE Taxes--------------------------(Primary to secondary energy technology taxes, specified by technology) *** cb 20110923 load paths for technology taxes, subsidies and inconvenience costs p21_tau_pe2se_tax(tall,regi,te) = 0; -p21_tau_pe2se_inconv(tall,regi,te) = 0; p21_tau_pe2se_sub(tall,regi,te)= 0; *RP* FILE changed by hand after introduction of SO2 taxes and inconvenience penalties on 2012-03-08 -*GL* Values try to account for excessive water use, further pollution -*GL* Taxes are given in USD(2005) per GJ -p21_tau_pe2se_tax(ttot,regi,"igcc")$(ttot.val ge 2005) = 0.25; -p21_tau_pe2se_tax(ttot,regi,"igccc")$(ttot.val ge 2005) = 0.25; -p21_tau_pe2se_tax(ttot,regi,"coalftrec")$(ttot.val ge 2005) = 1.0; -p21_tau_pe2se_tax(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = 1.0; -p21_tau_pe2se_tax(ttot,regi,"coalh2")$(ttot.val ge 2005) = 0.5; -p21_tau_pe2se_tax(ttot,regi,"coalh2c")$(ttot.val ge 2005) = 0.5; -p21_tau_pe2se_tax(ttot,regi,"coalgas")$(ttot.val ge 2005) = 0.5; - -***JaS* Introduces inconvenience costs as taxes for the transformation of primary to secondary energy types -***JaS* Taxes are given in USD(2005) per GJ -*cb* to be exchanged for file with values if needed -p21_tau_pe2se_inconv(ttot,regi,te)$(ttot.val ge 2005)=0.000000; -*** description: Taxes/subsidies are given in USD(2005) per GJ -*** unit: USD(2005) per GJ -p21_tau_pe2se_inconv(ttot,regi,te)$(ttot.val ge 2005)=0.000000; - +*** Values try to account for excessive water use, further pollution +*** Taxes are given in USD(2005) and converted to USD(2017) per GJ +p21_tau_pe2se_tax(ttot,regi,"igcc")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.25; +p21_tau_pe2se_tax(ttot,regi,"igccc")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.25; +p21_tau_pe2se_tax(ttot,regi,"coalftrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 1.0; +p21_tau_pe2se_tax(ttot,regi,"coalftcrec")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 1.0; +p21_tau_pe2se_tax(ttot,regi,"coalh2")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.5; +p21_tau_pe2se_tax(ttot,regi,"coalh2c")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.5; +p21_tau_pe2se_tax(ttot,regi,"coalgas")$(ttot.val ge 2005) = sm_D2005_2_D2017 * 0.5; ***cb20110923 rescaling of PE2SE parameters from $/GJ to trillion $ / TWa p21_tau_pe2se_tax(ttot,regi,te)$(ttot.val ge 2005) = p21_tau_pe2se_tax(ttot,regi,te) * 0.001 / sm_EJ_2_TWa; p21_tau_pe2se_sub(ttot,regi,te)$(ttot.val ge 2005) = p21_tau_pe2se_sub(ttot,regi,te) * 0.001 / sm_EJ_2_TWa; -p21_tau_pe2se_inconv(ttot,regi,te)$(ttot.val ge 2005) = p21_tau_pe2se_inconv(ttot,regi,te) * 0.001 / sm_EJ_2_TWa; *** SE electricity tax rate tech specific ramp up logistic function parameters p21_tau_SE_tax_rampup(t,regi,te,teSeTax_coeff) = 0; @@ -115,20 +104,7 @@ $ifThen.SEtaxRampUpParam not "%cm_SEtaxRampUpParam%" == "off" ); $endif.SEtaxRampUpParam -***cb 20110923 load paths for ressource export taxes -***cb* file for resource export taxes, not used in default settings -Parameter p21_tau_xpres_tax(tall,all_regi,all_enty) "tax path for ressource export" - / -$ondelim -$include "./modules/21_tax/on/input/p21_tau_xpres_tax.cs4r" -$offdelim - / ; -*** converted to T$/TWyr -p21_tau_xpres_tax(ttot,regi,"peoil")$(ttot.val ge 2005) = p21_tau_xpres_tax(ttot,regi,"peoil") * sm_DpGJ_2_TDpTWa; -*LB* use 0 for all regions as default -p21_tau_xpres_tax(ttot,regi,all_enty) = 0; - -*JeS for SO2 tax case: tax path in 10^12$/TgS (= 10^6 $/t S) @ GDP/cap of 1000$/cap (value gets scaled by GDP/cap) +***JeS for SO2 tax case: tax path in 10^12$/TgS (= 10^6 $/t S) @ GDP/cap of 1000$/cap (value gets scaled by GDP/cap) if((cm_so2tax_scen eq 0), s21_so2_tax_2010=0.0; elseif(cm_so2tax_scen eq 1), diff --git a/modules/21_tax/on/declarations.gms b/modules/21_tax/on/declarations.gms index 0da2ba55d..c26eac3bf 100644 --- a/modules/21_tax/on/declarations.gms +++ b/modules/21_tax/on/declarations.gms @@ -8,7 +8,6 @@ Parameters p21_tau_so2_tax(tall,all_regi) "so2 tax path" p21_tau_pe2se_tax(tall,all_regi,all_te) "tax path for primary energy technologies" -p21_tau_pe2se_inconv(tall,all_regi,all_te) "inconvenience cost path for primary energy technologies" p21_tau_pe2se_sub(tall,all_regi,all_te) "subsidy path for primary energy technologies" p21_max_fe_sub(tall,all_regi,all_enty) "maximum final energy subsidy levels from REMIND version prior to rev. 5429 [$/TWa]" p21_prop_fe_sub(tall,all_regi,all_enty) "subsidy proportional cap to avoid liquids increasing dramatically" @@ -32,7 +31,6 @@ p21_taxrevFE0(ttot,all_regi) "reference level va p21_taxrevCES0(ttot,all_regi,all_in) "reference level value of ces production tax" p21_taxrevResEx0(ttot,all_regi) "reference level value of resource extraction tax" p21_taxrevPE2SE0(ttot,all_regi) "reference level value of pe2se technologies tax" -p21_taxrevXport0(ttot,all_regi) "reference level value of exports tax" p21_taxrevSO20(ttot,all_regi) "reference level value of SO2 tax" p21_taxrevBio0(ttot,all_regi) "reference level value of bioenergy tax" p21_implicitDiscRate0(ttot,all_regi) "reference level value of implicit tax on energy efficient capital" @@ -50,7 +48,6 @@ p21_taxrevFE_iter(iteration,ttot,all_regi) "reference level valu p21_taxrevCES_iter(iteration,ttot,all_regi,all_in) "reference level value of ces production tax revenue" p21_taxrevResEx_iter(iteration,ttot,all_regi) "reference level value of resource extraction tax revenue" p21_taxrevPE2SE_iter(iteration,ttot,all_regi) "reference level value of pe2se technologies tax revenue" -p21_taxrevXport_iter(iteration,ttot,all_regi) "reference level value of exports tax revenue" p21_taxrevSO2_iter(iteration,ttot,all_regi) "reference level value of SO2 tax revenue" p21_taxrevBio_iter(iteration,ttot,all_regi) "reference level value of bioenergy tax revenue" p21_implicitDiscRate_iter(iteration,ttot,all_regi) "reference level value of implicit tax on energy efficient capital" @@ -117,7 +114,6 @@ v21_taxrevFE(ttot,all_regi) "tax on final energy (?)" v21_taxrevCES(ttot,all_regi,all_in) "tax on ces production function" v21_taxrevResEx(ttot,all_regi) "tax on resource extraction (?)" v21_taxrevPE2SE(ttot,all_regi) "tax on pe2se technologies (?)" -v21_taxrevXport(ttot,all_regi) "tax on exports (?)" v21_taxrevSO2(ttot,all_regi) "tax on SO2 (to reflect health impacts)" v21_taxrevBio(ttot,all_regi) "tax on bioenergy (to reflect sustainability constraints on bioenergy production)" v21_taxrevFlex(ttot,all_regi) "tax on technologies with flexible or inflexible electricity input" @@ -148,7 +144,6 @@ q21_taxrevFE(ttot,all_regi) "calculation of tax on final ene q21_taxrevCES(ttot,all_regi,all_in) "calculation of tax on ces production function" q21_taxrevResEx(ttot,all_regi) "calculation of tax on resource extraction" q21_taxrevPE2SE(ttot,all_regi) "calculation of tax on pe2se technologies" -q21_taxrevXport(ttot,all_regi) "calculation of tax on exports" q21_taxrevSO2(ttot,all_regi) "calculation of tax on SO2" q21_taxrevBio(ttot,all_regi) "calculation of tax on bioenergy" q21_taxrevFlex(ttot,all_regi) "tax on technologies with flexible or inflexible electricity input" diff --git a/modules/21_tax/on/equations.gms b/modules/21_tax/on/equations.gms index 463b2b781..c2198d7ec 100644 --- a/modules/21_tax/on/equations.gms +++ b/modules/21_tax/on/equations.gms @@ -43,7 +43,6 @@ q21_taxrev(t,regi)$(t.val ge max(2010,cm_startyear)).. + sum(in, v21_taxrevCES(t,regi,in)) + v21_taxrevResEx(t,regi) + v21_taxrevPE2SE(t,regi) - + v21_taxrevXport(t,regi) + v21_taxrevSO2(t,regi) + v21_taxrevBio(t,regi) - vm_costSubsidizeLearning(t,regi) @@ -187,18 +186,10 @@ v21_taxrevResEx(t,regi) =e= sum(pe2rlf(peEx(enty),rlf), p21_tau_fuEx_sub(t,regi q21_taxrevPE2SE(t,regi)$(t.val ge max(2010,cm_startyear)).. v21_taxrevPE2SE(t,regi) =e= SUM(pe2se(enty,enty2,te), - (p21_tau_pe2se_tax(t,regi,te) + p21_tau_pe2se_sub(t,regi,te) + p21_tau_pe2se_inconv(t,regi,te)) * vm_prodSe(t,regi,enty,enty2,te) + (p21_tau_pe2se_tax(t,regi,te) + p21_tau_pe2se_sub(t,regi,te)) * vm_prodSe(t,regi,enty,enty2,te) ) - p21_taxrevPE2SE0(t,regi); -***--------------------------------------------------------------------------- -*' Calculation of export taxes: tax rate times export volume -*' Documentation of overall tax approach is above at q21_taxrev. -***--------------------------------------------------------------------------- -q21_taxrevXport(t,regi)$(t.val ge max(2010,cm_startyear)).. -v21_taxrevXport(t,regi) =e= SUM(tradePe(enty), p21_tau_xpres_tax(t,regi,enty) * vm_Xport(t,regi,enty)) - - p21_taxrevXport0(t,regi); - ***--------------------------------------------------------------------------- *' Calculation of so2 tax: tax rate times emissions *' Documentation of overall tax approach is above at q21_taxrev. @@ -287,7 +278,7 @@ q21_taxrevFlex(t,regi)$( t.val ge max(2010, cm_startyear) ) .. !! vm_flexAdj is electricity price reduction/increases for flexible/ !! inflexible technologies change sign such that flexible technologies !! get subsidy - -vm_flexAdj(t,regi,te) + - vm_flexAdj(t,regi,te) * vm_demSe(t,regi,enty,enty2,te) ) - p21_taxrevFlex0(t,regi) diff --git a/modules/21_tax/on/input/files b/modules/21_tax/on/input/files index 14cf390f2..5bb4a6ad7 100644 --- a/modules/21_tax/on/input/files +++ b/modules/21_tax/on/input/files @@ -5,4 +5,4 @@ f21_prop_fe_sub.cs4r f21_tau_pe_sub.cs4r f21_max_pe_sub.cs4r f21_tax_convergence.cs4r -p21_tau_xpres_tax.cs4r + diff --git a/modules/21_tax/on/postsolve.gms b/modules/21_tax/on/postsolve.gms index ecc4f8855..72bcf0775 100644 --- a/modules/21_tax/on/postsolve.gms +++ b/modules/21_tax/on/postsolve.gms @@ -39,16 +39,15 @@ p21_taxrevResEx0(ttot,regi) = sum(pe2rlf(peEx(enty),rlf), p21_tau_fuEx_sub(ttot, p21_taxrevPE0(ttot,regi,entyPe) = pm_tau_pe_tax(ttot,regi,entyPe) * vm_prodPe.l(ttot,regi,entyPe); p21_taxrevCES0(ttot,regi,in) = pm_tau_ces_tax(ttot,regi,in) * vm_cesIO.l(ttot,regi,in); p21_taxrevPE2SE0(ttot,regi) = sum(pe2se(enty,enty2,te), - (p21_tau_pe2se_tax(ttot,regi,te) + p21_tau_pe2se_sub(ttot,regi,te) + p21_tau_pe2se_inconv(ttot,regi,te)) * vm_prodSe.l(ttot,regi,enty,enty2,te) + (p21_tau_pe2se_tax(ttot,regi,te) + p21_tau_pe2se_sub(ttot,regi,te)) * vm_prodSe.l(ttot,regi,enty,enty2,te) ); -p21_taxrevXport0(ttot,regi) = sum(tradePe(enty), p21_tau_xpres_tax(ttot,regi,enty) * vm_Xport.l(ttot,regi,enty)); p21_taxrevSO20(ttot,regi) = p21_tau_so2_tax(ttot,regi) * vm_emiTe.l(ttot,regi,"so2"); p21_taxrevBio0(ttot,regi) = v21_tau_bio.l(ttot) * vm_pebiolc_price.l(ttot,regi) * vm_fuExtr.l(ttot,regi,"pebiolc","1") + p21_bio_EF(ttot,regi) * pm_taxCO2eq(ttot,regi) * (vm_fuExtr.l(ttot,regi,"pebiolc","1") - (vm_Xport.l(ttot,regi,"pebiolc")-vm_Mport.l(ttot,regi,"pebiolc"))); p21_implicitDiscRate0(ttot,regi) = sum(ppfKap(in), p21_implicitDiscRateMarg(ttot,regi,in) * vm_cesIO.l(ttot,regi,in) ); p21_taxemiMkt0(ttot,regi,emiMkt) = pm_taxemiMkt(ttot,regi,emiMkt) * vm_co2eqMkt.l(ttot,regi,emiMkt); p21_taxrevFlex0(ttot,regi) = sum(en2en(enty,enty2,te)$(teFlexTax(te)), - -vm_flexAdj.l(ttot,regi,te) * vm_demSe.l(ttot,regi,enty,enty2,te)); + - vm_flexAdj.l(ttot,regi,te) * vm_demSe.l(ttot,regi,enty,enty2,te)); p21_taxrevImport0(ttot,regi,tradePe,tax_import_type_21) = p21_tau_Import(ttot,regi,tradePe,tax_import_type_21)$sameas(tax_import_type_21, "worldPricemarkup") * pm_pvp(ttot,tradePe) / pm_pvp(ttot,"good") * vm_Mport.l(ttot,regi,tradePe)+ p21_tau_Import(ttot, regi, tradePe, tax_import_type_21)$sameas(tax_import_type_21, "CO2taxmarkup") * pm_taxCO2eqSum(ttot,regi) * pm_cintraw(tradePe) * vm_Mport.l(ttot,regi,tradePe)+ @@ -72,7 +71,6 @@ p21_taxrevResEx_iter(iteration+1,ttot,regi) = v21_taxrevResEx.l(ttot,regi); p21_taxrevPE_iter(iteration+1,ttot,regi,entyPe) = v21_taxrevPE.l(ttot,regi,entyPe); p21_taxrevCES_iter(iteration+1,ttot,regi,in) = v21_taxrevCES.l(ttot,regi,in); p21_taxrevPE2SE_iter(iteration+1,ttot,regi) = v21_taxrevPE2SE.l(ttot,regi); -p21_taxrevXport_iter(iteration+1,ttot,regi) = v21_taxrevXport.l(ttot,regi); p21_taxrevSO2_iter(iteration+1,ttot,regi) = v21_taxrevSO2.l(ttot,regi); p21_taxrevBio_iter(iteration+1,ttot,regi) = v21_taxrevBio.l(ttot,regi); p21_implicitDiscRate_iter(iteration+1,ttot,regi) = v21_implicitDiscRate.l(ttot,regi); diff --git a/modules/21_tax/on/presolve.gms b/modules/21_tax/on/presolve.gms index b8db92642..c89b0eca5 100644 --- a/modules/21_tax/on/presolve.gms +++ b/modules/21_tax/on/presolve.gms @@ -38,16 +38,15 @@ p21_taxrevResEx0(ttot,regi) = sum(pe2rlf(peEx(enty),rlf), p21_tau_fuEx_sub(ttot, p21_taxrevPE0(ttot,regi,entyPe) = pm_tau_pe_tax(ttot,regi,entyPe) * vm_prodPe.l(ttot,regi,entyPe); p21_taxrevCES0(ttot,regi,in) = pm_tau_ces_tax(ttot,regi,in) * vm_cesIO.l(ttot,regi,in); p21_taxrevPE2SE0(ttot,regi) = sum(pe2se(enty,enty2,te), - (p21_tau_pe2se_tax(ttot,regi,te) + p21_tau_pe2se_sub(ttot,regi,te) + p21_tau_pe2se_inconv(ttot,regi,te)) * vm_prodSe.l(ttot,regi,enty,enty2,te) + (p21_tau_pe2se_tax(ttot,regi,te) + p21_tau_pe2se_sub(ttot,regi,te)) * vm_prodSe.l(ttot,regi,enty,enty2,te) ); -p21_taxrevXport0(ttot,regi) = sum(tradePe(enty), p21_tau_xpres_tax(ttot,regi,enty) * vm_Xport.l(ttot,regi,enty)); p21_taxrevSO20(ttot,regi) = p21_tau_so2_tax(ttot,regi) * vm_emiTe.l(ttot,regi,"so2"); p21_taxrevBio0(ttot,regi) = v21_tau_bio.l(ttot) * vm_pebiolc_price.l(ttot,regi) * vm_fuExtr.l(ttot,regi,"pebiolc","1") + p21_bio_EF(ttot,regi) * pm_taxCO2eq(ttot,regi) * (vm_fuExtr.l(ttot,regi,"pebiolc","1") - (vm_Xport.l(ttot,regi,"pebiolc")-vm_Mport.l(ttot,regi,"pebiolc"))); p21_implicitDiscRate0(ttot,regi) = sum(ppfKap(in), p21_implicitDiscRateMarg(ttot,regi,in) * vm_cesIO.l(ttot,regi,in) ); p21_taxemiMkt0(ttot,regi,emiMkt) = pm_taxemiMkt(ttot,regi,emiMkt) * vm_co2eqMkt.l(ttot,regi,emiMkt); p21_taxrevFlex0(ttot,regi) = sum(en2en(enty,enty2,te)$(teFlexTax(te)), - -vm_flexAdj.l(ttot,regi,te) * vm_demSe.l(ttot,regi,enty,enty2,te)); + - vm_flexAdj.l(ttot,regi,te) * vm_demSe.l(ttot,regi,enty,enty2,te)); p21_taxrevImport0(ttot,regi,tradePe,tax_import_type_21) = p21_tau_Import(ttot,regi,tradePe,tax_import_type_21)$sameas(tax_import_type_21, "worldPricemarkup") * pm_pvp(ttot,tradePe) / pm_pvp(ttot,"good") * vm_Mport.l(ttot,regi,tradePe)+ p21_tau_Import(ttot, regi, tradePe, tax_import_type_21)$sameas(tax_import_type_21, "CO2taxmarkup") * pm_taxCO2eqSum(ttot,regi) * pm_cintraw(tradePe) * vm_Mport.l(ttot,regi,tradePe)+ p21_tau_Import(ttot, regi, tradePe, tax_import_type_21)$sameas(tax_import_type_21, "avCO2taxmarkup") * max(pm_taxCO2eqSum(ttot,regi), sum(regi2, pm_taxCO2eqSum(ttot,regi2))/(card(regi2))) * pm_cintraw(tradePe) * vm_Mport.l(ttot,regi,tradePe); diff --git a/modules/32_power/IntC/datainput.gms b/modules/32_power/IntC/datainput.gms index 19f7191fa..f60bfc73b 100644 --- a/modules/32_power/IntC/datainput.gms +++ b/modules/32_power/IntC/datainput.gms @@ -83,19 +83,6 @@ p32_shThresholdTotVREAddIntCost(t)$(t.val > 2045) = 95; p32_FactorAddIntCostTotVRE = 1.5; -$ontext -parameter p32_flex_maxdiscount(all_regi,all_te) "maximum electricity price discount for flexible technologies reached at high VRE shares" -/ -$ondelim -$include "./modules/32_power/IntC/input/p32_flex_maxdiscount.cs4r" -$offdelim -/ -; -*** convert from USD2015/MWh to trUSD2005/TWa -p32_flex_maxdiscount(regi,te) = p32_flex_maxdiscount(regi,te) * sm_TWa_2_MWh * s_D2015_2_D2005 * 1e-12; -display p32_flex_maxdiscount; -$offtext - *** Flexibility Tax Parameter *** Both flexibility tax parameters are based on a regression analysis with hourly dispatch data from high-VRE scenarios of the Langfristszenarien diff --git a/modules/35_transport/edge_esm/presolve.gms b/modules/35_transport/edge_esm/presolve.gms index ca297ab5a..6e16e1050 100644 --- a/modules/35_transport/edge_esm/presolve.gms +++ b/modules/35_transport/edge_esm/presolve.gms @@ -13,7 +13,7 @@ if( (ord(iteration) le 25 and ord(iteration) ge cm_startIter_EDGET and (mod(ord( Execute "Rscript -e 'edgeTransport::iterativeEdgeTransport()'"; Execute_Loadpoint 'p35_esCapCost' p35_esCapCost; - pm_esCapCost(t,regi,teEs_dyn35)$(t.val gt 2010 AND t.val ge cm_startyear AND t.val le 2100) = p35_esCapCost(t,regi,"%cm_GDPscen%","%cm_demScen%","%cm_EDGEtr_scen%",teEs_dyn35); + pm_esCapCost(t,regi,teEs_dyn35)$(t.val gt 2010 AND t.val le 2100) = p35_esCapCost(t,regi,"%cm_GDPscen%","%cm_demScen%","%cm_EDGEtr_scen%",teEs_dyn35); !! load FE-to-ES results from EDGE-Transport into auxilliary parameter Execute_Loadpoint "p35_fe2es", p35_fe2es_aux = p35_fe2es; diff --git a/modules/36_buildings/simple/datainput.gms b/modules/36_buildings/simple/datainput.gms index a092646ac..95b38a4e6 100644 --- a/modules/36_buildings/simple/datainput.gms +++ b/modules/36_buildings/simple/datainput.gms @@ -120,10 +120,10 @@ p36_CESMkup(ttot,regi,in) = 0; *' mark-up cost on heat pumps and district heating are incurred as actual cost to the budget (see option (a) above) *' place markup cost on heat pumps electricity of 200 USD/MWh(el) to represent demand-side cost of electrification *' and reach higher efficiency during calibration to model higher energy efficiency of heat pumps -p36_CESMkup(ttot,regi,"feelhpb") = 200 * sm_TWa_2_MWh * 1e-12; +p36_CESMkup(ttot,regi,"feelhpb") = 200 * sm_D2005_2_D2017 * sm_TWa_2_MWh * 1e-12; *' place markup cost on district heating of 25 USD/MWh(heat) to represent additional t&d cost of expanding district heating networks for buildings *' which makes district heating in buildings more expensive than in industry -p36_CESMkup(ttot,regi,"feheb") = 25 * sm_TWa_2_MWh * 1e-12; +p36_CESMkup(ttot,regi,"feheb") = 25 * sm_D2005_2_D2017 * sm_TWa_2_MWh * 1e-12; *' overwrite or extent CES markup cost if specified by switch $ifThen.CESMkup not "%cm_CESMkup_build%" == "standard" diff --git a/modules/37_industry/fixed_shares/datainput.gms b/modules/37_industry/fixed_shares/datainput.gms index 3cda8fe57..a40f175c5 100644 --- a/modules/37_industry/fixed_shares/datainput.gms +++ b/modules/37_industry/fixed_shares/datainput.gms @@ -61,7 +61,7 @@ $offdelim $include "./modules/37_industry/fixed_shares/input/pm_abatparam_Ind.gms"; $IFTHEN.Industry_CCS_markup not "%cm_Industry_CCS_markup%" == "off" - pm_abatparam_Ind(ttot,regi,all_enty,steps)$pm_abatparam_Ind(ttot,regi,all_enty,steps) = (1/%cm_Industry_CCS_markup%)*pm_abatparam_Ind(ttot,regi,all_enty,steps); + pm_abatparam_Ind(ttot,regi,all_enty,steps)$pm_abatparam_Ind(ttot,regi,all_enty,steps) = (1/%cm_Industry_CCS_markup%)*pm_abatparam_Ind(ttot,regi,all_enty,steps); $ENDIF.Industry_CCS_markup *** fill in share of other industry sector diff --git a/modules/37_industry/fixed_shares/input/pm_abatparam_Ind.gms b/modules/37_industry/fixed_shares/input/pm_abatparam_Ind.gms index df9d96b89..5d2110b44 100644 --- a/modules/37_industry/fixed_shares/input/pm_abatparam_Ind.gms +++ b/modules/37_industry/fixed_shares/input/pm_abatparam_Ind.gms @@ -17,15 +17,15 @@ $endif !! short-term (until 2025) if (ttot.val le 2025, - pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge 95 ) = 0.63; - pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge 133 ) = 0.756; + pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge sm_D2005_2_D2017 * 95 ) = 0.63; + pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge sm_D2005_2_D2017 *133 ) = 0.756; - pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge 78 ) = 0.121; - pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge 80 ) = 0.572; + pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge sm_D2005_2_D2017 *78 ) = 0.121; + pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge sm_D2005_2_D2017 *80 ) = 0.572; $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" - pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge 59 ) = 0.117; - pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge 82 ) = 0.234; + pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge sm_D2005_2_D2017 *59 ) = 0.117; + pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge sm_D2005_2_D2017 *82 ) = 0.234; $endif.cm_subsec_model_steel !! long-term (from 2030 on) @@ -43,16 +43,16 @@ $endif.cm_subsec_model_steel = max(0, min(0.95, 0.2159 + 0.1365 * log(sm_tmp))); else - pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge 54 ) = 0.702; - pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge 133 ) = 0.756; + pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge sm_D2005_2_D2017 * 54 ) = 0.702; + pm_abatparam_Ind(ttot,regi,"co2cement",steps)$( sm_tmp ge sm_D2005_2_D2017 * 133 ) = 0.756; - pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge 46 ) = 0.363; - pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge 78 ) = 0.484; - pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge 80 ) = 0.572; + pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge sm_D2005_2_D2017 * 46 ) = 0.363; + pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge sm_D2005_2_D2017 * 78 ) = 0.484; + pm_abatparam_Ind(ttot,regi,"co2chemicals",steps)$( sm_tmp ge sm_D2005_2_D2017 *80 ) = 0.572; $ifthen.cm_subsec_model_steel "%cm_subsec_model_steel%" == "ces" - pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge 48 ) = 0.117; - pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge 62 ) = 0.275; + pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge sm_D2005_2_D2017 *48 ) = 0.117; + pm_abatparam_Ind(ttot,regi,"co2steel",steps)$( sm_tmp ge sm_D2005_2_D2017 *62 ) = 0.275; $endif.cm_subsec_model_steel ); ); diff --git a/modules/37_industry/fixed_shares/not_used.txt b/modules/37_industry/fixed_shares/not_used.txt index a73aa7d40..3082cb3c0 100644 --- a/modules/37_industry/fixed_shares/not_used.txt +++ b/modules/37_industry/fixed_shares/not_used.txt @@ -34,3 +34,5 @@ vm_incinerationCCS, variable, does not want to play vm_incinerationEmi, variable, not needed vm_nonIncineratedPlastics, variable, not needed vm_outflowPrc, variable, not needed +sm_D2020_2_D2017,input,no conversion needed +sm_EURO2023_2_D2017,input,no conversion needed diff --git a/modules/37_industry/subsectors/datainput.gms b/modules/37_industry/subsectors/datainput.gms index 97e6c03ee..13a3f08bd 100644 --- a/modules/37_industry/subsectors/datainput.gms +++ b/modules/37_industry/subsectors/datainput.gms @@ -693,13 +693,13 @@ $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, inflation 2005 --> 2020 / 1.33 -p37_priceMat("eafscrap") = 0.188; -p37_priceMat("bofscrap") = 0.188; -!! Agora KSV-Rechner: 114 €/tSteel / (1.4 2005$/2023€) / (tn$ /bn t) -p37_priceMat("ironore") = 0.081; -!! Agora KSV-Rechner: 154 €/tSteel / (1.4 2005$/2023€) / (tn$ /bn t) -p37_priceMat("dripell") = 0.110; +!! => 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 *** -------------------------------- diff --git a/modules/37_industry/subsectors/declarations.gms b/modules/37_industry/subsectors/declarations.gms index 827d4cace..c6713c0b9 100644 --- a/modules/37_industry/subsectors/declarations.gms +++ b/modules/37_industry/subsectors/declarations.gms @@ -38,7 +38,7 @@ Parameters p37_teMatShareHist(all_te,opmoPrc,mat) "Share that a tePrc/opmoPrc historically contibrutes 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 [2005$/kg = trn2005$/Gt]" + p37_priceMat(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]" diff --git a/modules/37_industry/subsectors/not_used.txt b/modules/37_industry/subsectors/not_used.txt index 2b2763d7f..eb33d72e1 100644 --- a/modules/37_industry/subsectors/not_used.txt +++ b/modules/37_industry/subsectors/not_used.txt @@ -24,3 +24,4 @@ pm_shfe_up,parameter,not needed sm_trillion_2_non,input,questionnaire sm_TWa_2_kWh,input,questionnaire vm_macBase,input,questionnaire +sm_D2005_2_D2017,input,no conversion needed diff --git a/modules/47_regipol/none/not_used.txt b/modules/47_regipol/none/not_used.txt index b352534d9..254d6d59e 100644 --- a/modules/47_regipol/none/not_used.txt +++ b/modules/47_regipol/none/not_used.txt @@ -80,3 +80,4 @@ vm_prodSe,input,not needed pm_cesdata,input,not needed pm_prodCouple,input,not needed vm_emiIndCCS,input,not needed +sm_D2005_2_D2017,input,no conversion needed diff --git a/modules/47_regipol/regiCarbonPrice/datainput.gms b/modules/47_regipol/regiCarbonPrice/datainput.gms index 2670a6309..c985d567f 100644 --- a/modules/47_regipol/regiCarbonPrice/datainput.gms +++ b/modules/47_regipol/regiCarbonPrice/datainput.gms @@ -176,7 +176,8 @@ $offdelim loop((t,ext_regi,entyFe,entySe,sector)$f47_implicitPriceTarget("%cm_implicitPriceTarget%",ext_regi,entyFe,entySe,sector,t), loop(regi$regi_groupExt(ext_regi,regi), - pm_implicitPriceTarget(t,regi,entyFe,entySe,sector)=f47_implicitPriceTarget("%cm_implicitPriceTarget%",ext_regi,entyFe,entySe,sector,t)*sm_DpGJ_2_TDpTWa; + !! convert data from US$2005 to US$2017 + pm_implicitPriceTarget(t,regi,entyFe,entySe,sector) = sm_D2005_2_D2017 * f47_implicitPriceTarget("%cm_implicitPriceTarget%",ext_regi,entyFe,entySe,sector,t)*sm_DpGJ_2_TDpTWa; ); ); @@ -210,7 +211,8 @@ $offdelim loop((t,ext_regi,entyPe)$f47_implicitPePriceTarget("%cm_implicitPePriceTarget%",ext_regi,entyPe,t), loop(regi$regi_groupExt(ext_regi,regi), - pm_implicitPePriceTarget(t,regi,entyPe)=f47_implicitPePriceTarget("%cm_implicitPePriceTarget%",ext_regi,entyPe,t)*sm_DpGJ_2_TDpTWa; + !! convert data from US$2005 to US$2017 + pm_implicitPePriceTarget(t,regi,entyPe) = sm_D2005_2_D2017 * f47_implicitPePriceTarget("%cm_implicitPePriceTarget%",ext_regi,entyPe,t)*sm_DpGJ_2_TDpTWa; ); ); @@ -302,32 +304,32 @@ p47_LULUCFEmi_GrassiShift(t,regi)$(p47_EmiLULUCFCountryAcc("2020",regi)) = *PW* charge tax on PE gas,oil,coal in energy security scenario for Germany (in trUSD/TWa) to hit Ariadne energy security price trajectories $ifThen.cm_EnSecScen_price "%cm_EnSecScen_price%" == "on" - pm_tau_pe_tax("2025",regi,"pegas")$(sameAs(regi,"DEU")) = 0.32; - pm_tau_pe_tax("2030",regi,"pegas")$(sameAs(regi,"DEU")) = 0.24; - pm_tau_pe_tax("2035",regi,"pegas")$(sameAs(regi,"DEU")) = 0.2; - pm_tau_pe_tax("2040",regi,"pegas")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2045",regi,"pegas")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2050",regi,"pegas")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2055",regi,"pegas")$(sameAs(regi,"DEU")) = 0.12; - pm_tau_pe_tax("2060",regi,"pegas")$(sameAs(regi,"DEU")) = 0.08; - - pm_tau_pe_tax("2025",regi,"peoil")$(sameAs(regi,"DEU")) = 0.08; - pm_tau_pe_tax("2030",regi,"peoil")$(sameAs(regi,"DEU")) = 0.08; - pm_tau_pe_tax("2035",regi,"peoil")$(sameAs(regi,"DEU")) = 0.12; - pm_tau_pe_tax("2040",regi,"peoil")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2045",regi,"peoil")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2050",regi,"peoil")$(sameAs(regi,"DEU")) = 0.16; - pm_tau_pe_tax("2055",regi,"peoil")$(sameAs(regi,"DEU")) = 0.12; - pm_tau_pe_tax("2060",regi,"peoil")$(sameAs(regi,"DEU")) = 0.08; - - pm_tau_pe_tax("2025",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.024; - pm_tau_pe_tax("2030",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.016; - pm_tau_pe_tax("2035",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.016; - pm_tau_pe_tax("2040",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.016; - pm_tau_pe_tax("2045",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.016; - pm_tau_pe_tax("2050",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.016; - pm_tau_pe_tax("2055",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.008; - pm_tau_pe_tax("2060",regi,"pecoal")$(sameAs(regi,"DEU")) = 0.008; + pm_tau_pe_tax("2025",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.32; + pm_tau_pe_tax("2030",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.24; + pm_tau_pe_tax("2035",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.2; + pm_tau_pe_tax("2040",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2045",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2050",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2055",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.12; + pm_tau_pe_tax("2060",regi,"pegas")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.08; + + pm_tau_pe_tax("2025",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.08; + pm_tau_pe_tax("2030",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.08; + pm_tau_pe_tax("2035",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.12; + pm_tau_pe_tax("2040",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2045",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2050",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.16; + pm_tau_pe_tax("2055",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.12; + pm_tau_pe_tax("2060",regi,"peoil")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.08; + + pm_tau_pe_tax("2025",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.024; + pm_tau_pe_tax("2030",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.016; + pm_tau_pe_tax("2035",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.016; + pm_tau_pe_tax("2040",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.016; + pm_tau_pe_tax("2045",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.016; + pm_tau_pe_tax("2050",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.016; + pm_tau_pe_tax("2055",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.008; + pm_tau_pe_tax("2060",regi,"pecoal")$(sameAs(regi,"DEU")) = sm_D2005_2_D2017 * 0.008; $endIf.cm_EnSecScen_price *** adapt parameters that determine the ratio of wind onshore and wind offshore installation for Germany diff --git a/modules/50_damages/KWTCint/datainput.gms b/modules/50_damages/KWTCint/datainput.gms index 15f433a1d..3fd7e4ecf 100755 --- a/modules/50_damages/KWTCint/datainput.gms +++ b/modules/50_damages/KWTCint/datainput.gms @@ -52,7 +52,7 @@ pm_damageMarginalT(tall,regi) = 0; pm_damageMarginalTm1(tall,regi) = 0; pm_damageMarginalTm2(tall,regi) = 0; -*read in GDP to calculate fraction of countries in a region +*** read in GDP to calculate fraction of countries in a region table f50_countryGDP(tall,iso,all_GDPscen) "ratio country to regional GDP" $ondelim $include "./modules/50_damages/KWTCint/input/f50_gdp.cs3r" diff --git a/modules/50_damages/TC/datainput.gms b/modules/50_damages/TC/datainput.gms index 092ba1214..a4a5878f9 100755 --- a/modules/50_damages/TC/datainput.gms +++ b/modules/50_damages/TC/datainput.gms @@ -33,18 +33,17 @@ p50_damageFuncCoefTC1(iso) = f50_TCtasK(iso,"%cm_TCspec%"); display p50_damageFuncCoefTC0; -*initialize +*** initialize pm_damage(tall,regi) = 1; -*read in GDP to calculate GDP fraction of countries in a region and convert to MER +*** read in GDP to calculate GDP fraction of countries in a region and convert to MER table f50_countryGDP(tall,iso,all_GDPscen) "ratio of country to regional GDP" $ondelim $include "./modules/50_damages/TC/input/f50_gdp.cs3r" $offdelim ; - -*calculate and interpolate country GDP fraction of regional GDP for SSP2 scenario, country GDP is in PPP, regional GDP in trl MER! +*** calculate and interpolate country GDP fraction of regional GDP for SSP2 scenario, country GDP is in PPP, regional GDP in trl MER! pm_GDPfrac(tall,iso)=f50_countryGDP(tall,iso,"gdp_SSP2")/1000000/sum(regi2iso(regi,iso),pm_gdp(tall,regi)/pm_shPPPMER(regi)); loop(ttot$(ttot.val ge 2005),