diff --git a/CHANGELOG.md b/CHANGELOG.md index df7385054..a854989ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,16 +7,27 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] ### changed -- +- **scenario_config.csv** `cfg$gms$s56_minimum_cprice` no longer used for `NCD` +- **config.cfg** default for `cfg$gms$cropland` changed from "simple_apr24" to "detail_apr24" +- **config.cfg** default for `cfg$gms$s29_treecover_max` changed from 0.4 to 1 +- **config.cfg** default for `cfg$gms$s29_fallow_max ` changed from 0.4 to 0 +- **config.cfg** default for `cfg$gms$s35_forest_damage ` changed from 2 to 0 ### added -- +- **scenario_config.csv** added column `NPI-revert` +- **scenario_config.csv** added columns `AR-natveg` and `AR-plant` for CO2 price re/afforestation and AgroForestry settings +- **scenario_config.csv** added scenario `VLLO` based on `SDP-MC` +- **default.cfg** added selection of low and middle-income countries `isoCountriesLowMiddleIncome` +- **scripts** start script for ScenarioMIP MAgPIE standalone runs ### removed -- +- **scenario_config.csv** removed column `SSP2-EU` ### fixed -- +- **29_cropland** identical results for historic period when using `s29_treecover_bii_coeff` 0 and 1 in scenarios. +- **32_forestry** added contraint `q32_ndc_aff_limit` to make sure that NPI/NDC re/afforestation does not happen at the cost of forests and other natural vegetation. +- **35_natveg** added interface `vm_natforest_reduction` +- **56_ghg_policy** bugfixes for regional GHG policy fader ## [4.9.1] - 2025-01-28 diff --git a/DESCRIPTION b/DESCRIPTION index 77156ed8a..f927eaf72 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -21,7 +21,7 @@ Imports: m4fsdp, madrat, magclass (>= 6.14.0), - magpie4 (>= 2.16.1), + magpie4 (>= 2.16.7), MagpieNCGains, magpiesets (>= 0.46.1), mip, diff --git a/config/default.cfg b/config/default.cfg index 5207c74bc..e0987238b 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -180,6 +180,27 @@ isoCountriesEUR <- "ALB,AUT,BEL,BGR,CYP,CZE,DEU,DNK,ESP,EST,FIN,FRA,FRO, NLD,POL,PRT,ROU,SVK,SVN,SWE" +isoCountriesLowMiddleIncome <- + "ABW,AFG,AGO,AIA,ALA,AND,ARE,ARG,ARM,ASM,ATA, + ATF,ATG,AZE,BDI,BEN,BES,BFA,BGD,BHR,BHS,BLM, + BLR,BLZ,BMU,BOL,BRA,BRB,BRN,BTN,BVT,BWA,CAF, + CCK,CHN,CHL,CIV,CMR,COD,COG,COK,COL,COM,CPV, + CRI,CUB,CUW,CXR,CYM,DJI,DMA,DOM,DZA,ECU,EGY, + ERI,ESH,ETH,FJI,FLK,FRO,FSM,GAB,GEO,GGY,GHA, + GIB,GIN,GLP,GMB,GNB,GNQ,GRD,GRL,GTM,GUF,GUM, + GUY,HKG,HMD,HND,HTI,IDN,IMN,IND,IOT,IRN,IRQ, + ISR,JAM,JEY,JOR,KAZ,KEN,KGZ,KHM,KIR,KNA,KOR, + KWT,LAO,LBN,LBR,LBY,LCA,LIE,LKA,LSO,MAC,MAF, + MAR,MCO,MDA,MDG,MDV,MEX,MHL,MLI,MMR,MNG,MNP, + MOZ,MRT,MSR,MTQ,MUS,MWI,MYS,MYT,NAM,NCL,NER, + NFK,NGA,NIC,NIU,NPL,NRU,OMN,PAK,PAN,PCN,PER, + PHL,PLW,PNG,PRI,PRK,PRY,PSE,PYF,QAT,REU,RUS, + RWA,SAU,SDN,SEN,SGP,SGS,SHN,SJM,SLB,SLE,SLV, + SMR,SOM,SPM,SSD,STP,SUR,SWZ,SXM,SYC,SYR,TCA, + TCD,TGO,THA,TJK,TKL,TKM,TLS,TON,TTO,TUN,TUV, + TWN,TZA,UGA,UKR,UMI,URY,UZB,VAT,VCT,VEN,VGB, + VIR,VNM,VUT,WLF,WSM,YEM,ZAF,ZMB,ZWE" + # ***--------------------- 09_drivers ---------------------------------------- # * (aug17): default drivers cfg$gms$drivers <- "aug17" # def = aug17 @@ -693,7 +714,7 @@ cfg$gms$ageclass <- "oct24" # def = oct24 # * (simple_apr24): Fallow land and tree cover on cropland are fixed to zero # * (detail_apr24): Fallow land and tree cover based on rules or incentives # NOTE: It is recommended to recalibrate the model when changing this setting! -cfg$gms$cropland <- "simple_apr24" # def = simple_apr24 +cfg$gms$cropland <- "detail_apr24" # def = detail_apr24 # *** Options for all cropland realizations *** @@ -753,7 +774,7 @@ cfg$gms$s29_treecover_target_noselect <- 0 # def = 0 # * If set to 1, `s29_treecover_target` will be adjusted based existing treecover area. cfg$gms$s29_treecover_keep <- 0 # def = 0 # * Maximum share of treecover on total cropland (1) -cfg$gms$s29_treecover_max <- 0.4 # def = 0.4 +cfg$gms$s29_treecover_max <- 1 # def = 1 # * Start year of fader cfg$gms$s29_treecover_scenario_start <- 2025 # def = 2025 # * Target year of fader (year when full implementation is reached) @@ -780,7 +801,7 @@ cfg$gms$s29_treecover_bii_coeff <- 0 # def = 0 # * Minimum area share of fallow land on total cropland in target year cfg$gms$s29_fallow_target <- 0 # def = 0 # * Maximum share of fallow land on total cropland -cfg$gms$s29_fallow_max <- 0.4 # def = 0.4 +cfg$gms$s29_fallow_max <- 0 # def = 0 # * Start year of fader cfg$gms$s29_fallow_scenario_start <- 2025 # def = 2025 # * Target year of fader (year when full implementation is reached) @@ -877,7 +898,7 @@ cfg$gms$s31_fac_req_past <- 1 # def = 1 cfg$gms$forestry <- "dynamic_may24" # def = dynamic_may24 # * afforestation planing horizon (years) -cfg$gms$s32_planing_horizon <- 50 # def = 50 +cfg$gms$s32_planning_horizon <- 50 # def = 50 # * Settings for CO2 price driven afforestation (Growth curve and BII) @@ -911,7 +932,7 @@ cfg$gms$s32_npi_ndc_reversal <- Inf # def = Inf cfg$gms$s32_max_aff_area <- Inf # def = Inf # Protection of afforested areas (endogenous CO2 price driven) -# 0=until end of planning horizon (see s32_planing_horizon) +# 0=until end of planning horizon (see s32_planning_horizon) # 1=forever # Note: Without a price on CO2 emissions from land-use change in module 32_forestry, # which is the current default (c56_emis_policy <- "reddnatveg_nosoil"), @@ -1054,7 +1075,7 @@ cfg$gms$s35_secdf_distribution <- 2 # def = 2 # * (1): Damage from shifting agriculture (constant) # * (2): Damage from shifting agriculture is faded out by the year defined in 'cfg$gms$c35_forest_damage_end' # * (4): Generic forest disturbance scenarios defined in `f35_forest_shock.csv` -cfg$gms$s35_forest_damage <- 2 # def = 2 +cfg$gms$s35_forest_damage <- 0 # def = 0 # * If option (2) above: Year by which damage from shifting agriculture has petered out cfg$gms$s35_forest_damage_end <- 2050 #def = 2050 @@ -1511,15 +1532,20 @@ cfg$gms$s56_cprice_red_factor <- 1 # def = 1 # * Switch for GHG policy fader (1=on 0=off) cfg$gms$s56_ghgprice_fader <- 0 # def = 0 # * Pollutants on which the GHG policy fader will applied -cfg$gms$pollutants_fader <- c("co2_c", "ch4", "n2o_n_direct", "n2o_n_indirect", "nh3_n", "no2_n", "no3_n") # def = all pollutants +cfg$gms$pollutants_fader <- "co2_c, ch4, n2o_n_direct, n2o_n_indirect, nh3_n, no2_n, no3_n" # def = all pollutants # * Start year of GHG policy fade-in -cfg$gms$s56_fader_start <- 2025 # def = 2025 +cfg$gms$s56_fader_start <- 2035 # def = 2035 # * End year of GHG policy fade-in cfg$gms$s56_fader_end <- 2050 # def = 2050 # * Target value of GHG policy fade-in in end year cfg$gms$s56_fader_target <- 1 # def = 1 # * Switch for functional form of GHG policy fader (1=linear 2=sigmoid) cfg$gms$s56_fader_functional_form <- 1 # def = 1 +# * Countries for which the GHG policy fader applies +# * Options: list of iso-codes of countries where ghg policy should be applied +# * Note: must be written in the format: "IND, BRA, DEU" +# * Default: all iso countries +cfg$gms$fader_countries56 <- isoCountriesLowMiddleIncome # def = isoCountriesLowMiddleIncome # * GHG emission price scenario # * Note: For best consistency it is recommended to use trajectories from the most recent @@ -1621,8 +1647,8 @@ cfg$gms$c56_cprice_aff <- "secdforest_vegc" # def = secdforest_vegc # * C price expectation for afforestation decision-making in years # * 0 is myopic behaviour (only C price of current time step) -# * reflects perfect-foresight if equal to s32_planing_horizon -# * should not be higher than s32_planing_horizon +# * reflects perfect-foresight if equal to s32_planning_horizon +# * should not be higher than s32_planning_horizon cfg$gms$s56_c_price_exp_aff <- 50 # def = 50 # * Share of carbon credits for re/afforestation projects set aside in a buffer to diff --git a/config/scenario_config.csv b/config/scenario_config.csv index 39fff4e2e..fe6de340a 100755 --- a/config/scenario_config.csv +++ b/config/scenario_config.csv @@ -1,76 +1,79 @@ -;cc;nocc;nocc_hist;SSP1;SSP2;SSP2EU;SSP3;SSP4;SSP5;SDP;SDP-EI;SDP-RC;SDP-MC;SSP1-POP-GDP;SSP2-POP-GDP;SSP5-POP-GDP;BASE;NPI;NDC;coupling;emulator;input;eat_lancet_diet_v1;eat_lancet_diet_v2;ForestryEndo;ForestryExo;ForestryOff;rcp1p9;rcp2p6;rcp4p5;rcp6p0;rcp7p0;rcp8p5 -gms$c_timesteps;;;;;;;;;;;;;;;;;;;;less_TS;less_TS;;;;;;;;;;;; -gms$c09_pop_scenario;;;;SSP1;SSP2;SSP2EU;SSP3;SSP4;SSP5;SSP1;SSP1;SSP1;SSP1;SSP1;SSP2;SSP5;;;;;;;;;;;;;;;;; -gms$c09_gdp_scenario;;;;SSP1;SSP2;SSP2EU;SSP3;SSP4;SSP5;SSP1;SDP_EI;SDP_RC;SDP_MC;SSP1;SSP2;SSP5;;;;;;;;;;;;;;;;; -gms$c09_pal_scenario;;;;SSP1;SSP2;SSP2EU;SSP3;SSP4;SSP5;SSP1;SSP2;SSP1;SSP1;;;;;;;;;;;;;;;;;;;; -gms$c14_yields_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -gms$c15_food_scenario;;;;SSP1;SSP2;SSP2;SSP3;SSP4;SSP5;SSP1;SSP2;SSP1;SSP1;;;;;;;;;;;;;;;;;;;; -gms$s15_rumdairy_scp_substitution;;;;;;;;;;0;0.5;0;0;;;;;;;;;;;;;;;;;;;; -gms$s15_food_subst_functional_form;;;;;;;;;;;2;;;;;;;;;;;;;;;;;;;;;; -gms$s15_food_substitution_start;;;;;;;;;;;2025;;;;;;;;;;;;;;;;;;;;;; -gms$s15_food_substitution_target;;;;;;;;;;;2050;;;;;;;;;;;;;;;;;;;;;; -gms$kfo_rd;;;;;;;;;;;livst_rum;;;;;;;;;;;;;;;;;;;;;; -gms$s15_exo_foodscen_convergence;;;;;;;;;;1;1;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_foodscen_functional_form;;;;;;;;;;1;1;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_foodscen_start;;;;;;;;;;2025;2025;2025;2025;;;;;;;;;;2025;2025;;;;;;;;; -gms$s15_exo_foodscen_target;;;;;;;;;;2050;2050;2050;2070;;;;;;;;;;2050;2050;;;;;;;;; -gms$s15_exo_waste;;;;;;;;;;1;1;1;1;;;;;;;;;;;;;;;;;;;; -gms$s15_waste_scen;;;;;;;;;;1.2;1.3;1.2;1.25;;;;;;;;;;;;;;;;;;;; -gms$s15_exo_diet;;;;;;;;;;1;1;1;1;;;;;;;;;;1;3;;;;;;;;; -gms$c15_kcal_scen;;;;;;;;;;healthy_BMI;no_underweight;healthy_BMI;healthy_BMI;;;;;;;;;;healthy_BMI;;;;;;;;;; -gms$c15_EAT_scen;;;;;;;;;;FLX;;FLX;FLX;;;;;;;;;;FLX;;;;;;;;;; -gms$s15_exo_monogastric;;;;;;;;;;1;0;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_ruminant;;;;;;;;;;1;0;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_fish;;;;;;;;;;1;0;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_fruitvegnut;;;;;;;;;;1;0;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_roots;;;;;;;;;;1;0;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_pulses;;;;;;;;;;1;0;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_sugar;;;;;;;;;;1;0;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_oils;;;;;;;;;;1;0;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_brans;;;;;;;;;;1;0;1;1;;;;;;;;;;1;0;;;;;;;;; -gms$s15_exo_scp;;;;;;;;;;1;0;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_exo_alcohol;;;;;;;;;;1;0;1;1;;;;;;;;;;1;1;;;;;;;;; -gms$s15_alc_scen;;;;;;;;;;;;;;;;;;;;;;;0.014;0;;;;;;;;; -gms$c21_trade_liberalization;;;;l908080r807070;l909090r808080;l909090r808080;l909595r809090;l908080r807070;l908080r807070;l908080r807070;l908080r807070;l909595r809090;l908080r807070;;;;;;;;;;;;;;;;;;;; -gms$c22_protect_scenario;;;;;;;;;;BH;none;BH_IFL;BH;;;;;;;;;;;;;;;;;;;; -gms$s29_snv_shr;;;;;;;;;;0;0;0;0.2;;;;;;;;;;;;;;;;;;;; -gms$s29_snv_scenario_target;;;;;;;;;;;;;2030;;;;;;;;;;;;;;;;;;;; -gms$c30_bioen_water;;;;;;;;;;rainfed;all;rainfed;rainfed;;;;;;;;;;;;;;;;;;;; -gms$s32_initial_distribution;;;;;;;;;;;;;;;;;;;;;;;;;1;1;0;;;;;; -gms$s32_hvarea;;;;;;;;;;;;;;;;;;;;;;;;;2;1;0;;;;;; -gms$s32_aff_plantation;;;;;;;;;;0;1;0;0;;;;;;;;;;;;;;;;;;;; -gms$s32_aff_bii_coeff;;;;;;;;;;0;1;0;0;;;;;;;;;;;;;;;;;;;; -gms$s32_max_aff_area;;;;;;;;;;500;350;0;700;;;;;;;;;;;;;;;;;;;; -gms$c32_aff_mask;;;;;;;;;;onlytropical;onlytropical;onlytropical;onlytropical;;;;;;;;;;;;;;;;;;;; -gms$c34_urban_scenario;;;;SSP1;SSP2;SSP2;SSP3;SSP4;SSP5;SSP1;SSP1;SSP2;SSP1;;;;;;;;;;;;;;;;;;;; -gms$c32_aff_policy;;;;;;;;;;;;;;;;;none;npi;ndc;;;;;;;;;;;;;; -gms$s32_planing_horizon;;;;;;;;;;50;30;50;50;;;;;;;;;;;;;;;;;;;; -gms$c35_ad_policy;;;;;;;;;;;;;;;;;none;npi;ndc;;;;;;;;;;;;;; -gms$c35_aolc_policy;;;;;;;;;;;;;;;;;none;npi;ndc;;;;;;;;;;;;;; -gms$c35_pot_forest_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -gms$s35_forest_damage_end;;;;2030;2050;2050;2050;2050;2030;2030;2030;2030;2030;;;;;;;;;;;;;;;;;;;; -gms$s35_secdf_distribution;;;;;;;;;;;;;;;;;;;;;;;;;2;2;0;;;;;; -gms$s35_hvarea;;;;;;;;;;;;;;;;;;;;;;;;;2;2;0;;;;;; -gms$c42_watdem_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -gms$s42_watdem_nonagr_scenario;;;;1;2;2;3;2;1;1;1;3;1;;;;;;;;;;;;;;;;;;;; -gms$s42_irrig_eff_scenario;;;;;;;;;;3;3;3;3;;;;;;;;;;;;;;;;;;;; -gms$c42_env_flow_policy;;;;on;off;off;off;mixed;on;on;on;on;on;;;;;;;;;;;;;;;;;;;; -gms$s42_efp_targetyear;;;;;;;;;;2040;2050;2070;2050;;;;;;;;;;;;;;;;;;;; -gms$c43_watavail_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -gms$c50_scen_neff;;;;baseeff_add3_add10_add20_max75;baseeff_add3_add5_add10_max65;baseeff_add3_add5_add10_max65;baseeff_add3_add0_add0_max55;baseeff_add3_add10_add15_max75;baseeff_add3_add5_add15_max75;baseeff_add3_add15_add25_max75;baseeff_add3_add15_add25_max75;baseeff_add3_add15_add25_max65;baseeff_add3_add15_add25_max75;;;;;;;;;;;;;;;;;;;; -gms$c52_carbon_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -gms$c52_land_carbon_sink_rcp;;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;RCP19;RCP26;RCP45;RCP60;RCPBU;RCPBU -gms$c55_scen_conf;;;;ssp1;ssp2;ssp2;ssp3;ssp4;ssp5;ssp1;ssp1;ssp1;ssp1;;;;;;;;;;;;;;;;;;;; -gms$c56_pollutant_prices;;;;;;;;;;;;;;;;;;;;coupling;emulator;coupling;;;;;;;;;;; -gms$s56_c_price_exp_aff;;;;;;;;;;50;30;50;50;;;;;;;;;;;;;;;;;;;; -gms$s56_buffer_aff;;;;;;;;;;0.5;0.5;0.2;0.3;;;;;;;;;;;;;;;;;;;; -gms$c56_emis_policy;;;;;;;;;;reddnatveg_nosoil;reddnatveg_nosoil;redd_nosoil;all_nosoil;;;;;;;;;;;;;;;;;;;; -gms$s56_minimum_cprice;;;;;;;;;;;;;;;;;0;0;18;;;;;;;;;;;;;; -gms$c59_som_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -gms$c60_1stgen_biodem;;;;phaseout2020;const2020;const2020;const2030;const2020;phaseout2020;phaseout2020;phaseout2020;phaseout2020;phaseout2020;;;;;;;;;;;;;;;;;;;; -gms$c60_2ndgen_biodem;;;;;;;;;;;;;;;;;;;;coupling;emulator;coupling;;;;;;;;;;; -gms$c60_biodem_level;;;;;;;;;;;;;;;;;;;;1;0;;;;;;;;;;;; -gms$c60_res_2ndgenBE_dem;;;;ssp1;ssp2;ssp2;ssp3;ssp4;ssp5;sdp;ssp2;sdp;sdp;;;;;;;;;;;;;;;;;;;; -gms$c70_feed_scen;;;;ssp1;ssp2;ssp2;ssp3;ssp4;ssp5;ssp1;ssp5;ssp1;ssp1;;;;;;;;;;;;;;;;;;;; -gms$s73_timber_demand_switch;;;;;;;;;;;;;;;;;;;;;;;;;1;1;0;;;;;; -input['cellular'];;;;;;;;;;;;;;;;;;;;;;;;;;;;rev4.116_h12_0bd54110_cellularmagpie_c200_MRI-ESM2-0-ssp119_lpjml-8e6c5eb1.tgz;rev4.116_h12_6819938d_cellularmagpie_c200_MRI-ESM2-0-ssp126_lpjml-8e6c5eb1.tgz;rev4.116_h12_1b5c3817_cellularmagpie_c200_MRI-ESM2-0-ssp245_lpjml-8e6c5eb1.tgz;rev4.116_h12_3c888fa5_cellularmagpie_c200_MRI-ESM2-0-ssp460_lpjml-8e6c5eb1.tgz;rev4.116_h12_fd712c0b_cellularmagpie_c200_MRI-ESM2-0-ssp370_lpjml-8e6c5eb1.tgz;rev4.116_h12_09a63995_cellularmagpie_c200_MRI-ESM2-0-ssp585_lpjml-8e6c5eb1.tgz +;cc;nocc;nocc_hist;SSP1;SSP2;SSP3;SSP4;SSP5;SDP;SDP-EI;SDP-RC;SDP-MC;VLLO;SSP1-POP-GDP;SSP2-POP-GDP;SSP5-POP-GDP;AR-natveg;AR-plant;BASE;NPI;NPI-revert;NDC;coupling;emulator;input;eat_lancet_diet_v1;eat_lancet_diet_v2;ForestryEndo;ForestryExo;ForestryOff;rcp1p9;rcp2p6;rcp4p5;rcp6p0;rcp7p0;rcp8p5 +gms$c_timesteps;;;;;;;;;;;;;;;;;;;;;;;less_TS;less_TS;;;;;;;;;;;; +gms$c09_pop_scenario;;;;SSP1;SSP2;SSP3;SSP4;SSP5;SSP1;SSP1;SSP1;SSP1;SSP1;SSP1;SSP2;SSP5;;;;;;;;;;;;;;;;;;;; +gms$c09_gdp_scenario;;;;SSP1;SSP2;SSP3;SSP4;SSP5;SSP1;SDP_EI;SDP_RC;SDP_MC;SDP_MC;SSP1;SSP2;SSP5;;;;;;;;;;;;;;;;;;;; +gms$c09_pal_scenario;;;;SSP1;SSP2;SSP3;SSP4;SSP5;SSP1;SSP2;SSP1;SSP1;SSP1;;;;;;;;;;;;;;;;;;;;;;; +gms$c14_yields_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +gms$c15_food_scenario;;;;SSP1;SSP2;SSP3;SSP4;SSP5;SSP1;SSP2;SSP1;SSP1;SSP1;;;;;;;;;;;;;;;;;;;;;;; +gms$s15_rumdairy_scp_substitution;;;;0;0;0;0;0;0;0.5;0;0;0;;;;;;;;;;;;;;;;;;;;;;; +gms$s15_food_subst_functional_form;;;;1;1;1;1;1;;2;;;;;;;;;;;;;;;;;;;;;;;;;; +gms$s15_food_substitution_start;;;;;;;;;;2025;;;;;;;;;;;;;;;;;;;;;;;;;; +gms$s15_food_substitution_target;;;;;;;;;;2050;;;;;;;;;;;;;;;;;;;;;;;;;; +gms$kfo_rd;;;;;;;;;;livst_rum;;;;;;;;;;;;;;;;;;;;;;;;;; +gms$s15_exo_foodscen_convergence;;;;;;;;;1;1;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_foodscen_functional_form;;;;;;;;;1;1;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_foodscen_start;;;;;;;;;2025;2025;2025;2025;2025;;;;;;;;;;;;;2025;2025;;;;;;;;; +gms$s15_exo_foodscen_target;;;;;;;;;2050;2050;2050;2070;2070;;;;;;;;;;;;;2050;2050;;;;;;;;; +gms$s15_exo_waste;;;;0;0;0;0;0;1;1;1;1;1;;;;;;;;;;;;;;;;;;;;;;; +gms$s15_waste_scen;;;;;;;;;1.2;1.3;1.2;1.25;1.25;;;;;;;;;;;;;;;;;;;;;;; +gms$s15_exo_diet;;;;0;0;0;0;0;1;1;1;1;1;;;;;;;;;;;;;1;3;;;;;;;;; +gms$c15_kcal_scen;;;;;;;;;healthy_BMI;no_underweight;healthy_BMI;healthy_BMI;healthy_BMI;;;;;;;;;;;;;healthy_BMI;;;;;;;;;; +gms$c15_EAT_scen;;;;;;;;;FLX;;FLX;FLX;FLX;;;;;;;;;;;;;FLX;;;;;;;;;; +gms$s15_exo_monogastric;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_ruminant;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_fish;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_fruitvegnut;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_roots;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_pulses;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_sugar;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_oils;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_brans;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;0;;;;;;;;; +gms$s15_exo_scp;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_exo_alcohol;;;;;;;;;1;0;1;1;1;;;;;;;;;;;;;1;1;;;;;;;;; +gms$s15_alc_scen;;;;;;;;;;;;;;;;;;;;;;;;;;0.014;0;;;;;;;;; +gms$c21_trade_liberalization;;;;l908080r807070;l909090r808080;l909595r809090;l908080r807070;l908080r807070;l908080r807070;l908080r807070;l909595r809090;l908080r807070;l908080r807070;;;;;;;;;;;;;;;;;;;;;;; +gms$c22_protect_scenario;;;;none;none;none;none;none;BH;none;BH_IFL;BH;BH;;;;;;;;;;;;;;;;;;;;;;; +gms$s29_snv_shr;;;;0;0;0;0;0;0;0;0;0.2;0.2;;;;;;;;;;;;;;;;;;;;;;; +gms$s29_snv_scenario_target;;;;;;;;;;;;2050;2070;;;;;;;;;;;;;;;;;;;;;;; +gms$s29_treecover_plantation;;;;;;;;;;;;;;;;;0;1;;;;;;;;;;;;;;;;;; +gms$s29_treecover_bii_coeff;;;;;;;;;;;;;;;;;0;1;;;;;;;;;;;;;;;;;; +gms$c30_bioen_water;;;;rainfed;rainfed;rainfed;rainfed;rainfed;rainfed;all;rainfed;rainfed;rainfed;;;;;;;;;;;;;;;;;;;;;;; +gms$s32_initial_distribution;;;;;;;;;;;;;;;;;;;;;;;;;;;;1;1;0;;;;;; +gms$s32_hvarea;;;;;;;;;;;;;;;;;;;;;;;;;;;;2;1;0;;;;;; +gms$s32_aff_plantation;;;;0;0;0;0;0;0;1;0;0;0;;;;0;1;;;;;;;;;;;;;;;;;; +gms$s32_aff_bii_coeff;;;;0;0;0;0;0;0;1;0;0;0;;;;0;1;;;;;;;;;;;;;;;;;; +gms$s32_max_aff_area;;;;Inf;Inf;Inf;Inf;Inf;500;350;0;700;700;;;;;;;;;;;;;;;;;;;;;;; +gms$c32_aff_mask;;;;noboreal;noboreal;noboreal;noboreal;noboreal;onlytropical;onlytropical;onlytropical;onlytropical;onlytropical;;;;;;;;;;;;;;;;;;;;;;; +gms$c34_urban_scenario;;;;SSP1;SSP2;SSP3;SSP4;SSP5;SSP1;SSP1;SSP2;SSP1;SSP1;;;;;;;;;;;;;;;;;;;;;;; +gms$c32_aff_policy;;;;;;;;;;;;;;;;;;;none;npi;npi;ndc;;;;;;;;;;;;;; +gms$s32_npi_ndc_reversal;;;;;;;;;;;;;;;;;;;Inf;Inf;2030;Inf;;;;;;;;;;;;;; +gms$s32_planning_horizon;;;;50;50;50;50;50;50;30;50;50;50;;;;50;30;;;;;;;;;;;;;;;;;; +gms$c35_ad_policy;;;;;;;;;;;;;;;;;;;none;npi;npi;ndc;;;;;;;;;;;;;; +gms$c35_aolc_policy;;;;;;;;;;;;;;;;;;;none;npi;npi;ndc;;;;;;;;;;;;;; +gms$s35_npi_ndc_reversal;;;;;;;;;;;;;;;;;;;Inf;Inf;2030;Inf;;;;;;;;;;;;;; +gms$c35_pot_forest_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +gms$s35_forest_damage_end;;;;2050;2050;2050;2050;2050;2050;2050;2050;2050;2050;;;;;;;;;;;;;;;;;;;;;;; +gms$s35_secdf_distribution;;;;;;;;;;;;;;;;;;;;;;;;;;;;2;2;0;;;;;; +gms$s35_hvarea;;;;;;;;;;;;;;;;;;;;;;;;;;;;2;2;0;;;;;; +gms$c42_watdem_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +gms$s42_watdem_nonagr_scenario;;;;1;2;3;2;1;1;1;3;1;1;;;;;;;;;;;;;;;;;;;;;;; +gms$s42_irrig_eff_scenario;;;;2;2;2;2;2;3;3;3;3;2;;;;;;;;;;;;;;;;;;;;;;; +gms$c42_env_flow_policy;;;;on;off;off;mixed;on;on;on;on;on;on;;;;;;;;;;;;;;;;;;;;;;; +gms$s42_efp_targetyear;;;;;;;;;2040;2050;2070;2050;2070;;;;;;;;;;;;;;;;;;;;;;; +gms$c43_watavail_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +gms$c50_scen_neff;;;;baseeff_add3_add10_add20_max75;baseeff_add3_add5_add10_max65;baseeff_add3_add0_add0_max55;baseeff_add3_add10_add15_max75;baseeff_add3_add5_add15_max75;baseeff_add3_add15_add25_max75;baseeff_add3_add15_add25_max75;baseeff_add3_add15_add25_max65;baseeff_add3_add15_add25_max75;baseeff_add3_add15_add25_max75;;;;;;;;;;;;;;;;;;;;;;; +gms$c52_carbon_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +gms$c52_land_carbon_sink_rcp;;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;RCP19;RCP26;RCP45;RCP60;RCPBU;RCPBU +gms$c55_scen_conf;;;;ssp1;ssp2;ssp3;ssp4;ssp5;ssp1;ssp1;ssp1;ssp1;ssp1;;;;;;;;;;;;;;;;;;;;;;; +gms$c56_pollutant_prices;;;;;;;;;;;;;;;;;;;;;;;coupling;emulator;coupling;;;;;;;;;;; +gms$s56_c_price_exp_aff;;;;50;50;50;50;50;50;30;50;50;50;;;;;;;;;;;;;;;;;;;;;;; +gms$s56_buffer_aff;;;;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.2;0.3;0.5;;;;0.5;0.5;;;;;;;;;;;;;;;;;; +gms$c56_emis_policy;;;;reddnatveg_nosoil;reddnatveg_nosoil;reddnatveg_nosoil;reddnatveg_nosoil;reddnatveg_nosoil;reddnatveg_nosoil;reddnatveg_nosoil;redd_nosoil;all_nosoil;reddnatveg_nosoil;;;;;;;;;;;;;;;;;;;;;;; +gms$c59_som_scenario;cc;nocc;nocc_hist;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +gms$c60_1stgen_biodem;;;;phaseout2020;const2020;const2030;const2020;phaseout2020;phaseout2020;phaseout2020;phaseout2020;phaseout2020;phaseout2020;;;;;;;;;;;;;;;;;;;;;;; +gms$c60_2ndgen_biodem;;;;;;;;;;;;;;;;;;;;;;;coupling;emulator;coupling;;;;;;;;;;; +gms$c60_biodem_level;;;;;;;;;;;;;;;;;;;;;;;1;0;;;;;;;;;;;; +gms$c60_res_2ndgenBE_dem;;;;ssp1;ssp2;ssp3;ssp4;ssp5;sdp;ssp2;sdp;sdp;sdp;;;;;;;;;;;;;;;;;;;;;;; +gms$c70_feed_scen;;;;ssp1;ssp2;ssp3;ssp4;ssp5;ssp1;ssp5;ssp1;ssp1;ssp2;;;;;;;;;;;;;;;;;;;;;;; +gms$s73_timber_demand_switch;;;;;;;;;;;;;;;;;;;;;;;;;;;;1;1;0;;;;;; +input['cellular'];;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;rev4.116_h12_0bd54110_cellularmagpie_c200_MRI-ESM2-0-ssp119_lpjml-8e6c5eb1.tgz;rev4.116_h12_6819938d_cellularmagpie_c200_MRI-ESM2-0-ssp126_lpjml-8e6c5eb1.tgz;rev4.116_h12_1b5c3817_cellularmagpie_c200_MRI-ESM2-0-ssp245_lpjml-8e6c5eb1.tgz;rev4.116_h12_3c888fa5_cellularmagpie_c200_MRI-ESM2-0-ssp460_lpjml-8e6c5eb1.tgz;rev4.116_h12_fd712c0b_cellularmagpie_c200_MRI-ESM2-0-ssp370_lpjml-8e6c5eb1.tgz;rev4.116_h12_09a63995_cellularmagpie_c200_MRI-ESM2-0-ssp585_lpjml-8e6c5eb1.tgz diff --git a/main.gms b/main.gms index f87ed72f9..6f9a944e8 100644 --- a/main.gms +++ b/main.gms @@ -249,7 +249,7 @@ $setglobal land_conservation area_based_apr22 $setglobal ageclass oct24 -$setglobal cropland simple_apr24 +$setglobal cropland detail_apr24 $setglobal croparea simple_apr24 $setglobal past endo_jun13 @@ -260,7 +260,7 @@ $setglobal natveg pot_forest_may24 $setglobal employment exo_may22 $setglobal labor_prod off -$setglobal factor_costs per_ton_fao_may22 +$setglobal factor_costs sticky_feb18 $setglobal landconversion calib $setglobal transport gtap_nov12 diff --git a/modules/29_cropland/detail_apr24/input.gms b/modules/29_cropland/detail_apr24/input.gms index e90ed2496..22bf8b5e6 100644 --- a/modules/29_cropland/detail_apr24/input.gms +++ b/modules/29_cropland/detail_apr24/input.gms @@ -24,13 +24,13 @@ scalars s29_treecover_target Minimum share of treecover on total cropland in target year (1) / 0 / s29_treecover_target_noselect Minimum share of treecover on total cropland in target year (1) / 0 / s29_treecover_keep Avoid loss of existing treecover (1=yes 0=no) / 0 / - s29_treecover_max Maximum share of treecover on total cropland (1) / 0.4 / + s29_treecover_max Maximum share of treecover on total cropland (1) / 1 / s29_treecover_penalty_before Penalty for violation of treecover target before scenario start (USD17MER per ha) / 0 / s29_treecover_penalty Penalty for violation of treecover target after sceanrio start (USD17MER per ha) / 6150 / s29_fallow_scenario_start Fallow land scenario start year / 2025 / s29_fallow_scenario_target Fallow land scenario target year / 2050 / s29_fallow_target Minimum share of fallow land on total cropland in target year (1) / 0 / - s29_fallow_max Maximum share of fallow land on total cropland (1) / 0.4 / + s29_fallow_max Maximum share of fallow land on total cropland (1) / 0 / s29_fallow_penalty Penalty for violation of fallow target (USD17MER per ha) / 615 / s29_treecover_map Treecover map for initialization (binary) / 0 / s29_fader_functional_form Switch for functional form of faders (1) / 2 / diff --git a/modules/29_cropland/detail_apr24/preloop.gms b/modules/29_cropland/detail_apr24/preloop.gms index f64187148..f7a24e4bc 100644 --- a/modules/29_cropland/detail_apr24/preloop.gms +++ b/modules/29_cropland/detail_apr24/preloop.gms @@ -48,15 +48,6 @@ elseif s29_treecover_plantation = 1, p29_carbon_density_ac(t,j,ac,ag_pools) = pm_carbon_density_plantation_ac(t,j,ac,ag_pools); ); -** set bii coefficients -p29_treecover_bii_coeff(bii_class_secd,potnatveg) = 0; -if(s29_treecover_bii_coeff = 0, - p29_treecover_bii_coeff(bii_class_secd,potnatveg) = fm_bii_coeff(bii_class_secd,potnatveg) -elseif s29_treecover_bii_coeff = 1, - p29_treecover_bii_coeff(bii_class_secd,potnatveg) = fm_bii_coeff("timber",potnatveg) -); - - * Country switch to determine countries for which certain policies shall be applied. * In the default case, the policy affects all countries when activated. p29_country_switch(iso) = 0; @@ -72,6 +63,6 @@ vm_fallow.l(j) = 0; vm_bv.l(j,"crop_fallow",potnatveg) = vm_fallow.l(j) * fm_bii_coeff("crop_per",potnatveg) * fm_luh2_side_layers(j,potnatveg); -vm_bv.l(j2,"crop_tree",potnatveg) = - sum(bii_class_secd, sum(ac_to_bii_class_secd(ac,bii_class_secd), pc29_treecover(j2,ac)) * - p29_treecover_bii_coeff(bii_class_secd,potnatveg)) * fm_luh2_side_layers(j2,potnatveg); +vm_bv.l(j,"crop_tree",potnatveg) = + sum(bii_class_secd, sum(ac_to_bii_class_secd(ac,bii_class_secd), pc29_treecover(j,ac)) * + fm_bii_coeff(bii_class_secd,potnatveg)) * fm_luh2_side_layers(j,potnatveg); diff --git a/modules/29_cropland/detail_apr24/presolve.gms b/modules/29_cropland/detail_apr24/presolve.gms index 7c9536220..1d9b8e0fb 100644 --- a/modules/29_cropland/detail_apr24/presolve.gms +++ b/modules/29_cropland/detail_apr24/presolve.gms @@ -40,6 +40,17 @@ p29_avl_cropland(t,j) = f29_avl_cropland(j,"%c29_marginal_land%") * (1 - p29_snv * Tree cover on cropland * ------------------------------------------------------- +** set bii coefficients +if(m_year(t) <= sm_fix_SSP2, + p29_treecover_bii_coeff(bii_class_secd,potnatveg) = fm_bii_coeff(bii_class_secd,potnatveg) +else + if(s29_treecover_bii_coeff = 0, + p29_treecover_bii_coeff(bii_class_secd,potnatveg) = fm_bii_coeff(bii_class_secd,potnatveg) + elseif s29_treecover_bii_coeff = 1, + p29_treecover_bii_coeff(bii_class_secd,potnatveg) = fm_bii_coeff("timber",potnatveg) + ); +); + * Growth of trees on cropland is modelled by shifting age-classes according to time step length. s29_shift = m_timestep_length_forestry/5; * example: ac10 in t = ac5 (ac10-1) in t-1 for a 5 yr time step (s29_shift = 1) diff --git a/modules/29_cropland/simple_apr24/not_used.txt b/modules/29_cropland/simple_apr24/not_used.txt index 9ee70dc27..db4af459f 100644 --- a/modules/29_cropland/simple_apr24/not_used.txt +++ b/modules/29_cropland/simple_apr24/not_used.txt @@ -6,3 +6,4 @@ fm_bii_coeff,input,not needed pm_carbon_density_secdforest_ac,input,not needed pm_carbon_density_plantation_ac,input,not needed fm_carbon_density,input,not needed +sm_fix_SSP2,input,not needed diff --git a/modules/32_forestry/dynamic_may24/declarations.gms b/modules/32_forestry/dynamic_may24/declarations.gms index e695ddea2..c0a2b79ae 100644 --- a/modules/32_forestry/dynamic_may24/declarations.gms +++ b/modules/32_forestry/dynamic_may24/declarations.gms @@ -75,6 +75,7 @@ positive variables vm_land_forestry(j,type32) Forestry land pools (mio. ha) v32_prod_forestry_future(i) Future expected production of woody biomass from commercial plantations (mio. tDM per yr) v32_land_replant(j) Harvested and replanted area in timber plantations (mio. ha) + v32_ndc_area_missing(j) Technical variable reflecting missing area towards the NPI NDC re-afforestation target (mio. ha) ; variables @@ -91,6 +92,7 @@ equations q32_max_aff Maximum total global afforestation (mio. ha) q32_max_aff_reg(i) Maximum total regional afforestation (mio. ha) q32_aff_pol(j) Afforestation policy constraint (mio. ha) + q32_ndc_aff_limit(j) Constraint for avoiding that NPI NDC re-afforestation happens at the cost of forests and other natural vegetation (mio. ha) q32_aff_est(j) Afforestation constraint for establishment age classes (mio. ha) q32_hvarea_forestry(j,ac) Plantations area harvest (mio. ha) q32_cost_recur(i) Recurruing costs (mio. USD) @@ -132,6 +134,7 @@ parameters ov_land_forestry(t,j,type32,type) Forestry land pools (mio. ha) ov32_prod_forestry_future(t,i,type) Future expected production of woody biomass from commercial plantations (mio. tDM per yr) ov32_land_replant(t,j,type) Harvested and replanted area in timber plantations (mio. ha) + ov32_ndc_area_missing(t,j,type) Technical variable reflecting missing area towards the NPI NDC re-afforestation target (mio. ha) ov_cdr_aff(t,j,ac,aff_effect,type) Expected bgc (CDR) and local bph effects of afforestation depending on planning horizon (mio. tC) oq32_cost_total(t,i,type) Total forestry costs constraint (mio. USD) oq32_land(t,j,type) Land constraint (mio. ha) @@ -142,6 +145,7 @@ parameters oq32_max_aff(t,type) Maximum total global afforestation (mio. ha) oq32_max_aff_reg(t,i,type) Maximum total regional afforestation (mio. ha) oq32_aff_pol(t,j,type) Afforestation policy constraint (mio. ha) + oq32_ndc_aff_limit(t,j,type) Constraint for avoiding that NPI NDC re-afforestation happens at the cost of forests and other natural vegetation (mio. ha) oq32_aff_est(t,j,type) Afforestation constraint for establishment age classes (mio. ha) oq32_hvarea_forestry(t,j,ac,type) Plantations area harvest (mio. ha) oq32_cost_recur(t,i,type) Recurruing costs (mio. USD) diff --git a/modules/32_forestry/dynamic_may24/equations.gms b/modules/32_forestry/dynamic_may24/equations.gms index 66ef95c64..153d13a8f 100644 --- a/modules/32_forestry/dynamic_may24/equations.gms +++ b/modules/32_forestry/dynamic_may24/equations.gms @@ -23,6 +23,7 @@ q32_cost_total(i2) .. vm_cost_fore(i2) =e= + v32_cost_establishment(i2) + v32_cost_hvarea(i2) + sum(cell(i2,j2), v32_land_missing(j2)) * s32_free_land_cost + + sum(cell(i2,j2), v32_ndc_area_missing(j2)) * s32_free_land_cost ; *----------------------------------------------- @@ -30,7 +31,7 @@ q32_cost_total(i2) .. vm_cost_fore(i2) =e= *----------------------------------------------- *' The interface `vm_cdr_aff` provides the projected biogeochemical (bgc) carbon sequestration *' and the local biophysical (bph) warming/cooling effects of an afforestation -*' activity for a planning horizon of 50 years `s32_planing_horizon` to the [56_ghg_policy] module. +*' activity for a planning horizon of 50 years `s32_planning_horizon` to the [56_ghg_policy] module. q32_cdr_aff(j2,ac) .. vm_cdr_aff(j2,ac,"bgc") =e= @@ -68,10 +69,15 @@ sum(ac_est, v32_land(j2,"aff",ac_est)) =l= sum(ac, v32_land(j2,"aff",ac)) - sum( =e= sum(ac_sub, v32_hvarea_forestry(j2,ac_sub)) * sum(cell(i2,j2), min(1, sum(ct, p32_future_to_current_demand_ratio(ct,i2))))$s32_establishment_dynamic; -*' The constraint `q32_aff_pol` accounts for the exogenous afforestation prescribed by NPI/NDC policies. +*' The constraint `q32_aff_pol` accounts for the exogenous re/afforestation prescribed by NPI/NDC policies. q32_aff_pol(j2) .. - sum(ac_est, v32_land(j2,"ndc",ac_est)) =e= sum(ct, p32_aff_pol_timestep(ct,j2)); + sum(ac_est, v32_land(j2,"ndc",ac_est)) + v32_ndc_area_missing(j2) =e= sum(ct, p32_aff_pol_timestep(ct,j2)); + +*' The constraint `q32_ndc_aff_limit` makes sure that NPI/NDC re/afforestation does not happen at the cost of forests and other natural vegetation. + + q32_ndc_aff_limit(j2) .. + sum(ct, p32_aff_pol_timestep(ct,j2)) * vm_natforest_reduction(j2) =e= 0; *' The constraint `q32_max_aff` accounts for the allowed maximum global endogenous *' afforestation defined in `i32_max_aff_area_glo`. diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index 12f0d9b28..b40d4a4d4 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -28,7 +28,7 @@ scalars s32_est_cost_natveg Establishment cost for natural vegetation (USD17MER per ha) / 2460 / s32_recurring_cost Recurring costs (USD17MER per ha) / 615 / s32_harvesting_cost Harvesting cost (USD17MER per ha) / 2460 / - s32_planing_horizon Afforestation planing horizon (years) / 50 / + s32_planning_horizon Afforestation planing horizon (years) / 50 / s32_rotation_extension Rotation extension factor 1=original rotations 2=100 percent increase in rotations etc (1) / 1 / s32_faustmann_rotation Switch to activate faustmann rotations (1=on 0=off) / 0 / s32_initial_distribution Switch to Activate ageclass distribution in plantations 0=off 1=equal distribution / 1 / diff --git a/modules/32_forestry/dynamic_may24/postsolve.gms b/modules/32_forestry/dynamic_may24/postsolve.gms index a4b5c61c8..dd1781f83 100644 --- a/modules/32_forestry/dynamic_may24/postsolve.gms +++ b/modules/32_forestry/dynamic_may24/postsolve.gms @@ -26,6 +26,7 @@ pc32_land(j,type32,ac) = v32_land.l(j,type32,ac); ov_land_forestry(t,j,type32,"marginal") = vm_land_forestry.m(j,type32); ov32_prod_forestry_future(t,i,"marginal") = v32_prod_forestry_future.m(i); ov32_land_replant(t,j,"marginal") = v32_land_replant.m(j); + ov32_ndc_area_missing(t,j,"marginal") = v32_ndc_area_missing.m(j); ov_cdr_aff(t,j,ac,aff_effect,"marginal") = vm_cdr_aff.m(j,ac,aff_effect); oq32_cost_total(t,i,"marginal") = q32_cost_total.m(i); oq32_land(t,j,"marginal") = q32_land.m(j); @@ -36,6 +37,7 @@ pc32_land(j,type32,ac) = v32_land.l(j,type32,ac); oq32_max_aff(t,"marginal") = q32_max_aff.m; oq32_max_aff_reg(t,i,"marginal") = q32_max_aff_reg.m(i); oq32_aff_pol(t,j,"marginal") = q32_aff_pol.m(j); + oq32_ndc_aff_limit(t,j,"marginal") = q32_ndc_aff_limit.m(j); oq32_aff_est(t,j,"marginal") = q32_aff_est.m(j); oq32_hvarea_forestry(t,j,ac,"marginal") = q32_hvarea_forestry.m(j,ac); oq32_cost_recur(t,i,"marginal") = q32_cost_recur.m(i); @@ -72,6 +74,7 @@ pc32_land(j,type32,ac) = v32_land.l(j,type32,ac); ov_land_forestry(t,j,type32,"level") = vm_land_forestry.l(j,type32); ov32_prod_forestry_future(t,i,"level") = v32_prod_forestry_future.l(i); ov32_land_replant(t,j,"level") = v32_land_replant.l(j); + ov32_ndc_area_missing(t,j,"level") = v32_ndc_area_missing.l(j); ov_cdr_aff(t,j,ac,aff_effect,"level") = vm_cdr_aff.l(j,ac,aff_effect); oq32_cost_total(t,i,"level") = q32_cost_total.l(i); oq32_land(t,j,"level") = q32_land.l(j); @@ -82,6 +85,7 @@ pc32_land(j,type32,ac) = v32_land.l(j,type32,ac); oq32_max_aff(t,"level") = q32_max_aff.l; oq32_max_aff_reg(t,i,"level") = q32_max_aff_reg.l(i); oq32_aff_pol(t,j,"level") = q32_aff_pol.l(j); + oq32_ndc_aff_limit(t,j,"level") = q32_ndc_aff_limit.l(j); oq32_aff_est(t,j,"level") = q32_aff_est.l(j); oq32_hvarea_forestry(t,j,ac,"level") = q32_hvarea_forestry.l(j,ac); oq32_cost_recur(t,i,"level") = q32_cost_recur.l(i); @@ -118,6 +122,7 @@ pc32_land(j,type32,ac) = v32_land.l(j,type32,ac); ov_land_forestry(t,j,type32,"upper") = vm_land_forestry.up(j,type32); ov32_prod_forestry_future(t,i,"upper") = v32_prod_forestry_future.up(i); ov32_land_replant(t,j,"upper") = v32_land_replant.up(j); + ov32_ndc_area_missing(t,j,"upper") = v32_ndc_area_missing.up(j); ov_cdr_aff(t,j,ac,aff_effect,"upper") = vm_cdr_aff.up(j,ac,aff_effect); oq32_cost_total(t,i,"upper") = q32_cost_total.up(i); oq32_land(t,j,"upper") = q32_land.up(j); @@ -128,6 +133,7 @@ pc32_land(j,type32,ac) = v32_land.l(j,type32,ac); oq32_max_aff(t,"upper") = q32_max_aff.up; oq32_max_aff_reg(t,i,"upper") = q32_max_aff_reg.up(i); oq32_aff_pol(t,j,"upper") = q32_aff_pol.up(j); + oq32_ndc_aff_limit(t,j,"upper") = q32_ndc_aff_limit.up(j); oq32_aff_est(t,j,"upper") = q32_aff_est.up(j); oq32_hvarea_forestry(t,j,ac,"upper") = q32_hvarea_forestry.up(j,ac); oq32_cost_recur(t,i,"upper") = q32_cost_recur.up(i); @@ -164,6 +170,7 @@ pc32_land(j,type32,ac) = v32_land.l(j,type32,ac); ov_land_forestry(t,j,type32,"lower") = vm_land_forestry.lo(j,type32); ov32_prod_forestry_future(t,i,"lower") = v32_prod_forestry_future.lo(i); ov32_land_replant(t,j,"lower") = v32_land_replant.lo(j); + ov32_ndc_area_missing(t,j,"lower") = v32_ndc_area_missing.lo(j); ov_cdr_aff(t,j,ac,aff_effect,"lower") = vm_cdr_aff.lo(j,ac,aff_effect); oq32_cost_total(t,i,"lower") = q32_cost_total.lo(i); oq32_land(t,j,"lower") = q32_land.lo(j); @@ -174,6 +181,7 @@ pc32_land(j,type32,ac) = v32_land.l(j,type32,ac); oq32_max_aff(t,"lower") = q32_max_aff.lo; oq32_max_aff_reg(t,i,"lower") = q32_max_aff_reg.lo(i); oq32_aff_pol(t,j,"lower") = q32_aff_pol.lo(j); + oq32_ndc_aff_limit(t,j,"lower") = q32_ndc_aff_limit.lo(j); oq32_aff_est(t,j,"lower") = q32_aff_est.lo(j); oq32_hvarea_forestry(t,j,ac,"lower") = q32_hvarea_forestry.lo(j,ac); oq32_cost_recur(t,i,"lower") = q32_cost_recur.lo(i); diff --git a/modules/32_forestry/dynamic_may24/presolve.gms b/modules/32_forestry/dynamic_may24/presolve.gms index d341fbf7b..f7601068c 100644 --- a/modules/32_forestry/dynamic_may24/presolve.gms +++ b/modules/32_forestry/dynamic_may24/presolve.gms @@ -43,7 +43,7 @@ p32_carbon_density_ac(t,j,"plant",ac,ag_pools) = pm_carbon_density_plantation_ac p32_carbon_density_ac(t,j,"ndc",ac,ag_pools) = pm_carbon_density_secdforest_ac(t,j,ac,ag_pools); *' CDR from afforestation for each age-class, depending on planning horizon. -p32_cdr_ac(t,j,ac)$(ord(ac) > 1 AND (ord(ac)-1) <= s32_planing_horizon/5) +p32_cdr_ac(t,j,ac)$(ord(ac) > 1 AND (ord(ac)-1) <= s32_planning_horizon/5) = p32_carbon_density_ac(t,j,"aff",ac,"vegc") - p32_carbon_density_ac(t,j,"aff",ac-1,"vegc"); * Disturbance from generic sources to managed and natural forests @@ -127,10 +127,10 @@ if (m_year(t) >= s32_npi_ndc_reversal, i32_recurring_cost("ndc") = 0; ); -** fix c price induced afforestation based on s32_planing_horizon, fixed only until end of s32_planing_horizon, ac_est is free +** fix c price induced afforestation based on s32_planning_horizon, fixed only until end of s32_planning_horizon, ac_est is free if(s32_aff_prot = 0, - v32_land.fx(j,"aff",ac)$(ac.off <= s32_planing_horizon/5) = pc32_land(j,"aff",ac); - v32_land.up(j,"aff",ac)$(ac.off > s32_planing_horizon/5) = pc32_land(j,"aff",ac); + v32_land.fx(j,"aff",ac)$(ac.off <= s32_planning_horizon/5) = pc32_land(j,"aff",ac); + v32_land.up(j,"aff",ac)$(ac.off > s32_planning_horizon/5) = pc32_land(j,"aff",ac); elseif s32_aff_prot = 1, v32_land.fx(j,"aff",ac) = pc32_land(j,"aff",ac); ); diff --git a/modules/32_forestry/dynamic_may24/realization.gms b/modules/32_forestry/dynamic_may24/realization.gms index 924868d18..d11137a71 100644 --- a/modules/32_forestry/dynamic_may24/realization.gms +++ b/modules/32_forestry/dynamic_may24/realization.gms @@ -11,7 +11,7 @@ *' National policies implemented (NPI) and nationally determined contributions to *' the Paris agreement (NDC) for re/afforestation are based on country reports. The *' interface `vm_cdr_aff` includes the expected CDR and local bph effects from -*' re/afforestation depending on the planning horizon `s32_planing_horizon`. The +*' re/afforestation depending on the planning horizon `s32_planning_horizon`. The *' reward for CDR and local bph effects from re/afforestation is calculated in the *' [56_ghg_policy] module. In this realization, re/afforestation is modeled by default *' as regrowth of natural vegetation (see @humpenoder_investigating_2014 for details on the implemenation). diff --git a/modules/35_natveg/pot_forest_may24/declarations.gms b/modules/35_natveg/pot_forest_may24/declarations.gms index 6714b4d3d..7cb01dfd7 100644 --- a/modules/35_natveg/pot_forest_may24/declarations.gms +++ b/modules/35_natveg/pot_forest_may24/declarations.gms @@ -43,6 +43,7 @@ equations q35_carbon_other(j,ag_pools,stockType) Other land carbon stock calculation (mio tC) q35_min_forest(j) Minimum forest land constraint (mio. ha) q35_min_other(j) Minimum other land constraint (mio. ha) + q35_natforest_reduction(j) Natural forest reduction (mio. ha) q35_landdiff Difference in natveg land (mio. ha) q35_other_expansion(j,othertype35) Other land expansion (mio. ha) q35_other_reduction(j,othertype35,ac) Other land reduction (mio. ha) @@ -83,6 +84,7 @@ positive variables v35_hvarea_primforest(j) Harvested area from primary forest (mio. ha) vm_prod_natveg(j,land_natveg,kforestry) Production of woody biomass from natural vegetation (mio. tDM per yr) vm_cost_hvarea_natveg(i) Cost of harvesting natural vegetation (mio. USD17MER) + vm_natforest_reduction(j) Natural forest reduction (mio. ha) ; @@ -101,6 +103,7 @@ parameters ov35_hvarea_primforest(t,j,type) Harvested area from primary forest (mio. ha) ov_prod_natveg(t,j,land_natveg,kforestry,type) Production of woody biomass from natural vegetation (mio. tDM per yr) ov_cost_hvarea_natveg(t,i,type) Cost of harvesting natural vegetation (mio. USD17MER) + ov_natforest_reduction(t,j,type) Natural forest reduction (mio. ha) oq35_land_secdforest(t,j,type) Secdforest land pool calculation (mio. ha) oq35_land_other(t,j,type) Other land pool calculation (mio. ha) oq35_carbon_primforest(t,j,ag_pools,stockType,type) Primforest carbon stock calculation (mio tC) @@ -108,6 +111,7 @@ parameters oq35_carbon_other(t,j,ag_pools,stockType,type) Other land carbon stock calculation (mio tC) oq35_min_forest(t,j,type) Minimum forest land constraint (mio. ha) oq35_min_other(t,j,type) Minimum other land constraint (mio. ha) + oq35_natforest_reduction(t,j,type) Natural forest reduction (mio. ha) oq35_landdiff(t,type) Difference in natveg land (mio. ha) oq35_other_expansion(t,j,othertype35,type) Other land expansion (mio. ha) oq35_other_reduction(t,j,othertype35,ac,type) Other land reduction (mio. ha) diff --git a/modules/35_natveg/pot_forest_may24/equations.gms b/modules/35_natveg/pot_forest_may24/equations.gms index 0c7040d33..d8557b65c 100644 --- a/modules/35_natveg/pot_forest_may24/equations.gms +++ b/modules/35_natveg/pot_forest_may24/equations.gms @@ -78,6 +78,9 @@ q35_min_other(j2) .. vm_land(j2,"other") =g= sum(ct, p35_min_other(ct,j2)); + q35_natforest_reduction(j2) .. vm_natforest_reduction(j2) =e= + v35_primforest_reduction(j2) + sum(ac_sub, v35_secdforest_reduction(j2,ac_sub)); + *' The following technical calculations are needed for reducing differences in land-use patterns between time steps. *' The gross change in natural vegetation is calculated based on land expansion and *' land contraction of other land, and land reduction of primary and secondary forest. diff --git a/modules/35_natveg/pot_forest_may24/input.gms b/modules/35_natveg/pot_forest_may24/input.gms index 1b39804af..695e0be67 100644 --- a/modules/35_natveg/pot_forest_may24/input.gms +++ b/modules/35_natveg/pot_forest_may24/input.gms @@ -24,7 +24,7 @@ s35_timber_harvest_cost_other Cost for harvesting from other land (USD17M s35_timber_harvest_cost_primforest Cost for harvesting from primary forest (USD17MER per ha) / 3690/ s35_natveg_harvest_shr Constrains the allowed wood harvest from natural vegetation (1=unconstrained) (1) /1/ s35_secdf_distribution Flag for secdf initialization (0=all secondary forest in highest age class 1=Equal distribution among all age classes 2=Poulter distribution from MODIS satellite data) (1) / 2 / -s35_forest_damage Damage simulation in forests (0=none 1=shifting agriculture 2= Damage from shifting agriculture is faded out by c35_forest_damage_end 4= f35_forest_shock scenario) / 2 / +s35_forest_damage Damage simulation in forests (0=none 1=shifting agriculture 2= Damage from shifting agriculture is faded out by c35_forest_damage_end 4= f35_forest_shock scenario) / 0 / s35_forest_damage_end Year of forest damage end (1) / 2050 / s35_npi_ndc_reversal Year in which NPI NDC reversal should take place (1) / Inf / ; diff --git a/modules/35_natveg/pot_forest_may24/postsolve.gms b/modules/35_natveg/pot_forest_may24/postsolve.gms index 38033fa99..2fd39a119 100644 --- a/modules/35_natveg/pot_forest_may24/postsolve.gms +++ b/modules/35_natveg/pot_forest_may24/postsolve.gms @@ -29,6 +29,7 @@ pm_max_forest_est(t+1,j)$(pm_max_forest_est(t+1,j) < 1e-6) = 0; ov35_hvarea_primforest(t,j,"marginal") = v35_hvarea_primforest.m(j); ov_prod_natveg(t,j,land_natveg,kforestry,"marginal") = vm_prod_natveg.m(j,land_natveg,kforestry); ov_cost_hvarea_natveg(t,i,"marginal") = vm_cost_hvarea_natveg.m(i); + ov_natforest_reduction(t,j,"marginal") = vm_natforest_reduction.m(j); oq35_land_secdforest(t,j,"marginal") = q35_land_secdforest.m(j); oq35_land_other(t,j,"marginal") = q35_land_other.m(j); oq35_carbon_primforest(t,j,ag_pools,stockType,"marginal") = q35_carbon_primforest.m(j,ag_pools,stockType); @@ -36,6 +37,7 @@ pm_max_forest_est(t+1,j)$(pm_max_forest_est(t+1,j) < 1e-6) = 0; oq35_carbon_other(t,j,ag_pools,stockType,"marginal") = q35_carbon_other.m(j,ag_pools,stockType); oq35_min_forest(t,j,"marginal") = q35_min_forest.m(j); oq35_min_other(t,j,"marginal") = q35_min_other.m(j); + oq35_natforest_reduction(t,j,"marginal") = q35_natforest_reduction.m(j); oq35_landdiff(t,"marginal") = q35_landdiff.m; oq35_other_expansion(t,j,othertype35,"marginal") = q35_other_expansion.m(j,othertype35); oq35_other_reduction(t,j,othertype35,ac,"marginal") = q35_other_reduction.m(j,othertype35,ac); @@ -73,6 +75,7 @@ pm_max_forest_est(t+1,j)$(pm_max_forest_est(t+1,j) < 1e-6) = 0; ov35_hvarea_primforest(t,j,"level") = v35_hvarea_primforest.l(j); ov_prod_natveg(t,j,land_natveg,kforestry,"level") = vm_prod_natveg.l(j,land_natveg,kforestry); ov_cost_hvarea_natveg(t,i,"level") = vm_cost_hvarea_natveg.l(i); + ov_natforest_reduction(t,j,"level") = vm_natforest_reduction.l(j); oq35_land_secdforest(t,j,"level") = q35_land_secdforest.l(j); oq35_land_other(t,j,"level") = q35_land_other.l(j); oq35_carbon_primforest(t,j,ag_pools,stockType,"level") = q35_carbon_primforest.l(j,ag_pools,stockType); @@ -80,6 +83,7 @@ pm_max_forest_est(t+1,j)$(pm_max_forest_est(t+1,j) < 1e-6) = 0; oq35_carbon_other(t,j,ag_pools,stockType,"level") = q35_carbon_other.l(j,ag_pools,stockType); oq35_min_forest(t,j,"level") = q35_min_forest.l(j); oq35_min_other(t,j,"level") = q35_min_other.l(j); + oq35_natforest_reduction(t,j,"level") = q35_natforest_reduction.l(j); oq35_landdiff(t,"level") = q35_landdiff.l; oq35_other_expansion(t,j,othertype35,"level") = q35_other_expansion.l(j,othertype35); oq35_other_reduction(t,j,othertype35,ac,"level") = q35_other_reduction.l(j,othertype35,ac); @@ -117,6 +121,7 @@ pm_max_forest_est(t+1,j)$(pm_max_forest_est(t+1,j) < 1e-6) = 0; ov35_hvarea_primforest(t,j,"upper") = v35_hvarea_primforest.up(j); ov_prod_natveg(t,j,land_natveg,kforestry,"upper") = vm_prod_natveg.up(j,land_natveg,kforestry); ov_cost_hvarea_natveg(t,i,"upper") = vm_cost_hvarea_natveg.up(i); + ov_natforest_reduction(t,j,"upper") = vm_natforest_reduction.up(j); oq35_land_secdforest(t,j,"upper") = q35_land_secdforest.up(j); oq35_land_other(t,j,"upper") = q35_land_other.up(j); oq35_carbon_primforest(t,j,ag_pools,stockType,"upper") = q35_carbon_primforest.up(j,ag_pools,stockType); @@ -124,6 +129,7 @@ pm_max_forest_est(t+1,j)$(pm_max_forest_est(t+1,j) < 1e-6) = 0; oq35_carbon_other(t,j,ag_pools,stockType,"upper") = q35_carbon_other.up(j,ag_pools,stockType); oq35_min_forest(t,j,"upper") = q35_min_forest.up(j); oq35_min_other(t,j,"upper") = q35_min_other.up(j); + oq35_natforest_reduction(t,j,"upper") = q35_natforest_reduction.up(j); oq35_landdiff(t,"upper") = q35_landdiff.up; oq35_other_expansion(t,j,othertype35,"upper") = q35_other_expansion.up(j,othertype35); oq35_other_reduction(t,j,othertype35,ac,"upper") = q35_other_reduction.up(j,othertype35,ac); @@ -161,6 +167,7 @@ pm_max_forest_est(t+1,j)$(pm_max_forest_est(t+1,j) < 1e-6) = 0; ov35_hvarea_primforest(t,j,"lower") = v35_hvarea_primforest.lo(j); ov_prod_natveg(t,j,land_natveg,kforestry,"lower") = vm_prod_natveg.lo(j,land_natveg,kforestry); ov_cost_hvarea_natveg(t,i,"lower") = vm_cost_hvarea_natveg.lo(i); + ov_natforest_reduction(t,j,"lower") = vm_natforest_reduction.lo(j); oq35_land_secdforest(t,j,"lower") = q35_land_secdforest.lo(j); oq35_land_other(t,j,"lower") = q35_land_other.lo(j); oq35_carbon_primforest(t,j,ag_pools,stockType,"lower") = q35_carbon_primforest.lo(j,ag_pools,stockType); @@ -168,6 +175,7 @@ pm_max_forest_est(t+1,j)$(pm_max_forest_est(t+1,j) < 1e-6) = 0; oq35_carbon_other(t,j,ag_pools,stockType,"lower") = q35_carbon_other.lo(j,ag_pools,stockType); oq35_min_forest(t,j,"lower") = q35_min_forest.lo(j); oq35_min_other(t,j,"lower") = q35_min_other.lo(j); + oq35_natforest_reduction(t,j,"lower") = q35_natforest_reduction.lo(j); oq35_landdiff(t,"lower") = q35_landdiff.lo; oq35_other_expansion(t,j,othertype35,"lower") = q35_other_expansion.lo(j,othertype35); oq35_other_reduction(t,j,othertype35,ac,"lower") = q35_other_reduction.lo(j,othertype35,ac); diff --git a/modules/56_ghg_policy/price_aug22/input.gms b/modules/56_ghg_policy/price_aug22/input.gms index ff5108f8e..eca9d7c17 100644 --- a/modules/56_ghg_policy/price_aug22/input.gms +++ b/modules/56_ghg_policy/price_aug22/input.gms @@ -8,8 +8,8 @@ * Set-switch for countries affected by regional ghg policy * Default: all iso countries selected sets - policy_countries56(iso) countries to be affected by ghg policy / - ABW,AFG,AGO,AIA,ALA,ALB,AND,ARE,ARG,ARM, + policy_countries56(iso) countries to be affected by ghg policy + / ABW,AFG,AGO,AIA,ALA,ALB,AND,ARE,ARG,ARM, ASM,ATA,ATF,ATG,AUS,AUT,AZE,BDI,BEL,BEN, BES,BFA,BGD,BGR,BHR,BHS,BIH,BLM,BLR,BLZ, BMU,BOL,BRA,BRB,BRN,BTN,BVT,BWA,CAF,CAN, @@ -35,34 +35,29 @@ sets UGA,UKR,UMI,URY,USA,UZB,VAT,VCT,VEN,VGB, VIR,VNM,VUT,WLF,WSM,YEM,ZAF,ZMB,ZWE / - fader_countries56(iso) countries to be affected by ghg policy fader / - ABW,AFG,AGO,AIA,ALA,ALB,AND,ARE,ARG,ARM, - ASM,ATA,ATF,ATG,AUS,AUT,AZE,BDI,BEL,BEN, - BES,BFA,BGD,BGR,BHR,BHS,BIH,BLM,BLR,BLZ, - BMU,BOL,BRA,BRB,BRN,BTN,BVT,BWA,CAF,CAN, - CCK,CHN,CHE,CHL,CIV,CMR,COD,COG,COK,COL, - COM,CPV,CRI,CUB,CUW,CXR,CYM,CYP,CZE,DEU, - DJI,DMA,DNK,DOM,DZA,ECU,EGY,ERI,ESH,ESP, - EST,ETH,FIN,FJI,FLK,FRA,FRO,FSM,GAB,GBR, - GEO,GGY,GHA,GIB,GIN,GLP,GMB,GNB,GNQ,GRC, - GRD,GRL,GTM,GUF,GUM,GUY,HKG,HMD,HND,HRV, - HTI,HUN,IDN,IMN,IND,IOT,IRL,IRN,IRQ,ISL, - ISR,ITA,JAM,JEY,JOR,JPN,KAZ,KEN,KGZ,KHM, - KIR,KNA,KOR,KWT,LAO,LBN,LBR,LBY,LCA,LIE, - LKA,LSO,LTU,LUX,LVA,MAC,MAF,MAR,MCO,MDA, - MDG,MDV,MEX,MHL,MKD,MLI,MLT,MMR,MNE,MNG, - MNP,MOZ,MRT,MSR,MTQ,MUS,MWI,MYS,MYT,NAM, - NCL,NER,NFK,NGA,NIC,NIU,NLD,NOR,NPL,NRU, - NZL,OMN,PAK,PAN,PCN,PER,PHL,PLW,PNG,POL, - PRI,PRK,PRT,PRY,PSE,PYF,QAT,REU,ROU,RUS, - RWA,SAU,SDN,SEN,SGP,SGS,SHN,SJM,SLB,SLE, - SLV,SMR,SOM,SPM,SRB,SSD,STP,SUR,SVK,SVN, - SWE,SWZ,SXM,SYC,SYR,TCA,TCD,TGO,THA,TJK, - TKL,TKM,TLS,TON,TTO,TUN,TUR,TUV,TWN,TZA, - UGA,UKR,UMI,URY,USA,UZB,VAT,VCT,VEN,VGB, + fader_countries56(iso) countries to be affected by ghg policy fader + / ABW,AFG,AGO,AIA,ALA,AND,ARE,ARG,ARM,ASM,ATA, + ATF,ATG,AZE,BDI,BEN,BES,BFA,BGD,BHR,BHS,BLM, + BLR,BLZ,BMU,BOL,BRA,BRB,BRN,BTN,BVT,BWA,CAF, + CCK,CHN,CHL,CIV,CMR,COD,COG,COK,COL,COM,CPV, + CRI,CUB,CUW,CXR,CYM,DJI,DMA,DOM,DZA,ECU,EGY, + ERI,ESH,ETH,FJI,FLK,FRO,FSM,GAB,GEO,GGY,GHA, + GIB,GIN,GLP,GMB,GNB,GNQ,GRD,GRL,GTM,GUF,GUM, + GUY,HKG,HMD,HND,HTI,IDN,IMN,IND,IOT,IRN,IRQ, + ISR,JAM,JEY,JOR,KAZ,KEN,KGZ,KHM,KIR,KNA,KOR, + KWT,LAO,LBN,LBR,LBY,LCA,LIE,LKA,LSO,MAC,MAF, + MAR,MCO,MDA,MDG,MDV,MEX,MHL,MLI,MMR,MNG,MNP, + MOZ,MRT,MSR,MTQ,MUS,MWI,MYS,MYT,NAM,NCL,NER, + NFK,NGA,NIC,NIU,NPL,NRU,OMN,PAK,PAN,PCN,PER, + PHL,PLW,PNG,PRI,PRK,PRY,PSE,PYF,QAT,REU,RUS, + RWA,SAU,SDN,SEN,SGP,SGS,SHN,SJM,SLB,SLE,SLV, + SMR,SOM,SPM,SSD,STP,SUR,SWZ,SXM,SYC,SYR,TCA, + TCD,TGO,THA,TJK,TKL,TKM,TLS,TON,TTO,TUN,TUV, + TWN,TZA,UGA,UKR,UMI,URY,UZB,VAT,VCT,VEN,VGB, VIR,VNM,VUT,WLF,WSM,YEM,ZAF,ZMB,ZWE / -pollutants_fader(pollutants) pollutants affected by GHG policy fader / co2_c, ch4, n2o_n_direct, n2o_n_indirect, nh3_n, no2_n, no3_n / +pollutants_fader(pollutants) pollutants affected by GHG policy fader + / co2_c, ch4, n2o_n_direct, n2o_n_indirect, nh3_n, no2_n, no3_n / ; @@ -78,7 +73,7 @@ scalars s56_timesteps Number of time steps for C price interpolation (1) / 0 / s56_offset Helper for C price interpolation (1) / 0 / s56_ghgprice_fader Switch for GHG policy fader (1=on 0=off) / 0 / - s56_fader_start Start year of GHG policy fade-in (1) / 2025 / + s56_fader_start Start year of GHG policy fade-in (1) / 2035 / s56_fader_end End year of GHG policy fade-in (1) / 2050 / s56_fader_target Target value of GHG policy fade-in in end year / 1 / s56_fader_functional_form Switch for functional form of GHG policy fader (1=linear 2=sigmoid) / 1 / diff --git a/modules/56_ghg_policy/price_aug22/preloop.gms b/modules/56_ghg_policy/price_aug22/preloop.gms index 1ed833cc9..499e85f50 100644 --- a/modules/56_ghg_policy/price_aug22/preloop.gms +++ b/modules/56_ghg_policy/price_aug22/preloop.gms @@ -47,45 +47,45 @@ $endif ***save im_pollutant_prices to parameter p56_pollutant_prices_input(t_all,i,pollutants,emis_source) = im_pollutant_prices(t_all,i,pollutants,emis_source); -** set GHG prices to zero for historic period -im_pollutant_prices(t_all,i,pollutants,emis_source)$(m_year(t_all) <= sm_fix_SSP2) = 0; -** set GHG prices to zero for all future time steps until the year defined by `c56_mute_ghgprices_until` -im_pollutant_prices(t_all,i,pollutants,emis_source)$(m_year(t_all) > sm_fix_SSP2 AND m_year(t_all) <= m_year("%c56_mute_ghgprices_until%")) = 0; -** Exception for C price, which can be set to a minium price for all future time steps until the year defined by `c56_mute_ghgprices_until` -im_pollutant_prices(t_all,i,"co2_c",emis_source)$(m_year(t_all) > sm_fix_SSP2 AND m_year(t_all) <= m_year("%c56_mute_ghgprices_until%")) = s56_minimum_cprice; - -***limit CH4 and N2O GHG prices based on s56_limit_ch4_n2o_price -*12/44 conversion from USD17MER per tC to USD17MER per tCO2 -*28 and 265 Global Warming Potentials from AR5 WG1 CH08 Table 8.7, conversion from USD17MER per tCO2 to USD17MER per tCH4 and USD17MER per tN2O -*44/28 conversion from USD17MER per tN2O to USD17MER per tN -im_pollutant_prices(t_all,i,"ch4",emis_source)$(im_pollutant_prices(t_all,i,"ch4",emis_source) > s56_limit_ch4_n2o_price*12/44*28) = s56_limit_ch4_n2o_price*12/44*28; -im_pollutant_prices(t_all,i,"n2o_n_direct",emis_source)$(im_pollutant_prices(t_all,i,"n2o_n_direct",emis_source) > s56_limit_ch4_n2o_price*12/44*265*44/28) = s56_limit_ch4_n2o_price*12/44*265*44/28; -im_pollutant_prices(t_all,i,"n2o_n_indirect",emis_source)$(im_pollutant_prices(t_all,i,"n2o_n_indirect",emis_source) > s56_limit_ch4_n2o_price*12/44*265*44/28) = s56_limit_ch4_n2o_price*12/44*265*44/28; - -***apply reduction factor on CO2 price to account for potential negative side effects -***lowers the economic incentive for CO2 emission reduction (avoided deforestation) and afforestation -im_pollutant_prices(t_all,i,"co2_c",emis_source) = im_pollutant_prices(t_all,i,"co2_c",emis_source)*s56_cprice_red_factor; - ***multiply GHG prices with development state to account for institutional requirements needed for implementing a GHG pricing scheme im_pollutant_prices(t_all,i,pollutants,emis_source)$(s56_ghgprice_devstate_scaling = 1) = im_pollutant_prices(t_all,i,pollutants,emis_source)*im_development_state(t_all,i); +***build and apply temporal fader for GHG policy if (s56_fader_functional_form = 1, m_linear_time_interpol(p56_fader,s56_fader_start,s56_fader_end,0,s56_fader_target); elseif s56_fader_functional_form = 2, m_sigmoid_time_interpol(p56_fader,s56_fader_start,s56_fader_end,0,s56_fader_target); ); -***build and apply temporal fader for GHG policy p56_fader_reg(t_all,i) = p56_fader(t_all) * p56_region_fader_shr(t_all,i) + p56_fader(t_all) * (1-p56_region_fader_shr(t_all,i)); im_pollutant_prices(t_all,i,pollutants_fader,emis_source)$(s56_ghgprice_fader = 1) = im_pollutant_prices(t_all,i,pollutants_fader,emis_source) * p56_fader_reg(t_all,i); +***apply reduction factor on CO2 price to account for potential negative side effects +***lowers the economic incentive for CO2 emission reduction (avoided deforestation) and afforestation +im_pollutant_prices(t_all,i,"co2_c",emis_source) = im_pollutant_prices(t_all,i,"co2_c",emis_source)*s56_cprice_red_factor; + +** set GHG prices to zero for historic period +im_pollutant_prices(t_all,i,pollutants,emis_source)$(m_year(t_all) <= sm_fix_SSP2) = 0; +** set GHG prices to zero for all future time steps until the year defined by `c56_mute_ghgprices_until` or `s56_fader_start` +im_pollutant_prices(t_all,i,pollutants,emis_source)$(m_year(t_all) > sm_fix_SSP2 AND m_year(t_all) <= max(m_year("%c56_mute_ghgprices_until%"),s56_fader_start*s56_ghgprice_fader)) = 0; +** Exception for C price, which can be set to a minium price for all future time steps until the year defined by `c56_mute_ghgprices_until` or `s56_fader_start` +im_pollutant_prices(t_all,i,"co2_c",emis_source)$(m_year(t_all) > sm_fix_SSP2 AND m_year(t_all) <= max(m_year("%c56_mute_ghgprices_until%"),s56_fader_start*s56_ghgprice_fader)) = s56_minimum_cprice; + +***limit CH4 and N2O GHG prices based on s56_limit_ch4_n2o_price +*12/44 conversion from USD17MER per tC to USD17MER per tCO2 +*28 and 265 Global Warming Potentials from AR5 WG1 CH08 Table 8.7, conversion from USD17MER per tCO2 to USD17MER per tCH4 and USD17MER per tN2O +*44/28 conversion from USD17MER per tN2O to USD17MER per tN +im_pollutant_prices(t_all,i,"ch4",emis_source)$(im_pollutant_prices(t_all,i,"ch4",emis_source) > s56_limit_ch4_n2o_price*12/44*28) = s56_limit_ch4_n2o_price*12/44*28; +im_pollutant_prices(t_all,i,"n2o_n_direct",emis_source)$(im_pollutant_prices(t_all,i,"n2o_n_direct",emis_source) > s56_limit_ch4_n2o_price*12/44*265*44/28) = s56_limit_ch4_n2o_price*12/44*265*44/28; +im_pollutant_prices(t_all,i,"n2o_n_indirect",emis_source)$(im_pollutant_prices(t_all,i,"n2o_n_indirect",emis_source) > s56_limit_ch4_n2o_price*12/44*265*44/28) = s56_limit_ch4_n2o_price*12/44*265*44/28; + ***GHG emission policy im_pollutant_prices(t_all,i,pollutants,emis_source) = im_pollutant_prices(t_all,i,pollutants,emis_source) * f56_emis_policy("%c56_emis_policy%",pollutants,emis_source); ***construct age-class dependent C price for afforestation incentive ***this is needed because time steps (t) and age-classes (ac) can differ. ac and t_all are always in 5-year time steps. *For missing years in t_all use C price of previous time step. This step makes sure that C prices for every 5-year time step are available. -loop(t_all$(m_year(t_all) > m_year("%c56_mute_ghgprices_until%")), +loop(t_all$(m_year(t_all) > max(m_year("%c56_mute_ghgprices_until%"),s56_fader_start*s56_ghgprice_fader)), im_pollutant_prices(t_all,i,"co2_c",emis_source)$(im_pollutant_prices(t_all,i,"co2_c",emis_source) = 0) = im_pollutant_prices(t_all-1,i,"co2_c",emis_source); ); *Linear interpolation of C price for missing time steps @@ -112,4 +112,4 @@ p56_c_price_aff(t_all,i,ac)$(ord(t_all)+ac.off= s56_c_price_exp_aff/5) = sum(ac_exp, p56_c_price_aff(t_all,i,ac_exp)); *zero C price before starting year -p56_c_price_aff(t_all,i,ac)$(m_year(t_all) <= m_year("%c56_mute_ghgprices_until%")) = 0; +p56_c_price_aff(t_all,i,ac)$(m_year(t_all) <= max(m_year("%c56_mute_ghgprices_until%"),s56_fader_start*s56_ghgprice_fader)) = 0; diff --git a/scripts/start/projects/TAUhistfree.R b/scripts/start/projects/TAUhistfree.R index a991634b5..794e16152 100644 --- a/scripts/start/projects/TAUhistfree.R +++ b/scripts/start/projects/TAUhistfree.R @@ -35,7 +35,7 @@ cfg$qos <- "priority" cfg$gms$s80_optfile <- 1 cfg$gms$s80_maxiter <- 30 -# cfg$gms$s32_planing_horizon <- 100 +# cfg$gms$s32_planning_horizon <- 100 # cfg$gms$c35_protect_scenario <- "WDPA" # cfg$gms$c56_emis_policy <- "redd+_nosoil" diff --git a/scripts/start/projects/project_ScenarioMIP.R b/scripts/start/projects/project_ScenarioMIP.R new file mode 100644 index 000000000..722d422bb --- /dev/null +++ b/scripts/start/projects/project_ScenarioMIP.R @@ -0,0 +1,121 @@ +# | (C) 2008-2024 Potsdam Institute for Climate Impact Research (PIK) +# | authors, and contributors see CITATION.cff file. This file is part +# | of MAgPIE and licensed under AGPL-3.0-or-later. Under Section 7 of +# | AGPL-3.0, you are granted additional permissions described in the +# | MAgPIE License Exception, version 1.0 (see LICENSE file). +# | Contact: magpie@pik-potsdam.de + +# ---------------------------------------------------------- +# description: ScenarioMIP runs +# position: 1 +# ---------------------------------------------------------- + +## Load lucode2 and gms to use setScenario later +library(lucode2) +library(gms) + +# Load start_run(cfg) function which is needed to start MAgPIE runs +source("scripts/start_functions.R") + +# Source default cfg. This loads the object "cfg" in R environment +source("config/default.cfg") + +# create additional information to describe the runs +cfg$info$flag <- "SMIP37" + +cfg$results_folder <- "output/:title:" +cfg$force_replace <- TRUE + +# support function to create standardized title +.title <- function(cfg, ...) return(paste(cfg$info$flag, sep="_",...)) + +#download default input data +cfg$input[["report_coupling"]] <- "SMIPv04_report_coupling.tgz" +download_and_update(cfg) + +cfg$gms$c56_pollutant_prices <- "coupling" +cfg$gms$c60_2ndgen_biodem <- "coupling" +cfg$gms$cropland <- "detail_apr24" + +#H-SSP3-NPi2025 +cfg$title <- .title(cfg, "H-SSP3-NPi2025") +cfg <- setScenario(cfg,c("SSP3","NPI","AR-natveg","nocc_hist")) +cfg$gms$c56_mute_ghgprices_until <- "y2150" +cfg$path_to_report_ghgprices <- "input/REMIND_generic_C_SMIPv04-M-SSP3-NPi2025-var-rem-7.mif" +cfg$path_to_report_bioenergy <- "input/REMIND_generic_C_SMIPv04-M-SSP3-NPi2025-var-rem-7.mif" +cfg$gms$s29_treecover_target <- 0 +start_run(cfg, codeCheck = FALSE) + +#H-SSP3-rollBack +cfg$title <- .title(cfg, "H-SSP3-rollBack") +cfg <- setScenario(cfg,c("SSP3","NPI-revert","AR-natveg","nocc_hist")) +cfg$gms$c56_mute_ghgprices_until <- "y2150" +cfg$path_to_report_ghgprices <- "input/REMIND_generic_C_SMIPv04-H-SSP3-rollBack-def-rem-7.mif" +cfg$path_to_report_bioenergy <- "input/REMIND_generic_C_SMIPv04-H-SSP3-rollBack-def-rem-7.mif" +cfg$gms$s29_treecover_target <- 0 +start_run(cfg, codeCheck = FALSE) + +#M-SSP2-NPi2025 +cfg$title <- .title(cfg, "M-SSP2-NPi2025") +cfg <- setScenario(cfg,c("SSP2","NPI","AR-natveg","nocc_hist")) +cfg$gms$c56_mute_ghgprices_until <- "y2150" +cfg$path_to_report_ghgprices <- "input/REMIND_generic_C_SMIPv04-M-SSP2-NPi2025-def-rem-7.mif" +cfg$path_to_report_bioenergy <- "input/REMIND_generic_C_SMIPv04-M-SSP2-NPi2025-def-rem-7.mif" +cfg$gms$s29_treecover_target <- 0 +start_run(cfg, codeCheck = FALSE) + +#ML-SSP2-PkBudg1500 +cfg$title <- .title(cfg, "ML-SSP2-PkBudg1500") +cfg <- setScenario(cfg,c("SSP2","NPI","AR-natveg","nocc_hist")) +cfg$gms$c56_mute_ghgprices_until <- "y2040" +cfg$path_to_report_ghgprices <- "input/REMIND_generic_C_SMIPv04-ML-SSP2-PkBudg1500-def-rem-7.mif" +cfg$path_to_report_bioenergy <- "input/REMIND_generic_C_SMIPv04-ML-SSP2-PkBudg1500-def-rem-7.mif" +cfg$gms$s29_treecover_target <- 0.015 +start_run(cfg, codeCheck = FALSE) + +#L-SSP2-PkBudg1000 +cfg$title <- .title(cfg, "L-SSP2-PkBudg1000") +cfg <- setScenario(cfg,c("SSP2","NDC","AR-natveg","nocc_hist")) +cfg$gms$c56_mute_ghgprices_until <- "y2030" +cfg$path_to_report_ghgprices <- "input/REMIND_generic_C_SMIPv04-L-SSP2-PkBudg1000-def-rem-7.mif" +cfg$path_to_report_bioenergy <- "input/REMIND_generic_C_SMIPv04-L-SSP2-PkBudg1000-def-rem-7.mif" +cfg$gms$s29_treecover_target <- 0.015 +start_run(cfg, codeCheck = FALSE) + +#VLHO-SSP2-EcBudg400 -> default +cfg$title <- .title(cfg, "VLHO-SSP2-EcBudg400") +cfg <- setScenario(cfg,c("SSP2","NDC","AR-plant","nocc_hist")) +cfg$gms$c56_mute_ghgprices_until <- "y2030" +cfg$path_to_report_ghgprices <- "input/REMIND_generic_C_SMIPv04-VLHO-SSP2-EcBudg400-var_plantation-rem-7.mif" +cfg$path_to_report_bioenergy <- "input/REMIND_generic_C_SMIPv04-VLHO-SSP2-EcBudg400-var_plantation-rem-7.mif" +cfg$gms$s29_treecover_target <- 0.03 +start_run(cfg, codeCheck = FALSE) + +#VLHO-SSP2-EcBudg400-plant50 -> var_a +cfg$title <- .title(cfg, "VLHO-SSP2-EcBudg400-plant50") +cfg <- setScenario(cfg,c("SSP2","NDC","AR-plant","nocc_hist")) +cfg$gms$c56_mute_ghgprices_until <- "y2030" +cfg$path_to_report_ghgprices <- "input/REMIND_generic_C_SMIPv04-VLHO-SSP2-EcBudg400-var_plantation-rem-7.mif" +cfg$path_to_report_bioenergy <- "input/REMIND_generic_C_SMIPv04-VLHO-SSP2-EcBudg400-var_plantation-rem-7.mif" +cfg$gms$s29_treecover_target <- 0.03 +cfg$gms$s32_planning_horizon <- 50 +start_run(cfg, codeCheck = FALSE) + +#VLLO-SSP1-PkBudg650 +cfg$title <- .title(cfg, "VLLO-SSP1-PkBudg650") +cfg <- setScenario(cfg,c("VLLO","NDC","AR-natveg","nocc_hist")) +cfg$gms$c56_mute_ghgprices_until <- "y2030" +cfg$path_to_report_ghgprices <- "input/REMIND_generic_C_SMIPv04-VLLO-SSP1-PkBudg650-def-rem-7.mif" +cfg$path_to_report_bioenergy <- "input/REMIND_generic_C_SMIPv04-VLLO-SSP1-PkBudg650-def-rem-7.mif" +cfg$gms$s29_treecover_target <- 0.03 +start_run(cfg, codeCheck = FALSE) + +#VLLO-SSP1-PkBudg650-old -> old version with minimum CO2 price +cfg$title <- .title(cfg, "VLLO-SSP1-PkBudg650-old") +cfg <- setScenario(cfg,c("VLLO","NDC","AR-natveg","nocc_hist")) +cfg$gms$c56_mute_ghgprices_until <- "y2030" +cfg$path_to_report_ghgprices <- "input/REMIND_generic_C_SMIPv04-VLLO-SSP1-PkBudg650-def-rem-7.mif" +cfg$path_to_report_bioenergy <- "input/REMIND_generic_C_SMIPv04-VLLO-SSP1-PkBudg650-def-rem-7.mif" +cfg$gms$s29_treecover_target <- 0.03 +cfg$gms$s56_minimum_cprice <- 18 +start_run(cfg, codeCheck = FALSE)