From 0ee2ea9e167c56b894b9aa03836e4ced5238a1c5 Mon Sep 17 00:00:00 2001 From: florianh Date: Fri, 14 Feb 2025 15:43:33 +0100 Subject: [PATCH 01/25] timber and plant establishment --- modules/32_forestry/dynamic_may24/input.gms | 5 +++-- modules/32_forestry/dynamic_may24/preloop.gms | 6 ++++++ modules/73_timber/default/preloop.gms | 8 ++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index b40d4a4d4f..c7a019e0e6 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -42,13 +42,14 @@ scalars s32_aff_bii_coeff BII coefficent to be used for CO2 price driven afforestation 0=natural vegetation 1=plantation (1) / 0 / s32_max_aff_area_glo Switch for global or regional afforestation constraint (1) / 1 / s32_aff_prot Switch for protection of afforested areas (0=until end of planning horizon 1=forever) / 1 / - s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 2020 / - s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2050 / + s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 1995 / + s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2025 / s32_plant_contr_growth_startvalue Start value for plantation contribution growth fader (percent per year) / 0.05 / s32_plant_contr_growth_endvalue End value for plantation contribution growth fader (percent per year) / 0 / s32_plant_contr_max Maximum plantation contribution for establishment decision (percent) / 0.5 / s32_demand_establishment Boolean switch for establishment demand assumption 1=forward looking 0=static (1) / 1 / s32_npi_ndc_reversal Year in which NPI NDC reversal should take place (1) / Inf / + s32_plant_shr Share of plantations in planted forests (1) / 0.7 / ; parameter f32_aff_mask(j) afforestation mask (binary) diff --git a/modules/32_forestry/dynamic_may24/preloop.gms b/modules/32_forestry/dynamic_may24/preloop.gms index 690484d54d..bcef5702d3 100644 --- a/modules/32_forestry/dynamic_may24/preloop.gms +++ b/modules/32_forestry/dynamic_may24/preloop.gms @@ -161,6 +161,12 @@ elseif s32_initial_distribution = 1, p32_land_start_ac(j,"plant",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * sum(cell(i,j),f32_plantedforest(i))/p32_rotation_cellular_harvesting("y1995",j); p32_land_start_ac(j,"ndc",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * sum(cell(i,j),1- f32_plantedforest(i))/p32_rotation_cellular_harvesting("y1995",j); +elseif s32_initial_distribution = 2, +** Initialize with equal distribution among rotation age classes +** Plantated forest area is divided into ndcs (other planted forest) and plantations + p32_land_start_ac(j,"plant",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * s32_plant_shr/p32_rotation_cellular_harvesting("y1995",j); + p32_land_start_ac(j,"ndc",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * (1-s32_plant_shr)/p32_rotation_cellular_harvesting("y1995",j); + ); ** Redistribute to youngest age class in case the distribution to plantations and diff --git a/modules/73_timber/default/preloop.gms b/modules/73_timber/default/preloop.gms index 5c659fb543..e153144afc 100644 --- a/modules/73_timber/default/preloop.gms +++ b/modules/73_timber/default/preloop.gms @@ -13,7 +13,7 @@ p73_forestry_demand_prod_specific(t_past_forestry,iso,total_wood_products) = f73 ** Loop over time to calculate future demand ** Calculations based on Lauri et al. 2019 -loop(t_all$(m_year(t_all) > 2015 AND m_year(t_all) <= 2150), +loop(t_all$(m_year(t_all) > 2005 AND m_year(t_all) <= 2150), p73_forestry_demand_prod_specific(t_all,iso,total_wood_products)$(im_gdp_pc_ppp_iso(t_all,iso)>0 AND im_pop_iso(t_all,iso)>0) = p73_forestry_demand_prod_specific(t_all-1,iso,total_wood_products) * @@ -29,13 +29,13 @@ p73_timber_demand_gdp_pop(t_all,i,kforestry) = sum((i_to_iso(i,iso),kforestry_to ** Hard additive calibration for timber demand if(s73_timber_demand_switch=1, loop (t_all, - if(m_year(t_all) <= 2015, + if(m_year(t_all) <= 2005, p73_demand_calib(t_all,i,"wood") = f73_regional_timber_demand(t_all,i,"industrial_roundwood") - p73_timber_demand_gdp_pop(t_all,i,"wood"); p73_timber_demand_gdp_pop(t_all,i,"wood") = p73_timber_demand_gdp_pop(t_all,i,"wood") + p73_demand_calib(t_all,i,"wood"); ); ); - loop (t_all$(m_year(t_all) > 2015), + loop (t_all$(m_year(t_all) > 2005), p73_timber_demand_gdp_pop(t_all,i,"wood")$(p73_timber_demand_gdp_pop(t_all,i,"wood") < p73_timber_demand_gdp_pop(t_all-1,i,"wood")) = p73_timber_demand_gdp_pop(t_all-1,i,"wood") * s73_increase_ceiling; p73_timber_demand_gdp_pop(t_all,i,"wood")$(p73_timber_demand_gdp_pop(t_all,i,"wood")/p73_timber_demand_gdp_pop(t_all-1,i,"wood") > s73_increase_ceiling) = p73_timber_demand_gdp_pop(t_all-1,i,"wood") * s73_increase_ceiling; ); @@ -59,7 +59,7 @@ pm_demand_forestry(t_all,i,kforestry) = round(p73_timber_demand_gdp_pop(t_all,i, p73_fraction(t_all) = s73_expansion/(m_year("y2100") - sm_fix_SSP2); ** Populate the fraction for each time step -loop(t_all$(m_year(t_all) > 2015), +loop(t_all$(m_year(t_all) > 2005), p73_fraction(t_all) = s73_expansion/(m_year("y2100") - sm_fix_SSP2) * m_yeardiff(t_all) + p73_fraction(t_all-1); ); From 13bc4396fcefd7779d7e7987f4cf33ab8dfa6bb7 Mon Sep 17 00:00:00 2001 From: florianh Date: Fri, 14 Feb 2025 16:33:20 +0100 Subject: [PATCH 02/25] test --- modules/32_forestry/dynamic_may24/input.gms | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index c7a019e0e6..1e34b76b6b 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -42,8 +42,8 @@ scalars s32_aff_bii_coeff BII coefficent to be used for CO2 price driven afforestation 0=natural vegetation 1=plantation (1) / 0 / s32_max_aff_area_glo Switch for global or regional afforestation constraint (1) / 1 / s32_aff_prot Switch for protection of afforested areas (0=until end of planning horizon 1=forever) / 1 / - s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 1995 / - s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2025 / + s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 2000 / + s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2030 / s32_plant_contr_growth_startvalue Start value for plantation contribution growth fader (percent per year) / 0.05 / s32_plant_contr_growth_endvalue End value for plantation contribution growth fader (percent per year) / 0 / s32_plant_contr_max Maximum plantation contribution for establishment decision (percent) / 0.5 / From ae0404babd12ae9099591a928aaf6d022cce0d3e Mon Sep 17 00:00:00 2001 From: florianh Date: Fri, 14 Feb 2025 16:40:24 +0100 Subject: [PATCH 03/25] test --- modules/32_forestry/dynamic_may24/input.gms | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index 1e34b76b6b..39dfc73971 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -42,8 +42,8 @@ scalars s32_aff_bii_coeff BII coefficent to be used for CO2 price driven afforestation 0=natural vegetation 1=plantation (1) / 0 / s32_max_aff_area_glo Switch for global or regional afforestation constraint (1) / 1 / s32_aff_prot Switch for protection of afforested areas (0=until end of planning horizon 1=forever) / 1 / - s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 2000 / - s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2030 / + s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 2025 / + s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2050 / s32_plant_contr_growth_startvalue Start value for plantation contribution growth fader (percent per year) / 0.05 / s32_plant_contr_growth_endvalue End value for plantation contribution growth fader (percent per year) / 0 / s32_plant_contr_max Maximum plantation contribution for establishment decision (percent) / 0.5 / From ba774ede511616357cd328a8b25d0f3fa9de0673 Mon Sep 17 00:00:00 2001 From: florianh Date: Fri, 14 Feb 2025 16:40:47 +0100 Subject: [PATCH 04/25] test --- modules/32_forestry/dynamic_may24/input.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index 39dfc73971..9f283fe43a 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -31,7 +31,7 @@ scalars 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 / + s32_initial_distribution Switch to Activate ageclass distribution in plantations 0=off 1=equal distribution / 2 / s32_price Price for timber (USD17MER) / 55 / s32_free_land_cost Penalty for technial area balance term (USD17MER per ha) / 1e+06 / s32_max_aff_area Maximum total global afforestation (mio. ha) / Inf / From 0ce65795b14bff0324c035d62a4ac4866bc72ff8 Mon Sep 17 00:00:00 2001 From: florianh Date: Sat, 15 Feb 2025 17:49:36 +0100 Subject: [PATCH 05/25] update --- .../22_land_conservation/area_based_apr22/input.gms | 1 + .../area_based_apr22/presolve.gms | 5 +++++ modules/32_forestry/dynamic_may24/declarations.gms | 1 + modules/32_forestry/dynamic_may24/input.gms | 12 ++++++------ modules/32_forestry/dynamic_may24/preloop.gms | 12 ++++-------- modules/32_forestry/dynamic_may24/presolve.gms | 2 +- 6 files changed, 18 insertions(+), 15 deletions(-) diff --git a/modules/22_land_conservation/area_based_apr22/input.gms b/modules/22_land_conservation/area_based_apr22/input.gms index 646370ba6c..adf2b438e1 100644 --- a/modules/22_land_conservation/area_based_apr22/input.gms +++ b/modules/22_land_conservation/area_based_apr22/input.gms @@ -14,6 +14,7 @@ scalars s22_restore_land If land restoration is allowed (0=no 1=yes) / 1 / s22_conservation_start Land conservation start year / 2025 / s22_conservation_target Land conservation target year / 2050 / +s22_base_protect_reversal Year in which base protection reversal should take place (1) / Inf / ; * Set-switch for countries affected by regional land conservation policy diff --git a/modules/22_land_conservation/area_based_apr22/presolve.gms b/modules/22_land_conservation/area_based_apr22/presolve.gms index 2f0cbbb343..83640d2d43 100644 --- a/modules/22_land_conservation/area_based_apr22/presolve.gms +++ b/modules/22_land_conservation/area_based_apr22/presolve.gms @@ -114,6 +114,11 @@ else * set restoration to zero pm_land_conservation(t,j,land,"restore") = 0; +if (m_year(t) >= s22_base_protect_reversal, + pm_land_conservation(t,j,land,consv_type) = 0; +); + + ); diff --git a/modules/32_forestry/dynamic_may24/declarations.gms b/modules/32_forestry/dynamic_may24/declarations.gms index c0a2b79aed..b2aaf512c3 100644 --- a/modules/32_forestry/dynamic_may24/declarations.gms +++ b/modules/32_forestry/dynamic_may24/declarations.gms @@ -56,6 +56,7 @@ parameters p32_demand_forestry_future(t,i,kforestry) Future forestry demand in current time step (tDM per yr) p32_est_cost(type32) Establishment cost (USD17MER per ha) i32_recurring_cost(type32) Recurring costs (USD17MER per ha) + p32_plantedforest(i) Planted forest (mio. ha) ; positive variables diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index 9f283fe43a..40737b01fe 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -27,11 +27,11 @@ scalars s32_est_cost_plant Establishment cost for plantations (USD17MER per ha) / 2460 / 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_harvesting_cost Harvesting cost (USD17MER per ha) / 2000 / 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 / 2 / + s32_initial_distribution Switch to Activate ageclass distribution in plantations 0=off 1=equal distribution / 1 / s32_price Price for timber (USD17MER) / 55 / s32_free_land_cost Penalty for technial area balance term (USD17MER per ha) / 1e+06 / s32_max_aff_area Maximum total global afforestation (mio. ha) / Inf / @@ -42,14 +42,14 @@ scalars s32_aff_bii_coeff BII coefficent to be used for CO2 price driven afforestation 0=natural vegetation 1=plantation (1) / 0 / s32_max_aff_area_glo Switch for global or regional afforestation constraint (1) / 1 / s32_aff_prot Switch for protection of afforested areas (0=until end of planning horizon 1=forever) / 1 / - s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 2025 / - s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2050 / + s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 1995 / + s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2025 / s32_plant_contr_growth_startvalue Start value for plantation contribution growth fader (percent per year) / 0.05 / s32_plant_contr_growth_endvalue End value for plantation contribution growth fader (percent per year) / 0 / - s32_plant_contr_max Maximum plantation contribution for establishment decision (percent) / 0.5 / + s32_plant_contr_max Maximum plantation contribution for establishment decision (percent) / 1 / s32_demand_establishment Boolean switch for establishment demand assumption 1=forward looking 0=static (1) / 1 / s32_npi_ndc_reversal Year in which NPI NDC reversal should take place (1) / Inf / - s32_plant_shr Share of plantations in planted forests (1) / 0.7 / + s32_min_plant_shr Minimum share of plantations in planted forests (1) / 0.25 / ; parameter f32_aff_mask(j) afforestation mask (binary) diff --git a/modules/32_forestry/dynamic_may24/preloop.gms b/modules/32_forestry/dynamic_may24/preloop.gms index bcef5702d3..f1230c3661 100644 --- a/modules/32_forestry/dynamic_may24/preloop.gms +++ b/modules/32_forestry/dynamic_may24/preloop.gms @@ -158,14 +158,10 @@ if(s32_initial_distribution = 0, elseif s32_initial_distribution = 1, ** Initialize with equal distribution among rotation age classes ** Plantated forest area is divided into ndcs (other planted forest) and plantations - p32_land_start_ac(j,"plant",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * sum(cell(i,j),f32_plantedforest(i))/p32_rotation_cellular_harvesting("y1995",j); - p32_land_start_ac(j,"ndc",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * sum(cell(i,j),1- f32_plantedforest(i))/p32_rotation_cellular_harvesting("y1995",j); - -elseif s32_initial_distribution = 2, -** Initialize with equal distribution among rotation age classes -** Plantated forest area is divided into ndcs (other planted forest) and plantations - p32_land_start_ac(j,"plant",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * s32_plant_shr/p32_rotation_cellular_harvesting("y1995",j); - p32_land_start_ac(j,"ndc",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * (1-s32_plant_shr)/p32_rotation_cellular_harvesting("y1995",j); + p32_plantedforest(i) = f32_plantedforest(i); + p32_plantedforest(i)$(p32_plantedforest(i) < s32_min_plant_shr) = s32_min_plant_shr; + p32_land_start_ac(j,"plant",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * sum(cell(i,j),p32_plantedforest(i))/p32_rotation_cellular_harvesting("y1995",j); + p32_land_start_ac(j,"ndc",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * sum(cell(i,j),1- p32_plantedforest(i))/p32_rotation_cellular_harvesting("y1995",j); ); diff --git a/modules/32_forestry/dynamic_may24/presolve.gms b/modules/32_forestry/dynamic_may24/presolve.gms index f7601068c4..df04eef4ec 100644 --- a/modules/32_forestry/dynamic_may24/presolve.gms +++ b/modules/32_forestry/dynamic_may24/presolve.gms @@ -171,7 +171,7 @@ p32_plant_contr(t,i)$(p32_plant_contr(t,i) > s32_plant_contr_max) = s32_plant_co ** s32_demand_establishment = 1 forward looking (establishment based on future demand according to rotation length) if(s32_demand_establishment = 1, if(m_year(t) <= sm_fix_SSP2, - p32_demand_forestry_future(t,i,kforestry) = sum(t2$(m_year(t2) = sm_fix_SSP2), pm_demand_forestry(t2,i,kforestry)); + p32_demand_forestry_future(t,i,kforestry) = sum(t_ext$(t_ext.pos = t.pos + p32_rotation_regional(t,i)),pm_demand_forestry(t_ext,i,kforestry)); else p32_demand_forestry_future(t,i,kforestry) = sum(t_ext$(t_ext.pos = t.pos + p32_rotation_regional(t,i)),pm_demand_forestry(t_ext,i,kforestry)); ); From 4c19bad4d3dbd5d91040bf81aad68e37944c0ede Mon Sep 17 00:00:00 2001 From: florianh Date: Sun, 16 Feb 2025 07:41:09 +0100 Subject: [PATCH 06/25] test --- modules/35_natveg/pot_forest_may24/presolve.gms | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/35_natveg/pot_forest_may24/presolve.gms b/modules/35_natveg/pot_forest_may24/presolve.gms index 450d4ecbe9..0c67c419b9 100644 --- a/modules/35_natveg/pot_forest_may24/presolve.gms +++ b/modules/35_natveg/pot_forest_may24/presolve.gms @@ -239,7 +239,8 @@ v35_hvarea_other.fx(j,othertype35,ac_est) = 0; v35_secdforest_reduction.fx(j,ac_est) = 0; v35_other_reduction.fx(j,othertype35,ac_est) = 0; -vm_prod_natveg.fx(j,"other","wood") = 0; +*vm_prod_natveg.fx(j,"other","wood") = 0; +vm_prod_natveg.fx(j,land_natveg,"wood") = 0; if(s35_hvarea = 0, v35_hvarea_secdforest.fx(j,ac_sub) = 0; From 81004bea8d1e4932e1b05a3febf874da37eb0805 Mon Sep 17 00:00:00 2001 From: florianh Date: Sun, 16 Feb 2025 08:41:06 +0100 Subject: [PATCH 07/25] test --- modules/35_natveg/pot_forest_may24/presolve.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/35_natveg/pot_forest_may24/presolve.gms b/modules/35_natveg/pot_forest_may24/presolve.gms index 0c67c419b9..1d84b2eb69 100644 --- a/modules/35_natveg/pot_forest_may24/presolve.gms +++ b/modules/35_natveg/pot_forest_may24/presolve.gms @@ -240,7 +240,7 @@ v35_secdforest_reduction.fx(j,ac_est) = 0; v35_other_reduction.fx(j,othertype35,ac_est) = 0; *vm_prod_natveg.fx(j,"other","wood") = 0; -vm_prod_natveg.fx(j,land_natveg,"wood") = 0; +*vm_prod_natveg.fx(j,land_natveg,"wood") = 0; if(s35_hvarea = 0, v35_hvarea_secdforest.fx(j,ac_sub) = 0; From c79a9fe02505f47bd21c4ef2ae34eef675454e77 Mon Sep 17 00:00:00 2001 From: florianh Date: Sun, 16 Feb 2025 10:43:55 +0100 Subject: [PATCH 08/25] bugfix --- config/default.cfg | 2 +- .../35_natveg/pot_forest_may24/equations.gms | 2 +- modules/73_timber/default/declarations.gms | 1 + modules/73_timber/default/preloop.gms | 23 +++++-------------- 4 files changed, 9 insertions(+), 19 deletions(-) diff --git a/config/default.cfg b/config/default.cfg index 3c255d640d..ef8ac9696f 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -1079,7 +1079,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 <- 0 # def = 0 +cfg$gms$s35_forest_damage <- 2 # def = 2 # * If option (2) above: Year by which damage from shifting agriculture has petered out cfg$gms$s35_forest_damage_end <- 2050 #def = 2050 diff --git a/modules/35_natveg/pot_forest_may24/equations.gms b/modules/35_natveg/pot_forest_may24/equations.gms index d8557b65c4..f3893d9f84 100644 --- a/modules/35_natveg/pot_forest_may24/equations.gms +++ b/modules/35_natveg/pot_forest_may24/equations.gms @@ -157,7 +157,7 @@ q35_prod_primforest(j2).. *' Wood production from other landis not allowed. q35_prod_other(j2).. - vm_prod_natveg(j2,"other","woodfuel") + sum(kforestry, vm_prod_natveg(j2,"other",kforestry)) =e= (sum(ac_sub, v35_hvarea_other(j2,"othernat",ac_sub) * sum(ct, pm_timber_yield(ct,j2,ac_sub,"other"))) + sum(ac_sub, v35_hvarea_other(j2,"youngsecdf",ac_sub) * sum(ct, pm_timber_yield(ct,j2,ac_sub,"secdforest")))) diff --git a/modules/73_timber/default/declarations.gms b/modules/73_timber/default/declarations.gms index 3f7a9cdb44..b0fdf3971f 100644 --- a/modules/73_timber/default/declarations.gms +++ b/modules/73_timber/default/declarations.gms @@ -16,6 +16,7 @@ p73_fraction(t_all) Frac p73_demand_constr_wood(t_all,i) Demand for construction wood (mio. tDM per yr) p73_fraction_sm_fix Modifier fraction at sm_fix_SSP2 time step (1) im_timber_prod_cost(kforestry) Cost for producing one unit of wood and woodfuel (USD17MER per tDM) +p73_income_elasticity(t_all,iso,total_wood_products) Income elasticities of wood products (1) ; positive variables diff --git a/modules/73_timber/default/preloop.gms b/modules/73_timber/default/preloop.gms index e153144afc..92a177d795 100644 --- a/modules/73_timber/default/preloop.gms +++ b/modules/73_timber/default/preloop.gms @@ -11,36 +11,25 @@ s73_free_prod_cost$(s73_timber_demand_switch = 0) = s73_timber_prod_cost_wood; ** Set historical values to FAO values p73_forestry_demand_prod_specific(t_past_forestry,iso,total_wood_products) = f73_prod_specific_timber(t_past_forestry,iso,total_wood_products); +p73_income_elasticity(t_all,iso,total_wood_products) = f73_income_elasticity(total_wood_products); +p73_income_elasticity(t_all,iso,total_wood_products)$(im_gdp_pc_ppp_iso(t_all,iso) > 10000) = 0; +p73_income_elasticity(t_all,iso,"wood_fuel") = f73_income_elasticity("wood_fuel"); + ** Loop over time to calculate future demand ** Calculations based on Lauri et al. 2019 -loop(t_all$(m_year(t_all) > 2005 AND m_year(t_all) <= 2150), +loop(t_all$(m_year(t_all) > 1995 AND m_year(t_all) <= 2150), p73_forestry_demand_prod_specific(t_all,iso,total_wood_products)$(im_gdp_pc_ppp_iso(t_all,iso)>0 AND im_pop_iso(t_all,iso)>0) = p73_forestry_demand_prod_specific(t_all-1,iso,total_wood_products) * (im_pop_iso(t_all,iso)/im_pop_iso(t_all-1,iso)) * - ((im_gdp_pc_ppp_iso(t_all,iso)/im_gdp_pc_ppp_iso(t_all-1,iso))**f73_income_elasticity(total_wood_products)) + ((im_gdp_pc_ppp_iso(t_all,iso)/im_gdp_pc_ppp_iso(t_all-1,iso))**p73_income_elasticity(t_all,iso,total_wood_products)) ; ); ** Aggregate from ISO country level to MAgPIE region level p73_timber_demand_gdp_pop(t_all,i,kforestry) = sum((i_to_iso(i,iso),kforestry_to_woodprod(kforestry,total_wood_products)),p73_forestry_demand_prod_specific(t_all,iso,total_wood_products)) * s73_timber_demand_switch ; -** Hard additive calibration for timber demand -if(s73_timber_demand_switch=1, - loop (t_all, - if(m_year(t_all) <= 2005, - p73_demand_calib(t_all,i,"wood") = f73_regional_timber_demand(t_all,i,"industrial_roundwood") - p73_timber_demand_gdp_pop(t_all,i,"wood"); - p73_timber_demand_gdp_pop(t_all,i,"wood") = p73_timber_demand_gdp_pop(t_all,i,"wood") + p73_demand_calib(t_all,i,"wood"); - ); - ); - - loop (t_all$(m_year(t_all) > 2005), - p73_timber_demand_gdp_pop(t_all,i,"wood")$(p73_timber_demand_gdp_pop(t_all,i,"wood") < p73_timber_demand_gdp_pop(t_all-1,i,"wood")) = p73_timber_demand_gdp_pop(t_all-1,i,"wood") * s73_increase_ceiling; - p73_timber_demand_gdp_pop(t_all,i,"wood")$(p73_timber_demand_gdp_pop(t_all,i,"wood")/p73_timber_demand_gdp_pop(t_all-1,i,"wood") > s73_increase_ceiling) = p73_timber_demand_gdp_pop(t_all-1,i,"wood") * s73_increase_ceiling; - ); -); - ** Alternative wood use scenarios $ifthen "%c73_wood_scen%" == "construction" p73_timber_demand_gdp_pop(t_all,i,"wood") = p73_timber_demand_gdp_pop(t_all,i,"wood") * f73_demand_modifier(t_all,"%c73_wood_scen%"); From feca921ba25a21e99a97f380b333db4dca499bfc Mon Sep 17 00:00:00 2001 From: florianh Date: Sun, 16 Feb 2025 11:51:35 +0100 Subject: [PATCH 09/25] update --- modules/32_forestry/dynamic_may24/input.gms | 2 +- modules/73_timber/default/preloop.gms | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index 40737b01fe..91abbf77cc 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -49,7 +49,7 @@ scalars s32_plant_contr_max Maximum plantation contribution for establishment decision (percent) / 1 / s32_demand_establishment Boolean switch for establishment demand assumption 1=forward looking 0=static (1) / 1 / s32_npi_ndc_reversal Year in which NPI NDC reversal should take place (1) / Inf / - s32_min_plant_shr Minimum share of plantations in planted forests (1) / 0.25 / + s32_min_plant_shr Minimum share of plantations in planted forests (1) / 0.2 / ; parameter f32_aff_mask(j) afforestation mask (binary) diff --git a/modules/73_timber/default/preloop.gms b/modules/73_timber/default/preloop.gms index 92a177d795..6ffecce670 100644 --- a/modules/73_timber/default/preloop.gms +++ b/modules/73_timber/default/preloop.gms @@ -30,6 +30,21 @@ loop(t_all$(m_year(t_all) > 1995 AND m_year(t_all) <= 2150), ** Aggregate from ISO country level to MAgPIE region level p73_timber_demand_gdp_pop(t_all,i,kforestry) = sum((i_to_iso(i,iso),kforestry_to_woodprod(kforestry,total_wood_products)),p73_forestry_demand_prod_specific(t_all,iso,total_wood_products)) * s73_timber_demand_switch ; +** Hard additive calibration for timber demand +if(s73_timber_demand_switch=1, + loop (t_all, + if(m_year(t_all) <= 1995, + p73_demand_calib(t_all,i,"wood") = f73_regional_timber_demand(t_all,i,"industrial_roundwood") - p73_timber_demand_gdp_pop(t_all,i,"wood"); + p73_timber_demand_gdp_pop(t_all,i,"wood") = p73_timber_demand_gdp_pop(t_all,i,"wood") + p73_demand_calib(t_all,i,"wood"); + ); + ); + + loop (t_all$(m_year(t_all) > 1995), + p73_timber_demand_gdp_pop(t_all,i,"wood")$(p73_timber_demand_gdp_pop(t_all,i,"wood") < p73_timber_demand_gdp_pop(t_all-1,i,"wood")) = p73_timber_demand_gdp_pop(t_all-1,i,"wood") * s73_increase_ceiling; + p73_timber_demand_gdp_pop(t_all,i,"wood")$(p73_timber_demand_gdp_pop(t_all,i,"wood")/p73_timber_demand_gdp_pop(t_all-1,i,"wood") > s73_increase_ceiling) = p73_timber_demand_gdp_pop(t_all-1,i,"wood") * s73_increase_ceiling; + ); +); + ** Alternative wood use scenarios $ifthen "%c73_wood_scen%" == "construction" p73_timber_demand_gdp_pop(t_all,i,"wood") = p73_timber_demand_gdp_pop(t_all,i,"wood") * f73_demand_modifier(t_all,"%c73_wood_scen%"); From 4b65126843f0e570137d78cd5d021394d4c478b9 Mon Sep 17 00:00:00 2001 From: florianh Date: Sun, 16 Feb 2025 17:23:18 +0100 Subject: [PATCH 10/25] bugfix --- modules/73_timber/default/preloop.gms | 15 --------------- modules/73_timber/default/sets.gms | 4 +--- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/modules/73_timber/default/preloop.gms b/modules/73_timber/default/preloop.gms index 6ffecce670..92a177d795 100644 --- a/modules/73_timber/default/preloop.gms +++ b/modules/73_timber/default/preloop.gms @@ -30,21 +30,6 @@ loop(t_all$(m_year(t_all) > 1995 AND m_year(t_all) <= 2150), ** Aggregate from ISO country level to MAgPIE region level p73_timber_demand_gdp_pop(t_all,i,kforestry) = sum((i_to_iso(i,iso),kforestry_to_woodprod(kforestry,total_wood_products)),p73_forestry_demand_prod_specific(t_all,iso,total_wood_products)) * s73_timber_demand_switch ; -** Hard additive calibration for timber demand -if(s73_timber_demand_switch=1, - loop (t_all, - if(m_year(t_all) <= 1995, - p73_demand_calib(t_all,i,"wood") = f73_regional_timber_demand(t_all,i,"industrial_roundwood") - p73_timber_demand_gdp_pop(t_all,i,"wood"); - p73_timber_demand_gdp_pop(t_all,i,"wood") = p73_timber_demand_gdp_pop(t_all,i,"wood") + p73_demand_calib(t_all,i,"wood"); - ); - ); - - loop (t_all$(m_year(t_all) > 1995), - p73_timber_demand_gdp_pop(t_all,i,"wood")$(p73_timber_demand_gdp_pop(t_all,i,"wood") < p73_timber_demand_gdp_pop(t_all-1,i,"wood")) = p73_timber_demand_gdp_pop(t_all-1,i,"wood") * s73_increase_ceiling; - p73_timber_demand_gdp_pop(t_all,i,"wood")$(p73_timber_demand_gdp_pop(t_all,i,"wood")/p73_timber_demand_gdp_pop(t_all-1,i,"wood") > s73_increase_ceiling) = p73_timber_demand_gdp_pop(t_all-1,i,"wood") * s73_increase_ceiling; - ); -); - ** Alternative wood use scenarios $ifthen "%c73_wood_scen%" == "construction" p73_timber_demand_gdp_pop(t_all,i,"wood") = p73_timber_demand_gdp_pop(t_all,i,"wood") * f73_demand_modifier(t_all,"%c73_wood_scen%"); diff --git a/modules/73_timber/default/sets.gms b/modules/73_timber/default/sets.gms index e9ebb54e23..048d92ebc9 100644 --- a/modules/73_timber/default/sets.gms +++ b/modules/73_timber/default/sets.gms @@ -19,9 +19,7 @@ wood_based_panels,other_sawnwood wood_products(total_wood_products) Major 2nd level products from wood processing / fibreboard,particle_board_and_osb,plywood,veneer_sheets, -wood_pulp, -sawnwood, -other_industrial_roundwood +wood_pulp,sawnwood,other_sawnwood,other_industrial_roundwood / construction_wood(total_wood_products) Wood products used for building construction From 22fc0a44fc9c89007da0516c1e521f69fe79e8bd Mon Sep 17 00:00:00 2001 From: florianh Date: Sun, 16 Feb 2025 22:01:48 +0100 Subject: [PATCH 11/25] update --- modules/32_forestry/dynamic_may24/input.gms | 2 +- modules/73_timber/default/sets.gms | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index 91abbf77cc..3a4c256749 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -43,7 +43,7 @@ scalars s32_max_aff_area_glo Switch for global or regional afforestation constraint (1) / 1 / s32_aff_prot Switch for protection of afforested areas (0=until end of planning horizon 1=forever) / 1 / s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 1995 / - s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2025 / + s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2035 / s32_plant_contr_growth_startvalue Start value for plantation contribution growth fader (percent per year) / 0.05 / s32_plant_contr_growth_endvalue End value for plantation contribution growth fader (percent per year) / 0 / s32_plant_contr_max Maximum plantation contribution for establishment decision (percent) / 1 / diff --git a/modules/73_timber/default/sets.gms b/modules/73_timber/default/sets.gms index 048d92ebc9..eca259a9d5 100644 --- a/modules/73_timber/default/sets.gms +++ b/modules/73_timber/default/sets.gms @@ -34,7 +34,7 @@ fibreboard,particle_board_and_osb,plywood,veneer_sheets kforestry_to_woodprod(kforestry,total_wood_products) Mapping between intermediate and end use wood products / -wood . (fibreboard,particle_board_and_osb,plywood,veneer_sheets,wood_pulp,sawnwood,other_sawnwood,other_industrial_roundwood) +wood . (industrial_roundwood) woodfuel . (wood_fuel) / From d0f6682c29e3014eeb05c59d192ea4c9b7249557 Mon Sep 17 00:00:00 2001 From: florianh Date: Sun, 16 Feb 2025 22:18:06 +0100 Subject: [PATCH 12/25] update --- modules/32_forestry/dynamic_may24/input.gms | 2 +- modules/35_natveg/pot_forest_may24/presolve.gms | 3 --- modules/73_timber/default/input.gms | 2 +- modules/73_timber/default/preloop.gms | 4 ++-- modules/73_timber/default/sets.gms | 4 +++- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index 3a4c256749..e239d069f6 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -27,7 +27,7 @@ scalars s32_est_cost_plant Establishment cost for plantations (USD17MER per ha) / 2460 / 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) / 2000 / + s32_harvesting_cost Harvesting cost (USD17MER per ha) / 2460 / 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 / diff --git a/modules/35_natveg/pot_forest_may24/presolve.gms b/modules/35_natveg/pot_forest_may24/presolve.gms index 1d84b2eb69..95dc31a683 100644 --- a/modules/35_natveg/pot_forest_may24/presolve.gms +++ b/modules/35_natveg/pot_forest_may24/presolve.gms @@ -239,9 +239,6 @@ v35_hvarea_other.fx(j,othertype35,ac_est) = 0; v35_secdforest_reduction.fx(j,ac_est) = 0; v35_other_reduction.fx(j,othertype35,ac_est) = 0; -*vm_prod_natveg.fx(j,"other","wood") = 0; -*vm_prod_natveg.fx(j,land_natveg,"wood") = 0; - if(s35_hvarea = 0, v35_hvarea_secdforest.fx(j,ac_sub) = 0; v35_hvarea_primforest.fx(j) = 0; diff --git a/modules/73_timber/default/input.gms b/modules/73_timber/default/input.gms index 067a518d33..3e6de95c30 100644 --- a/modules/73_timber/default/input.gms +++ b/modules/73_timber/default/input.gms @@ -20,7 +20,7 @@ scalars s73_timber_prod_cost_woodfuel Cost for prodcing one unit of woodfuel (USD17MER per tDM) / 74 / s73_free_prod_cost Very high cost for settling demand without production (USD17MER per tDM) / 1e+06 / s73_timber_demand_switch Logical switch to turn on or off timber demand 1=on 0=off (1) / 1 / - s73_increase_ceiling Limiter for not allowing a demand jump between time steps beyond a certain limit (1) / 1.025 / + s73_income_threshold Threshold for income-elastic industrial roundwood demand (USD17PPP per cap per yr) / 10000 / s73_residue_ratio Proportion of overall industrial roundwood production which ends up as residue during harvest (1) / 0.15 / s73_reisdue_removal_cost Cost of removing residues left after industrial roundwood harvest (USD17MER per tDM) / 2.5 / s73_expansion Construction wood demand expansion factor by end of century based on industrial roundwood demand as base (1=100 percent increase) / 0 / diff --git a/modules/73_timber/default/preloop.gms b/modules/73_timber/default/preloop.gms index 92a177d795..511d13a29e 100644 --- a/modules/73_timber/default/preloop.gms +++ b/modules/73_timber/default/preloop.gms @@ -12,7 +12,7 @@ s73_free_prod_cost$(s73_timber_demand_switch = 0) = s73_timber_prod_cost_wood; p73_forestry_demand_prod_specific(t_past_forestry,iso,total_wood_products) = f73_prod_specific_timber(t_past_forestry,iso,total_wood_products); p73_income_elasticity(t_all,iso,total_wood_products) = f73_income_elasticity(total_wood_products); -p73_income_elasticity(t_all,iso,total_wood_products)$(im_gdp_pc_ppp_iso(t_all,iso) > 10000) = 0; +p73_income_elasticity(t_all,iso,total_wood_products)$(im_gdp_pc_ppp_iso(t_all,iso) > s73_income_threshold) = 0; p73_income_elasticity(t_all,iso,"wood_fuel") = f73_income_elasticity("wood_fuel"); ** Loop over time to calculate future demand @@ -48,7 +48,7 @@ pm_demand_forestry(t_all,i,kforestry) = round(p73_timber_demand_gdp_pop(t_all,i, p73_fraction(t_all) = s73_expansion/(m_year("y2100") - sm_fix_SSP2); ** Populate the fraction for each time step -loop(t_all$(m_year(t_all) > 2005), +loop(t_all$(m_year(t_all) > 1995), p73_fraction(t_all) = s73_expansion/(m_year("y2100") - sm_fix_SSP2) * m_yeardiff(t_all) + p73_fraction(t_all-1); ); diff --git a/modules/73_timber/default/sets.gms b/modules/73_timber/default/sets.gms index eca259a9d5..7b813f63f1 100644 --- a/modules/73_timber/default/sets.gms +++ b/modules/73_timber/default/sets.gms @@ -19,7 +19,9 @@ wood_based_panels,other_sawnwood wood_products(total_wood_products) Major 2nd level products from wood processing / fibreboard,particle_board_and_osb,plywood,veneer_sheets, -wood_pulp,sawnwood,other_sawnwood,other_industrial_roundwood +wood_pulp, +sawnwood, +other_sawnwood / construction_wood(total_wood_products) Wood products used for building construction From 5568fdb0d7b39db13b9e65d63a2a47a3568c451e Mon Sep 17 00:00:00 2001 From: florianh Date: Sun, 16 Feb 2025 22:19:13 +0100 Subject: [PATCH 13/25] update --- modules/73_timber/default/sets.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/73_timber/default/sets.gms b/modules/73_timber/default/sets.gms index 7b813f63f1..0606140918 100644 --- a/modules/73_timber/default/sets.gms +++ b/modules/73_timber/default/sets.gms @@ -21,7 +21,7 @@ wood_products(total_wood_products) Major 2nd level products from wood processin fibreboard,particle_board_and_osb,plywood,veneer_sheets, wood_pulp, sawnwood, -other_sawnwood +other_industrial_roundwood / construction_wood(total_wood_products) Wood products used for building construction From e1d494f07f912572b7dca6d69a0411ba9d931fc8 Mon Sep 17 00:00:00 2001 From: florianh Date: Mon, 17 Feb 2025 06:42:09 +0100 Subject: [PATCH 14/25] update --- config/default.cfg | 2 +- modules/32_forestry/dynamic_may24/input.gms | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/default.cfg b/config/default.cfg index 2366c57f3c..c437ac4786 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -1083,7 +1083,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 diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index e239d069f6..585d2477a6 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -43,7 +43,7 @@ scalars s32_max_aff_area_glo Switch for global or regional afforestation constraint (1) / 1 / s32_aff_prot Switch for protection of afforested areas (0=until end of planning horizon 1=forever) / 1 / s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 1995 / - s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2035 / + s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2030 / s32_plant_contr_growth_startvalue Start value for plantation contribution growth fader (percent per year) / 0.05 / s32_plant_contr_growth_endvalue End value for plantation contribution growth fader (percent per year) / 0 / s32_plant_contr_max Maximum plantation contribution for establishment decision (percent) / 1 / From c6550109996b52a229fee7fed61fe2d632dba4f9 Mon Sep 17 00:00:00 2001 From: florianh Date: Mon, 17 Feb 2025 06:57:23 +0100 Subject: [PATCH 15/25] bugfix --- config/default.cfg | 2 ++ config/scenario_config.csv | 1 + modules/22_land_conservation/area_based_apr22/presolve.gms | 5 ++--- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/config/default.cfg b/config/default.cfg index c437ac4786..3269877960 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -661,6 +661,8 @@ cfg$gms$land_conservation <- "area_based_apr22" # def = area_based_ap cfg$gms$c22_base_protect <- "WDPA" # def = WDPA cfg$gms$c22_base_protect_noselect <- "WDPA" # def = WDPA +cfg$gms$s22_base_protect_reversal <- Inf # def = Inf + # * Additional land conservation target based on conservation priority areas # * during future time steps (after `cfg$gms$sm_fix_SSP2`). # * ("none") No additional land conservation target (Baseline only) diff --git a/config/scenario_config.csv b/config/scenario_config.csv index fe6de340ad..2029c4df95 100755 --- a/config/scenario_config.csv +++ b/config/scenario_config.csv @@ -33,6 +33,7 @@ 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$s22_base_protect_reversal;;;;;;;;;;;;;;;;;;;Inf;Inf;2030;Inf;;;;;;;;;;;;;; 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;;;;;;;;;;;;;;;;;; diff --git a/modules/22_land_conservation/area_based_apr22/presolve.gms b/modules/22_land_conservation/area_based_apr22/presolve.gms index 83640d2d43..2a8bbc5d12 100644 --- a/modules/22_land_conservation/area_based_apr22/presolve.gms +++ b/modules/22_land_conservation/area_based_apr22/presolve.gms @@ -114,11 +114,10 @@ else * set restoration to zero pm_land_conservation(t,j,land,"restore") = 0; -if (m_year(t) >= s22_base_protect_reversal, - pm_land_conservation(t,j,land,consv_type) = 0; ); - +if (m_year(t) >= s22_base_protect_reversal, + pm_land_conservation(t,j,land,consv_type) = 0; ); From 67becc011decf2a90aef73b299ac38feda8ea723 Mon Sep 17 00:00:00 2001 From: florianh Date: Mon, 17 Feb 2025 10:47:27 +0100 Subject: [PATCH 16/25] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 628ad7b4f2..137e187a65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - **60_bioenergy** renamed `s60_bioenergy_gj_price_1st` to `s60_bioenergy_1st_price` and `s60_bioenergy_price_2nd` to `s60_bioenergy_2nd_price` - **default.cfg** default for `s60_bioenergy_1st_subsidy` (formerly `c60_bioenergy_subsidy`) changed from 246 USD17MER per ton to 6.5 USD17MER per GJ based on mean GJ per ton of 1st generation bioenergy products. - **default.cfg** default for `cfg$gms$bioenergy` change from `1stgen_priced_dec18` to `1st2ndgen_priced_feb24` +- **73_timber** revised timber demand calculations +- **35_natveg** revised wood harvest assumptions ### added - **scripts** output script for testing elastic demand From 73fbe7ffff1d3c957011a47c0ff5cee7fd1b0a4a Mon Sep 17 00:00:00 2001 From: florianh Date: Mon, 17 Feb 2025 10:50:49 +0100 Subject: [PATCH 17/25] update --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 137e187a65..ae1969a856 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - **default.cfg** default for `s60_bioenergy_1st_subsidy` (formerly `c60_bioenergy_subsidy`) changed from 246 USD17MER per ton to 6.5 USD17MER per GJ based on mean GJ per ton of 1st generation bioenergy products. - **default.cfg** default for `cfg$gms$bioenergy` change from `1stgen_priced_dec18` to `1st2ndgen_priced_feb24` - **73_timber** revised timber demand calculations +- **32_forestry** revised plantation establishment assumptions - **35_natveg** revised wood harvest assumptions ### added @@ -30,6 +31,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - **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 +- **22_land_conservation** added option for base protection reversal ### removed - **modules/15_food/anthropometrics_jan18** removed as outdated From e0b1c9192eeb1796c7afaa02963063e8991bbaa7 Mon Sep 17 00:00:00 2001 From: florianh Date: Mon, 17 Feb 2025 12:44:10 +0100 Subject: [PATCH 18/25] update --- config/default.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/default.cfg b/config/default.cfg index 3269877960..2401374bb0 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -642,8 +642,7 @@ cfg$gms$s21_trade_tariff_startyear <- 2025 cfg$gms$s21_trade_tariff_targetyear <- 2050 # * Minimum trade margin for forestry products (USD17MER per tDM) -# * (inflated from default originally in USD05 using USD05 --> USD17 inflation rate:1.23) -cfg$gms$s21_min_trade_margin_forestry <- 62 # def = 50 * 1.23 +cfg$gms$s21_min_trade_margin_forestry <- 120 # def = 120 # ***--------------------- 22_land_conservation -------------------------------------- From 0c0334860138c49e6d977f053127d71b653b7fe3 Mon Sep 17 00:00:00 2001 From: florianh Date: Mon, 17 Feb 2025 17:29:07 +0100 Subject: [PATCH 19/25] update defaul.cfg --- config/default.cfg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/default.cfg b/config/default.cfg index 2401374bb0..ab50387b49 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -660,7 +660,8 @@ cfg$gms$land_conservation <- "area_based_apr22" # def = area_based_ap cfg$gms$c22_base_protect <- "WDPA" # def = WDPA cfg$gms$c22_base_protect_noselect <- "WDPA" # def = WDPA -cfg$gms$s22_base_protect_reversal <- Inf # def = Inf +# Year in which Baseline protection reversal should take place (e.g. 2030) +cfg$gms$s22_base_protect_reversal <- Inf # def = Inf (no reversal) # * Additional land conservation target based on conservation priority areas # * during future time steps (after `cfg$gms$sm_fix_SSP2`). From 2c5c067d0fddde1ea021e7df88887d13472b1813 Mon Sep 17 00:00:00 2001 From: florianh Date: Mon, 17 Feb 2025 22:34:26 +0100 Subject: [PATCH 20/25] bugfix --- modules/32_forestry/dynamic_may24/preloop.gms | 11 ++++++----- modules/32_forestry/dynamic_may24/presolve.gms | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/32_forestry/dynamic_may24/preloop.gms b/modules/32_forestry/dynamic_may24/preloop.gms index f1230c3661..ce3f280a06 100644 --- a/modules/32_forestry/dynamic_may24/preloop.gms +++ b/modules/32_forestry/dynamic_may24/preloop.gms @@ -148,18 +148,19 @@ p32_cdr_ac(t,j,ac) = 0; ini32(j,ac) = no; ini32(j,ac) = yes$(ord(ac) >= 1 AND ac.off < p32_rotation_cellular_harvesting("y1995",j)); -** divide initial forestry area by number of age classes within ini32 +** Set minimum share of plantations in planted forest +p32_plantedforest(i) = f32_plantedforest(i); +p32_plantedforest(i)$(p32_plantedforest(i) < s32_min_plant_shr) = s32_min_plant_shr; + ** divide initial forestry area by number of age classes within ini32 if(s32_initial_distribution = 0, ** Initialize with highest age class - p32_land_start_ac(j,"plant","acx") = pcm_land(j,"forestry") * sum(cell(i,j),f32_plantedforest(i)); - p32_land_start_ac(j,"ndc","acx") = pcm_land(j,"forestry") * sum(cell(i,j),1-f32_plantedforest(i)); + p32_land_start_ac(j,"plant","acx") = pcm_land(j,"forestry") * sum(cell(i,j),p32_plantedforest(i)); + p32_land_start_ac(j,"ndc","acx") = pcm_land(j,"forestry") * sum(cell(i,j),1-p32_plantedforest(i)); elseif s32_initial_distribution = 1, ** Initialize with equal distribution among rotation age classes ** Plantated forest area is divided into ndcs (other planted forest) and plantations - p32_plantedforest(i) = f32_plantedforest(i); - p32_plantedforest(i)$(p32_plantedforest(i) < s32_min_plant_shr) = s32_min_plant_shr; p32_land_start_ac(j,"plant",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * sum(cell(i,j),p32_plantedforest(i))/p32_rotation_cellular_harvesting("y1995",j); p32_land_start_ac(j,"ndc",ac)$(ini32(j,ac)) = pm_land_start(j,"forestry") * sum(cell(i,j),1- p32_plantedforest(i))/p32_rotation_cellular_harvesting("y1995",j); diff --git a/modules/32_forestry/dynamic_may24/presolve.gms b/modules/32_forestry/dynamic_may24/presolve.gms index df04eef4ec..f7601068c4 100644 --- a/modules/32_forestry/dynamic_may24/presolve.gms +++ b/modules/32_forestry/dynamic_may24/presolve.gms @@ -171,7 +171,7 @@ p32_plant_contr(t,i)$(p32_plant_contr(t,i) > s32_plant_contr_max) = s32_plant_co ** s32_demand_establishment = 1 forward looking (establishment based on future demand according to rotation length) if(s32_demand_establishment = 1, if(m_year(t) <= sm_fix_SSP2, - p32_demand_forestry_future(t,i,kforestry) = sum(t_ext$(t_ext.pos = t.pos + p32_rotation_regional(t,i)),pm_demand_forestry(t_ext,i,kforestry)); + p32_demand_forestry_future(t,i,kforestry) = sum(t2$(m_year(t2) = sm_fix_SSP2), pm_demand_forestry(t2,i,kforestry)); else p32_demand_forestry_future(t,i,kforestry) = sum(t_ext$(t_ext.pos = t.pos + p32_rotation_regional(t,i)),pm_demand_forestry(t_ext,i,kforestry)); ); From fad9eeb25d1f2d64ecb23c260e8db7913635a0e3 Mon Sep 17 00:00:00 2001 From: florianh Date: Mon, 17 Feb 2025 23:31:26 +0100 Subject: [PATCH 21/25] start script counter --- scripts/start/projects/project_ScenarioMIP.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/start/projects/project_ScenarioMIP.R b/scripts/start/projects/project_ScenarioMIP.R index 722d422bb9..11d8523f0e 100644 --- a/scripts/start/projects/project_ScenarioMIP.R +++ b/scripts/start/projects/project_ScenarioMIP.R @@ -21,7 +21,7 @@ source("scripts/start_functions.R") source("config/default.cfg") # create additional information to describe the runs -cfg$info$flag <- "SMIP37" +cfg$info$flag <- "SMIP43" cfg$results_folder <- "output/:title:" cfg$force_replace <- TRUE From de23481d1e07c9a43246eb6e68e77b36739a7803 Mon Sep 17 00:00:00 2001 From: florianh Date: Tue, 18 Feb 2025 12:56:43 +0100 Subject: [PATCH 22/25] doc update --- modules/35_natveg/pot_forest_may24/equations.gms | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/35_natveg/pot_forest_may24/equations.gms b/modules/35_natveg/pot_forest_may24/equations.gms index f3893d9f84..07d7e62471 100644 --- a/modules/35_natveg/pot_forest_may24/equations.gms +++ b/modules/35_natveg/pot_forest_may24/equations.gms @@ -152,9 +152,8 @@ q35_prod_primforest(j2).. v35_hvarea_primforest(j2) * sum(ct, pm_timber_yield(ct,j2,"acx","primforest")) / m_timestep_length_forestry; ** Other land -*' Wood-fuel production from other land is calculated by multiplying the area under +*' Woody biomass production from other land is calculated by multiplying the area under *' production with corresponding yields of other land, divided by the timestep length. -*' Wood production from other landis not allowed. q35_prod_other(j2).. sum(kforestry, vm_prod_natveg(j2,"other",kforestry)) From 6077f01ce4599ee22ec3a169e29b9d64b8c15a0e Mon Sep 17 00:00:00 2001 From: florianh Date: Thu, 20 Feb 2025 21:40:20 +0100 Subject: [PATCH 23/25] parameter update --- DESCRIPTION | 4 ++-- config/default.cfg | 2 +- modules/21_trade/selfsuff_reduced/input.gms | 2 +- modules/32_forestry/dynamic_may24/input.gms | 6 +++--- modules/35_natveg/pot_forest_may24/input.gms | 2 +- modules/73_timber/default/declarations.gms | 1 - 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7e2b5847ff..b52823fd61 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -21,14 +21,14 @@ Imports: m4fsdp, madrat, magclass (>= 6.14.0), - magpie4 (>= 2.16.7), + magpie4 (>= 2.17.0), MagpieNCGains, magpiesets (>= 0.46.1), mip, mrcommons, patchwork, piamenv (>= 0.5.5), - piamInterfaces (>= 0.40.3), + piamInterfaces (>= 0.45.1), piamutils, quitte, raster, diff --git a/config/default.cfg b/config/default.cfg index ab50387b49..7e2354c4c5 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -642,7 +642,7 @@ cfg$gms$s21_trade_tariff_startyear <- 2025 cfg$gms$s21_trade_tariff_targetyear <- 2050 # * Minimum trade margin for forestry products (USD17MER per tDM) -cfg$gms$s21_min_trade_margin_forestry <- 120 # def = 120 +cfg$gms$s21_min_trade_margin_forestry <- 12300 # def = 12300 # ***--------------------- 22_land_conservation -------------------------------------- diff --git a/modules/21_trade/selfsuff_reduced/input.gms b/modules/21_trade/selfsuff_reduced/input.gms index 3f7f1c3bc8..4d8b877475 100644 --- a/modules/21_trade/selfsuff_reduced/input.gms +++ b/modules/21_trade/selfsuff_reduced/input.gms @@ -16,7 +16,7 @@ sets scalars s21_trade_tariff Trade tariff switch (1=on 0=off) (1) / 1 / s21_cost_import Cost for additional imports to maintain feasibility (USD17MER per tDM) / 12300 / - s21_min_trade_margin_forestry Minimum trade margin for forestry products (USD17MER per tDM) / 62 / + s21_min_trade_margin_forestry Minimum trade margin for forestry products (USD17MER per tDM) / 12300 / ; table f21_trade_bal_reduction(t_all,trade_groups21,trade_regime21) Share of inelastic trade pool (1) diff --git a/modules/32_forestry/dynamic_may24/input.gms b/modules/32_forestry/dynamic_may24/input.gms index 585d2477a6..5a396979cf 100644 --- a/modules/32_forestry/dynamic_may24/input.gms +++ b/modules/32_forestry/dynamic_may24/input.gms @@ -43,13 +43,13 @@ scalars s32_max_aff_area_glo Switch for global or regional afforestation constraint (1) / 1 / s32_aff_prot Switch for protection of afforested areas (0=until end of planning horizon 1=forever) / 1 / s32_plant_contr_growth_startyear Start year for plantation contribution growth fader (year) / 1995 / - s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2030 / - s32_plant_contr_growth_startvalue Start value for plantation contribution growth fader (percent per year) / 0.05 / + s32_plant_contr_growth_endyear End year for plantation contribution growth fader (year) / 2025 / + s32_plant_contr_growth_startvalue Start value for plantation contribution growth fader (percent per year) / 0.07 / s32_plant_contr_growth_endvalue End value for plantation contribution growth fader (percent per year) / 0 / s32_plant_contr_max Maximum plantation contribution for establishment decision (percent) / 1 / s32_demand_establishment Boolean switch for establishment demand assumption 1=forward looking 0=static (1) / 1 / s32_npi_ndc_reversal Year in which NPI NDC reversal should take place (1) / Inf / - s32_min_plant_shr Minimum share of plantations in planted forests (1) / 0.2 / + s32_min_plant_shr Minimum share of plantations in planted forests (1) / 0.05 / ; parameter f32_aff_mask(j) afforestation mask (binary) diff --git a/modules/35_natveg/pot_forest_may24/input.gms b/modules/35_natveg/pot_forest_may24/input.gms index 695e0be671..daae7d951b 100644 --- a/modules/35_natveg/pot_forest_may24/input.gms +++ b/modules/35_natveg/pot_forest_may24/input.gms @@ -20,7 +20,7 @@ s35_hvarea_secdforest annual secdforest harvest rate for s35_hvarea equals 1 (pe s35_hvarea_primforest annual primforest harvest rate for s35_hvarea equals 1 (percent per year) / 0 / s35_hvarea_other annual other land harvest rate for s35_hvarea equals 1 (percent per year) / 0 / s35_timber_harvest_cost_secdforest Cost for harvesting from secondary forest (USD17MER per ha) / 2460/ -s35_timber_harvest_cost_other Cost for harvesting from other land (USD17MER per ha) / 1845 / +s35_timber_harvest_cost_other Cost for harvesting from other land (USD17MER per ha) / 3075 / 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 / diff --git a/modules/73_timber/default/declarations.gms b/modules/73_timber/default/declarations.gms index b0fdf3971f..51d8ed1ddf 100644 --- a/modules/73_timber/default/declarations.gms +++ b/modules/73_timber/default/declarations.gms @@ -9,7 +9,6 @@ parameters p73_timber_demand_gdp_pop(t_all,i,kforestry) Timber demand based on lauri et al 2019 (mio. m3 per yr) p73_forestry_demand_prod_specific(t_all,iso,total_wood_products) End product specific timber demand (mio. m3 per yr) pm_demand_forestry(t_ext,i,kforestry) Extended demand for timber beyound simulation (mio. tDM per yr) -p73_demand_calib(t_all,i,kforestry) Additive calibration for timber demand (mio. m3 per yr) p73_glo_wood(t_all,kforestry) Global wood demand (mio. tDM per yr) p73_demand_modifier(t_all) Simple demand modifier for construction wood (mio. tDM per yr) p73_fraction(t_all) Fraction over which construction wood demand is spread out (1) From f287789fc86afac893678887f1caef09333656d2 Mon Sep 17 00:00:00 2001 From: florianh Date: Thu, 20 Feb 2025 21:42:15 +0100 Subject: [PATCH 24/25] start script counter --- scripts/start/projects/project_ScenarioMIP.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/start/projects/project_ScenarioMIP.R b/scripts/start/projects/project_ScenarioMIP.R index 11d8523f0e..25800a7691 100644 --- a/scripts/start/projects/project_ScenarioMIP.R +++ b/scripts/start/projects/project_ScenarioMIP.R @@ -21,7 +21,7 @@ source("scripts/start_functions.R") source("config/default.cfg") # create additional information to describe the runs -cfg$info$flag <- "SMIP43" +cfg$info$flag <- "SMIP45" cfg$results_folder <- "output/:title:" cfg$force_replace <- TRUE From b776e797d031df18ee39d1f6a1274dba5363307a Mon Sep 17 00:00:00 2001 From: florianh Date: Fri, 21 Feb 2025 13:42:05 +0100 Subject: [PATCH 25/25] reverting unintended change of timber trade cost --- config/default.cfg | 4 ++-- modules/21_trade/selfsuff_reduced/input.gms | 2 +- scripts/start/projects/project_ScenarioMIP.R | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/default.cfg b/config/default.cfg index d5b9fb0c15..fad54c1d5f 100644 --- a/config/default.cfg +++ b/config/default.cfg @@ -642,8 +642,8 @@ cfg$gms$s21_trade_tariff_startyear <- 2025 cfg$gms$s21_trade_tariff_targetyear <- 2050 # * Minimum trade margin for forestry products (USD17MER per tDM) -cfg$gms$s21_min_trade_margin_forestry <- 12300 # def = 12300 - +# * (inflated from default originally in USD05 using USD05 --> USD17 inflation rate:1.23) +cfg$gms$s21_min_trade_margin_forestry <- 62 # def = 50 * 1.23 # ***--------------------- 22_land_conservation -------------------------------------- # * (area_based_apr22): Area-based conservation (baseline and future) diff --git a/modules/21_trade/selfsuff_reduced/input.gms b/modules/21_trade/selfsuff_reduced/input.gms index 4d8b877475..3f7f1c3bc8 100644 --- a/modules/21_trade/selfsuff_reduced/input.gms +++ b/modules/21_trade/selfsuff_reduced/input.gms @@ -16,7 +16,7 @@ sets scalars s21_trade_tariff Trade tariff switch (1=on 0=off) (1) / 1 / s21_cost_import Cost for additional imports to maintain feasibility (USD17MER per tDM) / 12300 / - s21_min_trade_margin_forestry Minimum trade margin for forestry products (USD17MER per tDM) / 12300 / + s21_min_trade_margin_forestry Minimum trade margin for forestry products (USD17MER per tDM) / 62 / ; table f21_trade_bal_reduction(t_all,trade_groups21,trade_regime21) Share of inelastic trade pool (1) diff --git a/scripts/start/projects/project_ScenarioMIP.R b/scripts/start/projects/project_ScenarioMIP.R index 25800a7691..b444476ec0 100644 --- a/scripts/start/projects/project_ScenarioMIP.R +++ b/scripts/start/projects/project_ScenarioMIP.R @@ -21,7 +21,7 @@ source("scripts/start_functions.R") source("config/default.cfg") # create additional information to describe the runs -cfg$info$flag <- "SMIP45" +cfg$info$flag <- "SMIP46" cfg$results_folder <- "output/:title:" cfg$force_replace <- TRUE