From 53a6a1089c672d661113e64aadf56bc0709e8239 Mon Sep 17 00:00:00 2001 From: florianh Date: Tue, 28 Nov 2023 11:28:30 +0100 Subject: [PATCH] update + bugfix --- core/macros.gms | 14 +- .../dynamic_feb21/declarations.gms | 97 +++--- .../32_forestry/dynamic_feb21/equations.gms | 7 +- .../32_forestry/dynamic_feb21/postsolve.gms | 313 +++++++++--------- modules/32_forestry/dynamic_feb21/preloop.gms | 3 - .../32_forestry/dynamic_feb21/presolve.gms | 1 + modules/58_peatland/off/not_used.txt | 6 +- modules/58_peatland/on/not_used.txt | 6 +- modules/58_peatland/v2/declarations.gms | 68 ++-- modules/58_peatland/v2/equations.gms | 87 ++--- modules/58_peatland/v2/not_used.txt | 2 + modules/58_peatland/v2/postsolve.gms | 84 +++-- modules/58_peatland/v2/preloop.gms | 3 + modules/58_peatland/v2/presolve.gms | 17 +- modules/58_peatland/v2/sets.gms | 11 +- 15 files changed, 394 insertions(+), 325 deletions(-) create mode 100644 modules/58_peatland/v2/not_used.txt diff --git a/core/macros.gms b/core/macros.gms index da05ca2379..5f99a88bdc 100644 --- a/core/macros.gms +++ b/core/macros.gms @@ -98,7 +98,13 @@ $macro m_carbon_stock_ac(land,carbon_density,sets,sets_sub) \ sum((&&sets), land(j2,&&sets) * sum(ct, carbon_density(ct,j2,&&sets,ag_pools)))$(sameas(stockType,"actual")) + \ sum((&&sets_sub), land(j2,&&sets_sub) * sum(ct, carbon_density(ct,j2,&&sets_sub,ag_pools)))$(sameas(stockType,"actualNoAcEst")); -* macro for peatland dynamics -$macro m_peatland(peatland,peatland_item,vm_land,pcm_land,land_item,scaling_factor) \ - peatland(j2,peatland_item) + ((vm_land(j2,land_item)-pcm_land(j2,land_item)) * scaling_factor(j2)) * \ - (scaling_factor(j2) * vm_land(j2,land_item) - peatland(j2,peatland_item)) / ((vm_land(j2,land_item) - pcm_land(j2,land_item)) * scaling_factor(j2) + 1e-6) +* macros for peatland scaling factors +* expansion: (maxPeat - totManPeat) / (maxLand - totManLand) +$macro m_peatland_scaling_factor_exp(peatland,pcm_land) \ + ((sum(land58, peatland(j,land58)) - sum(manPeat58, peatland(j,manPeat58))) / (sum(land, pcm_land(j,land)) - sum(manLand58, pcm_land(j,manLand58))) )\ + $(sum(land58, peatland(j,land58)) > 1e-10 AND sum(land, pcm_land(j,land)) > 1e-10)\ + + 0$(sum(land58, peatland(j,land58)) <= 1e-10 OR sum(land, pcm_land(j,land)) <= 1e-10) +* reduction: totManPeat / totManLand +$macro m_peatland_scaling_factor_red(peatland,pcm_land) \ + (sum(manPeat58, peatland(j,manPeat58)) / sum(manLand58, pcm_land(j,manLand58)))$(sum(manPeat58, peatland(j,manPeat58)) > 1e-10 AND sum(manLand58, pcm_land(j,manLand58)) > 1e-10) \ + + 0$(sum(manPeat58, peatland(j,manPeat58)) <= 1e-10 OR sum(manLand58, pcm_land(j,manLand58)) <= 1e-10) diff --git a/modules/32_forestry/dynamic_feb21/declarations.gms b/modules/32_forestry/dynamic_feb21/declarations.gms index 02cfec92c9..54c2438db8 100644 --- a/modules/32_forestry/dynamic_feb21/declarations.gms +++ b/modules/32_forestry/dynamic_feb21/declarations.gms @@ -59,7 +59,6 @@ parameters p32_bii_coeff(type32,bii_class_secd,potnatveg) bii coeff (1) p32_c_density_ac_fast_forestry(t_all,j,ac) Carbon densities in plantations based on Braakhekke et al (tC per ha) p32_disturbance_loss_ftype32(t,j,type32,ac) Loss due to disturbances in all plantation type forests (mio. ha) - pcm_land_forestry(j,type32) Forestry land (mio. ha) ; positive variables @@ -74,12 +73,13 @@ positive variables v32_cost_establishment(i) Cost of establishment calculated at the current time step (mio. USD) v32_hvarea_forestry(j,ac) Harvested area from timber plantations (mio. ha) vm_prod_forestry(j,kforestry) Production of woody biomass from commercial plantations (mio. tDM per yr) - vm_land_forestry(j,type32) Forestry land (mio. ha) - ; + vm_landexpansion_forestry(j,type32) Forestry land expansion (mio. ha) + vm_landreduction_forestry(j,type32) Forestry land reduction (mio. ha) +; variables vm_cdr_aff(j,ac,aff_effect) Expected bgc (CDR) and local bph effects of afforestation depending on planning horizon (mio. tC) - ; +; equations q32_cost_total(i) Total forestry costs constraint (mio. USD) @@ -87,68 +87,71 @@ equations q32_cdr_aff(j,ac) Calculation of CDR from afforestation (mio. tC) q32_carbon(j,ag_pools,stockType) Forestry carbon stock calculation (mio. tC) q32_land_diff Aggregated difference in forestry land compared to previous timestep (mio. ha) - q32_max_aff Maximum total global afforestation (mio. ha) + 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_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) q32_establishment_dynamic(i) Establishment in current time step for future demand (mio. ha) - q32_establishment_dynamic_yield(i) Regional timber yield (tDM per ha) + q32_establishment_dynamic_yield(i) Regional timber yield (tDM per ha) q32_establishment_fixed(j) Establishment in current time step for future demand (mio. ha) q32_land_expansion(j,type32,ac) Land expansion (mio. ha) q32_land_reduction(j,type32,ac) Land contraction (mio. ha) q32_cost_establishment(i) Present value of cost of establishment (mio. USD) q32_bgp_aff(j,ac) Biophysical afforestation calculation (mio. tCeq) q32_forestry_est(j,type32,ac) Distribution of forestry establishment over ac_est (mio. ha) - q32_cost_hvarea(i) Cost of harvesting timber from forests (mio. USD per yr) - q32_prod_forestry(j) Production of woody biomass from commercial plantations (mio. tDM per yr) + q32_cost_hvarea(i) Cost of harvesting timber from forests (mio. USD per yr) + q32_prod_forestry(j) Production of woody biomass from commercial plantations (mio. tDM per yr) q32_bv_aff(j,potnatveg) Biodiversity value for aff forestry land (Mha) q32_bv_ndc(j,potnatveg) Biodiversity value for ndc forestry land (Mha) q32_bv_plant(j,potnatveg) Biodiversity value for plantations (Mha) - q32_land_forestry(j,type32) Forestry land (Mha) + q32_land_expansion_forestry(j,type32) Forestry land expansion (mio. ha) + q32_land_reduction_forestry(j,type32) Forestry land reduction (mio. ha) ; *#################### R SECTION START (OUTPUT DECLARATIONS) #################### parameters - ov_cost_fore(t,i,type) Forestry costs (Mio USD) - ov32_cost_hvarea(t,i,type) Cost of harvesting timber from forests (mio. USD per yr) - ov32_land(t,j,type32,ac,type) Forestry land pools (mio. ha) - ov32_land_missing(t,j,type) Forestry land which can be used at extrmemly high costs in case not enough area is available for new establishment (mio. ha) - ov_landdiff_forestry(t,type) Aggregated difference in forestry land compared to previous timestep (mio. ha) - ov32_cost_recur(t,i,type) Recurring forest management costs (USD per ha) - ov32_land_expansion(t,j,type32,ac,type) Forestry land expansion (mio. ha) - ov32_land_reduction(t,j,type32,ac,type) Forestry land reduction (mio. ha) - ov32_cost_establishment(t,i,type) Cost of establishment calculated at the current time step (mio. USD) - ov32_hvarea_forestry(t,j,ac,type) Harvested area from timber plantations (mio. ha) - ov_prod_forestry(t,j,kforestry,type) Production of woody biomass from commercial plantations (mio. tDM per yr) - ov_land_forestry(t,j,type32,type) Forestry land (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) - oq32_cdr_aff(t,j,ac,type) Calculation of CDR from afforestation (mio. tC) - oq32_carbon(t,j,ag_pools,stockType,type) Forestry carbon stock calculation (mio. tC) - oq32_land_diff(t,type) Aggregated difference in forestry land compared to previous timestep (mio. ha) - 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_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) - oq32_establishment_dynamic(t,i,type) Establishment in current time step for future demand (mio. ha) - oq32_establishment_dynamic_yield(t,i,type) Regional timber yield (tDM per ha) - oq32_establishment_fixed(t,j,type) Establishment in current time step for future demand (mio. ha) - oq32_land_expansion(t,j,type32,ac,type) Land expansion (mio. ha) - oq32_land_reduction(t,j,type32,ac,type) Land contraction (mio. ha) - oq32_cost_establishment(t,i,type) Present value of cost of establishment (mio. USD) - oq32_bgp_aff(t,j,ac,type) Biophysical afforestation calculation (mio. tCeq) - oq32_forestry_est(t,j,type32,ac,type) Distribution of forestry establishment over ac_est (mio. ha) - oq32_cost_hvarea(t,i,type) Cost of harvesting timber from forests (mio. USD per yr) - oq32_prod_forestry(t,j,type) Production of woody biomass from commercial plantations (mio. tDM per yr) - oq32_bv_aff(t,j,potnatveg,type) Biodiversity value for aff forestry land (Mha) - oq32_bv_ndc(t,j,potnatveg,type) Biodiversity value for ndc forestry land (Mha) - oq32_bv_plant(t,j,potnatveg,type) Biodiversity value for plantations (Mha) - oq32_land_forestry(t,j,type32,type) Forestry land (Mha) + ov_cost_fore(t,i,type) Forestry costs (Mio USD) + ov32_cost_hvarea(t,i,type) Cost of harvesting timber from forests (mio. USD per yr) + ov32_land(t,j,type32,ac,type) Forestry land pools (mio. ha) + ov32_land_missing(t,j,type) Forestry land which can be used at extrmemly high costs in case not enough area is available for new establishment (mio. ha) + ov_landdiff_forestry(t,type) Aggregated difference in forestry land compared to previous timestep (mio. ha) + ov32_cost_recur(t,i,type) Recurring forest management costs (USD per ha) + ov32_land_expansion(t,j,type32,ac,type) Forestry land expansion (mio. ha) + ov32_land_reduction(t,j,type32,ac,type) Forestry land reduction (mio. ha) + ov32_cost_establishment(t,i,type) Cost of establishment calculated at the current time step (mio. USD) + ov32_hvarea_forestry(t,j,ac,type) Harvested area from timber plantations (mio. ha) + ov_prod_forestry(t,j,kforestry,type) Production of woody biomass from commercial plantations (mio. tDM per yr) + ov_landexpansion_forestry(t,j,type32,type) Forestry land expansion (mio. ha) + ov_landreduction_forestry(t,j,type32,type) Forestry land reduction (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) + oq32_cdr_aff(t,j,ac,type) Calculation of CDR from afforestation (mio. tC) + oq32_carbon(t,j,ag_pools,stockType,type) Forestry carbon stock calculation (mio. tC) + oq32_land_diff(t,type) Aggregated difference in forestry land compared to previous timestep (mio. ha) + 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_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) + oq32_establishment_dynamic(t,i,type) Establishment in current time step for future demand (mio. ha) + oq32_establishment_dynamic_yield(t,i,type) Regional timber yield (tDM per ha) + oq32_establishment_fixed(t,j,type) Establishment in current time step for future demand (mio. ha) + oq32_land_expansion(t,j,type32,ac,type) Land expansion (mio. ha) + oq32_land_reduction(t,j,type32,ac,type) Land contraction (mio. ha) + oq32_cost_establishment(t,i,type) Present value of cost of establishment (mio. USD) + oq32_bgp_aff(t,j,ac,type) Biophysical afforestation calculation (mio. tCeq) + oq32_forestry_est(t,j,type32,ac,type) Distribution of forestry establishment over ac_est (mio. ha) + oq32_cost_hvarea(t,i,type) Cost of harvesting timber from forests (mio. USD per yr) + oq32_prod_forestry(t,j,type) Production of woody biomass from commercial plantations (mio. tDM per yr) + oq32_bv_aff(t,j,potnatveg,type) Biodiversity value for aff forestry land (Mha) + oq32_bv_ndc(t,j,potnatveg,type) Biodiversity value for ndc forestry land (Mha) + oq32_bv_plant(t,j,potnatveg,type) Biodiversity value for plantations (Mha) + oq32_land_expansion_forestry(t,j,type32,type) Forestry land expansion (mio. ha) + oq32_land_reduction_forestry(t,j,type32,type) Forestry land reduction (mio. ha) ; *##################### R SECTION END (OUTPUT DECLARATIONS) ##################### diff --git a/modules/32_forestry/dynamic_feb21/equations.gms b/modules/32_forestry/dynamic_feb21/equations.gms index 08a5a60016..aee0554c37 100644 --- a/modules/32_forestry/dynamic_feb21/equations.gms +++ b/modules/32_forestry/dynamic_feb21/equations.gms @@ -56,8 +56,11 @@ sum(ac_est, v32_land(j2,"aff",ac_est)) =l= sum(ac, v32_land(j2,"aff",ac)) - sum( q32_land(j2) .. vm_land(j2,"forestry") =e= sum((type32,ac), v32_land(j2,type32,ac)); - q32_land_forestry(j2,type32) .. - vm_land_forestry(j2,type32) =e= sum(ac, v32_land(j2,type32,ac)); + q32_land_expansion_forestry(j2,type32) .. + vm_landexpansion_forestry(j2,type32) =e= sum(ac_est, v32_land_expansion(j2,type32,ac_est)); + + q32_land_reduction_forestry(j2,type32) .. + vm_landreduction_forestry(j2,type32) =e= sum(ac_sub, v32_land_reduction(j2,type32,ac_sub)); *' The constraint `q32_aff_pol` accounts for the exogenous afforestation prescribed by NPI/NDC policies. diff --git a/modules/32_forestry/dynamic_feb21/postsolve.gms b/modules/32_forestry/dynamic_feb21/postsolve.gms index 71a9bd11c6..20733b8320 100644 --- a/modules/32_forestry/dynamic_feb21/postsolve.gms +++ b/modules/32_forestry/dynamic_feb21/postsolve.gms @@ -7,160 +7,167 @@ *' @code *' Exchange land information after optimization p32_land(t,j,type32,ac) = v32_land.l(j,type32,ac); -pcm_land_forestry(j,type32) = vm_land_forestry.l(j,type32); *' @stop *#################### R SECTION START (OUTPUT DEFINITIONS) ##################### - ov_cost_fore(t,i,"marginal") = vm_cost_fore.m(i); - ov32_cost_hvarea(t,i,"marginal") = v32_cost_hvarea.m(i); - ov32_land(t,j,type32,ac,"marginal") = v32_land.m(j,type32,ac); - ov32_land_missing(t,j,"marginal") = v32_land_missing.m(j); - ov_landdiff_forestry(t,"marginal") = vm_landdiff_forestry.m; - ov32_cost_recur(t,i,"marginal") = v32_cost_recur.m(i); - ov32_land_expansion(t,j,type32,ac,"marginal") = v32_land_expansion.m(j,type32,ac); - ov32_land_reduction(t,j,type32,ac,"marginal") = v32_land_reduction.m(j,type32,ac); - ov32_cost_establishment(t,i,"marginal") = v32_cost_establishment.m(i); - ov32_hvarea_forestry(t,j,ac,"marginal") = v32_hvarea_forestry.m(j,ac); - ov_prod_forestry(t,j,kforestry,"marginal") = vm_prod_forestry.m(j,kforestry); - ov_land_forestry(t,j,type32,"marginal") = vm_land_forestry.m(j,type32); - 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); - oq32_cdr_aff(t,j,ac,"marginal") = q32_cdr_aff.m(j,ac); - oq32_carbon(t,j,ag_pools,stockType,"marginal") = q32_carbon.m(j,ag_pools,stockType); - oq32_land_diff(t,"marginal") = q32_land_diff.m; - 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_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); - oq32_establishment_dynamic(t,i,"marginal") = q32_establishment_dynamic.m(i); - oq32_establishment_dynamic_yield(t,i,"marginal") = q32_establishment_dynamic_yield.m(i); - oq32_establishment_fixed(t,j,"marginal") = q32_establishment_fixed.m(j); - oq32_land_expansion(t,j,type32,ac,"marginal") = q32_land_expansion.m(j,type32,ac); - oq32_land_reduction(t,j,type32,ac,"marginal") = q32_land_reduction.m(j,type32,ac); - oq32_cost_establishment(t,i,"marginal") = q32_cost_establishment.m(i); - oq32_bgp_aff(t,j,ac,"marginal") = q32_bgp_aff.m(j,ac); - oq32_forestry_est(t,j,type32,ac,"marginal") = q32_forestry_est.m(j,type32,ac); - oq32_cost_hvarea(t,i,"marginal") = q32_cost_hvarea.m(i); - oq32_prod_forestry(t,j,"marginal") = q32_prod_forestry.m(j); - oq32_bv_aff(t,j,potnatveg,"marginal") = q32_bv_aff.m(j,potnatveg); - oq32_bv_ndc(t,j,potnatveg,"marginal") = q32_bv_ndc.m(j,potnatveg); - oq32_bv_plant(t,j,potnatveg,"marginal") = q32_bv_plant.m(j,potnatveg); - oq32_land_forestry(t,j,type32,"marginal") = q32_land_forestry.m(j,type32); - ov_cost_fore(t,i,"level") = vm_cost_fore.l(i); - ov32_cost_hvarea(t,i,"level") = v32_cost_hvarea.l(i); - ov32_land(t,j,type32,ac,"level") = v32_land.l(j,type32,ac); - ov32_land_missing(t,j,"level") = v32_land_missing.l(j); - ov_landdiff_forestry(t,"level") = vm_landdiff_forestry.l; - ov32_cost_recur(t,i,"level") = v32_cost_recur.l(i); - ov32_land_expansion(t,j,type32,ac,"level") = v32_land_expansion.l(j,type32,ac); - ov32_land_reduction(t,j,type32,ac,"level") = v32_land_reduction.l(j,type32,ac); - ov32_cost_establishment(t,i,"level") = v32_cost_establishment.l(i); - ov32_hvarea_forestry(t,j,ac,"level") = v32_hvarea_forestry.l(j,ac); - ov_prod_forestry(t,j,kforestry,"level") = vm_prod_forestry.l(j,kforestry); - ov_land_forestry(t,j,type32,"level") = vm_land_forestry.l(j,type32); - 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); - oq32_cdr_aff(t,j,ac,"level") = q32_cdr_aff.l(j,ac); - oq32_carbon(t,j,ag_pools,stockType,"level") = q32_carbon.l(j,ag_pools,stockType); - oq32_land_diff(t,"level") = q32_land_diff.l; - 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_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); - oq32_establishment_dynamic(t,i,"level") = q32_establishment_dynamic.l(i); - oq32_establishment_dynamic_yield(t,i,"level") = q32_establishment_dynamic_yield.l(i); - oq32_establishment_fixed(t,j,"level") = q32_establishment_fixed.l(j); - oq32_land_expansion(t,j,type32,ac,"level") = q32_land_expansion.l(j,type32,ac); - oq32_land_reduction(t,j,type32,ac,"level") = q32_land_reduction.l(j,type32,ac); - oq32_cost_establishment(t,i,"level") = q32_cost_establishment.l(i); - oq32_bgp_aff(t,j,ac,"level") = q32_bgp_aff.l(j,ac); - oq32_forestry_est(t,j,type32,ac,"level") = q32_forestry_est.l(j,type32,ac); - oq32_cost_hvarea(t,i,"level") = q32_cost_hvarea.l(i); - oq32_prod_forestry(t,j,"level") = q32_prod_forestry.l(j); - oq32_bv_aff(t,j,potnatveg,"level") = q32_bv_aff.l(j,potnatveg); - oq32_bv_ndc(t,j,potnatveg,"level") = q32_bv_ndc.l(j,potnatveg); - oq32_bv_plant(t,j,potnatveg,"level") = q32_bv_plant.l(j,potnatveg); - oq32_land_forestry(t,j,type32,"level") = q32_land_forestry.l(j,type32); - ov_cost_fore(t,i,"upper") = vm_cost_fore.up(i); - ov32_cost_hvarea(t,i,"upper") = v32_cost_hvarea.up(i); - ov32_land(t,j,type32,ac,"upper") = v32_land.up(j,type32,ac); - ov32_land_missing(t,j,"upper") = v32_land_missing.up(j); - ov_landdiff_forestry(t,"upper") = vm_landdiff_forestry.up; - ov32_cost_recur(t,i,"upper") = v32_cost_recur.up(i); - ov32_land_expansion(t,j,type32,ac,"upper") = v32_land_expansion.up(j,type32,ac); - ov32_land_reduction(t,j,type32,ac,"upper") = v32_land_reduction.up(j,type32,ac); - ov32_cost_establishment(t,i,"upper") = v32_cost_establishment.up(i); - ov32_hvarea_forestry(t,j,ac,"upper") = v32_hvarea_forestry.up(j,ac); - ov_prod_forestry(t,j,kforestry,"upper") = vm_prod_forestry.up(j,kforestry); - ov_land_forestry(t,j,type32,"upper") = vm_land_forestry.up(j,type32); - 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); - oq32_cdr_aff(t,j,ac,"upper") = q32_cdr_aff.up(j,ac); - oq32_carbon(t,j,ag_pools,stockType,"upper") = q32_carbon.up(j,ag_pools,stockType); - oq32_land_diff(t,"upper") = q32_land_diff.up; - 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_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); - oq32_establishment_dynamic(t,i,"upper") = q32_establishment_dynamic.up(i); - oq32_establishment_dynamic_yield(t,i,"upper") = q32_establishment_dynamic_yield.up(i); - oq32_establishment_fixed(t,j,"upper") = q32_establishment_fixed.up(j); - oq32_land_expansion(t,j,type32,ac,"upper") = q32_land_expansion.up(j,type32,ac); - oq32_land_reduction(t,j,type32,ac,"upper") = q32_land_reduction.up(j,type32,ac); - oq32_cost_establishment(t,i,"upper") = q32_cost_establishment.up(i); - oq32_bgp_aff(t,j,ac,"upper") = q32_bgp_aff.up(j,ac); - oq32_forestry_est(t,j,type32,ac,"upper") = q32_forestry_est.up(j,type32,ac); - oq32_cost_hvarea(t,i,"upper") = q32_cost_hvarea.up(i); - oq32_prod_forestry(t,j,"upper") = q32_prod_forestry.up(j); - oq32_bv_aff(t,j,potnatveg,"upper") = q32_bv_aff.up(j,potnatveg); - oq32_bv_ndc(t,j,potnatveg,"upper") = q32_bv_ndc.up(j,potnatveg); - oq32_bv_plant(t,j,potnatveg,"upper") = q32_bv_plant.up(j,potnatveg); - oq32_land_forestry(t,j,type32,"upper") = q32_land_forestry.up(j,type32); - ov_cost_fore(t,i,"lower") = vm_cost_fore.lo(i); - ov32_cost_hvarea(t,i,"lower") = v32_cost_hvarea.lo(i); - ov32_land(t,j,type32,ac,"lower") = v32_land.lo(j,type32,ac); - ov32_land_missing(t,j,"lower") = v32_land_missing.lo(j); - ov_landdiff_forestry(t,"lower") = vm_landdiff_forestry.lo; - ov32_cost_recur(t,i,"lower") = v32_cost_recur.lo(i); - ov32_land_expansion(t,j,type32,ac,"lower") = v32_land_expansion.lo(j,type32,ac); - ov32_land_reduction(t,j,type32,ac,"lower") = v32_land_reduction.lo(j,type32,ac); - ov32_cost_establishment(t,i,"lower") = v32_cost_establishment.lo(i); - ov32_hvarea_forestry(t,j,ac,"lower") = v32_hvarea_forestry.lo(j,ac); - ov_prod_forestry(t,j,kforestry,"lower") = vm_prod_forestry.lo(j,kforestry); - ov_land_forestry(t,j,type32,"lower") = vm_land_forestry.lo(j,type32); - 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); - oq32_cdr_aff(t,j,ac,"lower") = q32_cdr_aff.lo(j,ac); - oq32_carbon(t,j,ag_pools,stockType,"lower") = q32_carbon.lo(j,ag_pools,stockType); - oq32_land_diff(t,"lower") = q32_land_diff.lo; - 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_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); - oq32_establishment_dynamic(t,i,"lower") = q32_establishment_dynamic.lo(i); - oq32_establishment_dynamic_yield(t,i,"lower") = q32_establishment_dynamic_yield.lo(i); - oq32_establishment_fixed(t,j,"lower") = q32_establishment_fixed.lo(j); - oq32_land_expansion(t,j,type32,ac,"lower") = q32_land_expansion.lo(j,type32,ac); - oq32_land_reduction(t,j,type32,ac,"lower") = q32_land_reduction.lo(j,type32,ac); - oq32_cost_establishment(t,i,"lower") = q32_cost_establishment.lo(i); - oq32_bgp_aff(t,j,ac,"lower") = q32_bgp_aff.lo(j,ac); - oq32_forestry_est(t,j,type32,ac,"lower") = q32_forestry_est.lo(j,type32,ac); - oq32_cost_hvarea(t,i,"lower") = q32_cost_hvarea.lo(i); - oq32_prod_forestry(t,j,"lower") = q32_prod_forestry.lo(j); - oq32_bv_aff(t,j,potnatveg,"lower") = q32_bv_aff.lo(j,potnatveg); - oq32_bv_ndc(t,j,potnatveg,"lower") = q32_bv_ndc.lo(j,potnatveg); - oq32_bv_plant(t,j,potnatveg,"lower") = q32_bv_plant.lo(j,potnatveg); - oq32_land_forestry(t,j,type32,"lower") = q32_land_forestry.lo(j,type32); + ov_cost_fore(t,i,"marginal") = vm_cost_fore.m(i); + ov32_cost_hvarea(t,i,"marginal") = v32_cost_hvarea.m(i); + ov32_land(t,j,type32,ac,"marginal") = v32_land.m(j,type32,ac); + ov32_land_missing(t,j,"marginal") = v32_land_missing.m(j); + ov_landdiff_forestry(t,"marginal") = vm_landdiff_forestry.m; + ov32_cost_recur(t,i,"marginal") = v32_cost_recur.m(i); + ov32_land_expansion(t,j,type32,ac,"marginal") = v32_land_expansion.m(j,type32,ac); + ov32_land_reduction(t,j,type32,ac,"marginal") = v32_land_reduction.m(j,type32,ac); + ov32_cost_establishment(t,i,"marginal") = v32_cost_establishment.m(i); + ov32_hvarea_forestry(t,j,ac,"marginal") = v32_hvarea_forestry.m(j,ac); + ov_prod_forestry(t,j,kforestry,"marginal") = vm_prod_forestry.m(j,kforestry); + ov_landexpansion_forestry(t,j,type32,"marginal") = vm_landexpansion_forestry.m(j,type32); + ov_landreduction_forestry(t,j,type32,"marginal") = vm_landreduction_forestry.m(j,type32); + 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); + oq32_cdr_aff(t,j,ac,"marginal") = q32_cdr_aff.m(j,ac); + oq32_carbon(t,j,ag_pools,stockType,"marginal") = q32_carbon.m(j,ag_pools,stockType); + oq32_land_diff(t,"marginal") = q32_land_diff.m; + 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_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); + oq32_establishment_dynamic(t,i,"marginal") = q32_establishment_dynamic.m(i); + oq32_establishment_dynamic_yield(t,i,"marginal") = q32_establishment_dynamic_yield.m(i); + oq32_establishment_fixed(t,j,"marginal") = q32_establishment_fixed.m(j); + oq32_land_expansion(t,j,type32,ac,"marginal") = q32_land_expansion.m(j,type32,ac); + oq32_land_reduction(t,j,type32,ac,"marginal") = q32_land_reduction.m(j,type32,ac); + oq32_cost_establishment(t,i,"marginal") = q32_cost_establishment.m(i); + oq32_bgp_aff(t,j,ac,"marginal") = q32_bgp_aff.m(j,ac); + oq32_forestry_est(t,j,type32,ac,"marginal") = q32_forestry_est.m(j,type32,ac); + oq32_cost_hvarea(t,i,"marginal") = q32_cost_hvarea.m(i); + oq32_prod_forestry(t,j,"marginal") = q32_prod_forestry.m(j); + oq32_bv_aff(t,j,potnatveg,"marginal") = q32_bv_aff.m(j,potnatveg); + oq32_bv_ndc(t,j,potnatveg,"marginal") = q32_bv_ndc.m(j,potnatveg); + oq32_bv_plant(t,j,potnatveg,"marginal") = q32_bv_plant.m(j,potnatveg); + oq32_land_expansion_forestry(t,j,type32,"marginal") = q32_land_expansion_forestry.m(j,type32); + oq32_land_reduction_forestry(t,j,type32,"marginal") = q32_land_reduction_forestry.m(j,type32); + ov_cost_fore(t,i,"level") = vm_cost_fore.l(i); + ov32_cost_hvarea(t,i,"level") = v32_cost_hvarea.l(i); + ov32_land(t,j,type32,ac,"level") = v32_land.l(j,type32,ac); + ov32_land_missing(t,j,"level") = v32_land_missing.l(j); + ov_landdiff_forestry(t,"level") = vm_landdiff_forestry.l; + ov32_cost_recur(t,i,"level") = v32_cost_recur.l(i); + ov32_land_expansion(t,j,type32,ac,"level") = v32_land_expansion.l(j,type32,ac); + ov32_land_reduction(t,j,type32,ac,"level") = v32_land_reduction.l(j,type32,ac); + ov32_cost_establishment(t,i,"level") = v32_cost_establishment.l(i); + ov32_hvarea_forestry(t,j,ac,"level") = v32_hvarea_forestry.l(j,ac); + ov_prod_forestry(t,j,kforestry,"level") = vm_prod_forestry.l(j,kforestry); + ov_landexpansion_forestry(t,j,type32,"level") = vm_landexpansion_forestry.l(j,type32); + ov_landreduction_forestry(t,j,type32,"level") = vm_landreduction_forestry.l(j,type32); + 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); + oq32_cdr_aff(t,j,ac,"level") = q32_cdr_aff.l(j,ac); + oq32_carbon(t,j,ag_pools,stockType,"level") = q32_carbon.l(j,ag_pools,stockType); + oq32_land_diff(t,"level") = q32_land_diff.l; + 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_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); + oq32_establishment_dynamic(t,i,"level") = q32_establishment_dynamic.l(i); + oq32_establishment_dynamic_yield(t,i,"level") = q32_establishment_dynamic_yield.l(i); + oq32_establishment_fixed(t,j,"level") = q32_establishment_fixed.l(j); + oq32_land_expansion(t,j,type32,ac,"level") = q32_land_expansion.l(j,type32,ac); + oq32_land_reduction(t,j,type32,ac,"level") = q32_land_reduction.l(j,type32,ac); + oq32_cost_establishment(t,i,"level") = q32_cost_establishment.l(i); + oq32_bgp_aff(t,j,ac,"level") = q32_bgp_aff.l(j,ac); + oq32_forestry_est(t,j,type32,ac,"level") = q32_forestry_est.l(j,type32,ac); + oq32_cost_hvarea(t,i,"level") = q32_cost_hvarea.l(i); + oq32_prod_forestry(t,j,"level") = q32_prod_forestry.l(j); + oq32_bv_aff(t,j,potnatveg,"level") = q32_bv_aff.l(j,potnatveg); + oq32_bv_ndc(t,j,potnatveg,"level") = q32_bv_ndc.l(j,potnatveg); + oq32_bv_plant(t,j,potnatveg,"level") = q32_bv_plant.l(j,potnatveg); + oq32_land_expansion_forestry(t,j,type32,"level") = q32_land_expansion_forestry.l(j,type32); + oq32_land_reduction_forestry(t,j,type32,"level") = q32_land_reduction_forestry.l(j,type32); + ov_cost_fore(t,i,"upper") = vm_cost_fore.up(i); + ov32_cost_hvarea(t,i,"upper") = v32_cost_hvarea.up(i); + ov32_land(t,j,type32,ac,"upper") = v32_land.up(j,type32,ac); + ov32_land_missing(t,j,"upper") = v32_land_missing.up(j); + ov_landdiff_forestry(t,"upper") = vm_landdiff_forestry.up; + ov32_cost_recur(t,i,"upper") = v32_cost_recur.up(i); + ov32_land_expansion(t,j,type32,ac,"upper") = v32_land_expansion.up(j,type32,ac); + ov32_land_reduction(t,j,type32,ac,"upper") = v32_land_reduction.up(j,type32,ac); + ov32_cost_establishment(t,i,"upper") = v32_cost_establishment.up(i); + ov32_hvarea_forestry(t,j,ac,"upper") = v32_hvarea_forestry.up(j,ac); + ov_prod_forestry(t,j,kforestry,"upper") = vm_prod_forestry.up(j,kforestry); + ov_landexpansion_forestry(t,j,type32,"upper") = vm_landexpansion_forestry.up(j,type32); + ov_landreduction_forestry(t,j,type32,"upper") = vm_landreduction_forestry.up(j,type32); + 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); + oq32_cdr_aff(t,j,ac,"upper") = q32_cdr_aff.up(j,ac); + oq32_carbon(t,j,ag_pools,stockType,"upper") = q32_carbon.up(j,ag_pools,stockType); + oq32_land_diff(t,"upper") = q32_land_diff.up; + 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_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); + oq32_establishment_dynamic(t,i,"upper") = q32_establishment_dynamic.up(i); + oq32_establishment_dynamic_yield(t,i,"upper") = q32_establishment_dynamic_yield.up(i); + oq32_establishment_fixed(t,j,"upper") = q32_establishment_fixed.up(j); + oq32_land_expansion(t,j,type32,ac,"upper") = q32_land_expansion.up(j,type32,ac); + oq32_land_reduction(t,j,type32,ac,"upper") = q32_land_reduction.up(j,type32,ac); + oq32_cost_establishment(t,i,"upper") = q32_cost_establishment.up(i); + oq32_bgp_aff(t,j,ac,"upper") = q32_bgp_aff.up(j,ac); + oq32_forestry_est(t,j,type32,ac,"upper") = q32_forestry_est.up(j,type32,ac); + oq32_cost_hvarea(t,i,"upper") = q32_cost_hvarea.up(i); + oq32_prod_forestry(t,j,"upper") = q32_prod_forestry.up(j); + oq32_bv_aff(t,j,potnatveg,"upper") = q32_bv_aff.up(j,potnatveg); + oq32_bv_ndc(t,j,potnatveg,"upper") = q32_bv_ndc.up(j,potnatveg); + oq32_bv_plant(t,j,potnatveg,"upper") = q32_bv_plant.up(j,potnatveg); + oq32_land_expansion_forestry(t,j,type32,"upper") = q32_land_expansion_forestry.up(j,type32); + oq32_land_reduction_forestry(t,j,type32,"upper") = q32_land_reduction_forestry.up(j,type32); + ov_cost_fore(t,i,"lower") = vm_cost_fore.lo(i); + ov32_cost_hvarea(t,i,"lower") = v32_cost_hvarea.lo(i); + ov32_land(t,j,type32,ac,"lower") = v32_land.lo(j,type32,ac); + ov32_land_missing(t,j,"lower") = v32_land_missing.lo(j); + ov_landdiff_forestry(t,"lower") = vm_landdiff_forestry.lo; + ov32_cost_recur(t,i,"lower") = v32_cost_recur.lo(i); + ov32_land_expansion(t,j,type32,ac,"lower") = v32_land_expansion.lo(j,type32,ac); + ov32_land_reduction(t,j,type32,ac,"lower") = v32_land_reduction.lo(j,type32,ac); + ov32_cost_establishment(t,i,"lower") = v32_cost_establishment.lo(i); + ov32_hvarea_forestry(t,j,ac,"lower") = v32_hvarea_forestry.lo(j,ac); + ov_prod_forestry(t,j,kforestry,"lower") = vm_prod_forestry.lo(j,kforestry); + ov_landexpansion_forestry(t,j,type32,"lower") = vm_landexpansion_forestry.lo(j,type32); + ov_landreduction_forestry(t,j,type32,"lower") = vm_landreduction_forestry.lo(j,type32); + 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); + oq32_cdr_aff(t,j,ac,"lower") = q32_cdr_aff.lo(j,ac); + oq32_carbon(t,j,ag_pools,stockType,"lower") = q32_carbon.lo(j,ag_pools,stockType); + oq32_land_diff(t,"lower") = q32_land_diff.lo; + 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_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); + oq32_establishment_dynamic(t,i,"lower") = q32_establishment_dynamic.lo(i); + oq32_establishment_dynamic_yield(t,i,"lower") = q32_establishment_dynamic_yield.lo(i); + oq32_establishment_fixed(t,j,"lower") = q32_establishment_fixed.lo(j); + oq32_land_expansion(t,j,type32,ac,"lower") = q32_land_expansion.lo(j,type32,ac); + oq32_land_reduction(t,j,type32,ac,"lower") = q32_land_reduction.lo(j,type32,ac); + oq32_cost_establishment(t,i,"lower") = q32_cost_establishment.lo(i); + oq32_bgp_aff(t,j,ac,"lower") = q32_bgp_aff.lo(j,ac); + oq32_forestry_est(t,j,type32,ac,"lower") = q32_forestry_est.lo(j,type32,ac); + oq32_cost_hvarea(t,i,"lower") = q32_cost_hvarea.lo(i); + oq32_prod_forestry(t,j,"lower") = q32_prod_forestry.lo(j); + oq32_bv_aff(t,j,potnatveg,"lower") = q32_bv_aff.lo(j,potnatveg); + oq32_bv_ndc(t,j,potnatveg,"lower") = q32_bv_ndc.lo(j,potnatveg); + oq32_bv_plant(t,j,potnatveg,"lower") = q32_bv_plant.lo(j,potnatveg); + oq32_land_expansion_forestry(t,j,type32,"lower") = q32_land_expansion_forestry.lo(j,type32); + oq32_land_reduction_forestry(t,j,type32,"lower") = q32_land_reduction_forestry.lo(j,type32); *##################### R SECTION END (OUTPUT DEFINITIONS) ###################### diff --git a/modules/32_forestry/dynamic_feb21/preloop.gms b/modules/32_forestry/dynamic_feb21/preloop.gms index a1754a92d2..08088d1a86 100644 --- a/modules/32_forestry/dynamic_feb21/preloop.gms +++ b/modules/32_forestry/dynamic_feb21/preloop.gms @@ -215,9 +215,6 @@ loop(j, p32_land_start_ac(j,"ndc","ac0") = p32_land_start_ac(j,"ndc","ac0") + (pm_land_start(j,"forestry") - sum((type32,ac),p32_land_start_ac(j,type32,ac))); ); ); -** Initialization of land -vm_land_forestry.l(j,type32) = sum(ac, p32_land_start_ac(j,type32,ac)); -pcm_land_forestry(j,type32) = vm_land_forestry.l(j,type32); *** NPI/NDC policies BEGIN ** Afforestation policies NPI and NDCs diff --git a/modules/32_forestry/dynamic_feb21/presolve.gms b/modules/32_forestry/dynamic_feb21/presolve.gms index 459ceddd89..69c878cfa3 100644 --- a/modules/32_forestry/dynamic_feb21/presolve.gms +++ b/modules/32_forestry/dynamic_feb21/presolve.gms @@ -15,6 +15,7 @@ ac_sub(ac) = yes$(ord(ac) > (m_yeardiff_forestry(t)/5)); *Reduction of ac_est is not possible. v32_hvarea_forestry.fx(j,ac_est) = 0; v32_land_reduction.fx(j,type32,ac_est) = 0; +v32_land_expansion.fx(j,type32,ac_sub) = 0; ** START ndc ** * calc NPI/NDC afforestation per time step based on forest stock change diff --git a/modules/58_peatland/off/not_used.txt b/modules/58_peatland/off/not_used.txt index 8b45b33bd6..01c510fae9 100644 --- a/modules/58_peatland/off/not_used.txt +++ b/modules/58_peatland/off/not_used.txt @@ -3,5 +3,7 @@ vm_land, input, not used pcm_land, input, not used pm_interest, input, not used pm_climate_class, input, not used -vm_land_forestry, input, not used -pcm_land_forestry, input, not used +vm_landexpansion, input, not used +vm_landreduction, input, not used +vm_landexpansion_forestry, input, not used +vm_landreduction_forestry, input, not used diff --git a/modules/58_peatland/on/not_used.txt b/modules/58_peatland/on/not_used.txt index a2be78997a..9a52df7eb8 100644 --- a/modules/58_peatland/on/not_used.txt +++ b/modules/58_peatland/on/not_used.txt @@ -1,3 +1,5 @@ name, type, reason -vm_land_forestry, input, not used -pcm_land_forestry, input, not used +vm_landexpansion, input, not used +vm_landreduction, input, not used +vm_landexpansion_forestry, input, not used +vm_landreduction_forestry, input, not used diff --git a/modules/58_peatland/v2/declarations.gms b/modules/58_peatland/v2/declarations.gms index 294c7674a7..2dd283b5ab 100644 --- a/modules/58_peatland/v2/declarations.gms +++ b/modules/58_peatland/v2/declarations.gms @@ -6,61 +6,69 @@ *** | Contact: magpie@pik-potsdam.de parameters - p58_scaling_factor(j) Scaling factor for managed peatland (1) + p58_scaling_factor_exp(t,j) Scaling factor for managed peatland expansion (1) + p58_scaling_factor_red(t,j) Scaling factor for managed peatland reduction (1) pc58_peatland(j,land58) Peatland area (mio. ha) p58_mapping_cell_climate(j,clcl58) Mapping between cells and climate regions (binary) i58_cost_rewet_recur(t) Recurring costs for rewetted peatland (USD05MER per ha) i58_cost_rewet_onetime(t) One-time costs for peatland restoration (USD05MER per ha) i58_cost_degrad_recur(t) Recurring costs for degraded peatland (USD05MER per ha) i58_cost_degrad_onetime(t) One-time costs for peatland degradation (USD05MER per ha) + p58_weight(t,j,manPeat58) Weight for distribution of total peatland changes to managed peatland categories (1) ; equations - q58_peatland(j) Constraint for peatland area (mio. ha) - q58_expansion(j,land58) Peatland expansion (mio. ha) - q58_reduction(j,land58) Peatland reduction (mio. ha) - q58_peatland_crop(j) Degraded peatland used as cropland (mio. ha) - q58_peatland_past(j) Degraded peatland used as pasture (mio. ha) - q58_peatland_forestry(j) Degraded peatland used for forestry (mio. ha) - q58_peatland_cost_full(j) One-time and recurring cost of peatland conversion and management including artifical balance cost (mio. USD05MER per yr) - q58_peatland_cost(j) One-time and recurring cost of peatland conversion and management (mio. USD05MER per yr) - q58_peatland_cost_annuity(j) Annuity costs of peatland conversion in the current timestep (mio. USD05MER per yr) + q58_peatland(j) Constraint for total peatland area (mio. ha) + q58_peatlandChange(j,land58) Peatland area Change (mio. ha) + q58_peatlandMan(j,manPeat58) Change of managed peatland area (mio. ha) + q58_peatlandRewet(j) Change of rewetted peatland area (mio. ha) + q58_peatland_cost_full(j) One-time and recurring cost of peatland conversion and management including artifical balance cost (mio. USD05MER per yr) + q58_peatland_cost(j) One-time and recurring cost of peatland conversion and management (mio. USD05MER per yr) + q58_peatland_cost_annuity_intact(j) Annuity costs for reduction of intact peatland in the current timestep (mio. USD05MER per yr) + q58_peatland_cost_annuity_rewet(j) Annuity costs for expansion of rewetted peatland in the current timestep (mio. USD05MER per yr) q58_peatland_emis_detail(j,land58,emis58) Detailed GHG emissions from peatlands (Tg per yr) - q58_peatland_emis(i,poll58) GHG emissions from managed peatland (Tg per yr) + q58_peatland_emis(i,poll58) GHG emissions from managed peatland (Tg per yr) + q58_manLandExp(j,manLand58) Managed land expansion (mio. ha) + q58_manLandRed(j,manLand58) Managed land reduction (mio. ha) ; variables - vm_peatland_cost(j) One-time and recurring cost of managed peatland including artifical balance cost (mio. USD05MER per yr) - v58_peatland_cost(j) One-time and recurring cost of managed peatland (mio. USD05MER per yr) - v58_peatland_cost_annuity(j) Annuity costs of managed peatland expansion in the current timestep (mio. USD05MER per yr) + vm_peatland_cost(j) One-time and recurring cost of peatland conversion and management including artifical balance cost (mio. USD05MER per yr) + v58_peatland_cost(j) One-time and recurring cost of peatland conversion and management (mio. USD05MER per yr) v58_peatland_emis(j,land58,emis58) Detailed GHG peatland GHG emissions (Tg per yr) + v58_peatlandChange(j,land58) Peatland area change (mio. ha) ; positive variables - v58_expansion(j,land58) Peatland expansion (mio. ha) - v58_reduction(j,land58) Peatland reduction (mio. ha) - v58_peatland(j,land58) Managed peatland (mio. ha) + v58_peatland_cost_annuity_intact(j) Annuity costs for reduction of intact peatland in the current timestep (mio. USD05MER per yr) + v58_peatland_cost_annuity_rewet(j) Annuity costs for expansion of rewetted peatland in the current timestep (mio. USD05MER per yr) + v58_peatland(j,land58) Peatland area (mio. ha) + v58_manLandExp(j,manLand58) Managed land expansion (mio. ha) + v58_manLandRed(j,manLand58) Managed land reduction (mio. ha) ; *#################### R SECTION START (OUTPUT DECLARATIONS) #################### parameters - ov_peatland_cost(t,j,type) One-time and recurring cost of managed peatland including artifical balance cost (mio. USD05MER per yr) - ov58_peatland_cost(t,j,type) One-time and recurring cost of managed peatland (mio. USD05MER per yr) - ov58_peatland_cost_annuity(t,j,type) Annuity costs of managed peatland expansion in the current timestep (mio. USD05MER per yr) + ov_peatland_cost(t,j,type) One-time and recurring cost of peatland conversion and management including artifical balance cost (mio. USD05MER per yr) + ov58_peatland_cost(t,j,type) One-time and recurring cost of peatland conversion and management (mio. USD05MER per yr) ov58_peatland_emis(t,j,land58,emis58,type) Detailed GHG peatland GHG emissions (Tg per yr) - ov58_expansion(t,j,land58,type) Peatland expansion (mio. ha) - ov58_reduction(t,j,land58,type) Peatland reduction (mio. ha) - ov58_peatland(t,j,land58,type) Managed peatland (mio. ha) - oq58_peatland(t,j,type) Constraint for peatland area (mio. ha) - oq58_expansion(t,j,land58,type) Peatland expansion (mio. ha) - oq58_reduction(t,j,land58,type) Peatland reduction (mio. ha) - oq58_peatland_crop(t,j,type) Degraded peatland used as cropland (mio. ha) - oq58_peatland_past(t,j,type) Degraded peatland used as pasture (mio. ha) - oq58_peatland_forestry(t,j,type) Degraded peatland used for forestry (mio. ha) + ov58_peatlandChange(t,j,land58,type) Peatland area change (mio. ha) + ov58_peatland_cost_annuity_intact(t,j,type) Annuity costs for reduction of intact peatland in the current timestep (mio. USD05MER per yr) + ov58_peatland_cost_annuity_rewet(t,j,type) Annuity costs for expansion of rewetted peatland in the current timestep (mio. USD05MER per yr) + ov58_peatland(t,j,land58,type) Peatland area (mio. ha) + ov58_manLandExp(t,j,manLand58,type) Managed land expansion (mio. ha) + ov58_manLandRed(t,j,manLand58,type) Managed land reduction (mio. ha) + oq58_peatland(t,j,type) Constraint for total peatland area (mio. ha) + oq58_peatlandChange(t,j,land58,type) Peatland area Change (mio. ha) + oq58_peatlandMan(t,j,manPeat58,type) Change of managed peatland area (mio. ha) + oq58_peatlandRewet(t,j,type) Change of rewetted peatland area (mio. ha) oq58_peatland_cost_full(t,j,type) One-time and recurring cost of peatland conversion and management including artifical balance cost (mio. USD05MER per yr) oq58_peatland_cost(t,j,type) One-time and recurring cost of peatland conversion and management (mio. USD05MER per yr) - oq58_peatland_cost_annuity(t,j,type) Annuity costs of peatland conversion in the current timestep (mio. USD05MER per yr) + oq58_peatland_cost_annuity_intact(t,j,type) Annuity costs for reduction of intact peatland in the current timestep (mio. USD05MER per yr) + oq58_peatland_cost_annuity_rewet(t,j,type) Annuity costs for expansion of rewetted peatland in the current timestep (mio. USD05MER per yr) oq58_peatland_emis_detail(t,j,land58,emis58,type) Detailed GHG emissions from peatlands (Tg per yr) oq58_peatland_emis(t,i,poll58,type) GHG emissions from managed peatland (Tg per yr) + oq58_manLandExp(t,j,manLand58,type) Managed land expansion (mio. ha) + oq58_manLandRed(t,j,manLand58,type) Managed land reduction (mio. ha) ; *##################### R SECTION END (OUTPUT DECLARATIONS) ##################### diff --git a/modules/58_peatland/v2/equations.gms b/modules/58_peatland/v2/equations.gms index da3266fc7f..69f1676262 100644 --- a/modules/58_peatland/v2/equations.gms +++ b/modules/58_peatland/v2/equations.gms @@ -7,42 +7,50 @@ *' @equations -*' Constraint for constant total peatland area: +*' Constraint for constant total peatland area over time: - q58_peatland(j2)$(sum(ct, m_year(ct)) > s58_fix_peatland) .. + q58_peatland(j2) .. sum(land58, v58_peatland(j2,land58)) =e= sum(land58, pc58_peatland(j2,land58)); -*' Constraints for peatland area expansion and reduction: +*' Peatland area change: - q58_expansion(j2,land58) .. - v58_expansion(j2,land58) =g= v58_peatland(j2,land58)-pc58_peatland(j2,land58); + q58_peatlandChange(j2,land58) .. + v58_peatlandChange(j2,land58) =e= v58_peatland(j2,land58)-pc58_peatland(j2,land58); - q58_reduction(j2,land58) .. - v58_reduction(j2,land58) =g= pc58_peatland(j2,land58)-v58_peatland(j2,land58); - -*' Future peatland dynamics (`v58_peatland`) depend on changes in managed land -*' (`vm_land-pcm_land`, `vm_land_forestry-pcm_land_forestry`), -*' multiplied with the peatland scaling factor (`p58_scaling_factor`) and an adjustment term for cells where -*' the initial peatland area is inconsistent with the scaling factor (see marco m_peatland for details). -*' By multiplying changes in managed land with the scaling factor we implicitly assume -*' that intact peatlands are distributed equally within a grid cell. -*' The following example illustrates the mechanism used for projecting peatland dynamics: -*' In a given grid cell, the total land area is 50 Mha and the total peatland area is 10 Mha. -*' Therefore, the scaling factor is 0.2 (10 Mha divided by 50 Mha). -*' If cropland expands by 5 Mha, 1 Mha of intact peatland is converted to degraded peatland (5 Mha x 0.2). -*' If the total cell would become cropland, degraded peatland would equal to the total peatland area (50 Mha x 0.2 = 10 Mha). - - q58_peatland_crop(j2)$(sum(ct, m_year(ct)) > s58_fix_peatland) .. - v58_peatland(j2,"crop") =e= - m_peatland(pc58_peatland,"crop",vm_land,pcm_land,"crop",p58_scaling_factor); - - q58_peatland_past(j2)$(sum(ct, m_year(ct)) > s58_fix_peatland) .. - v58_peatland(j2,"past") =e= - m_peatland(pc58_peatland,"past",vm_land,pcm_land,"past",p58_scaling_factor); - - q58_peatland_forestry(j2)$(sum(ct, m_year(ct)) > s58_fix_peatland) .. - v58_peatland(j2,"forestry") =e= - m_peatland(pc58_peatland,"forestry",vm_land_forestry,pcm_land_forestry,"plant",p58_scaling_factor); +*' Managed land area expansion and reduction: + + q58_manLandExp(j2,manLand58) .. + v58_manLandExp(j2,manLand58) =e= + vm_landexpansion(j2,"crop")$(sameas(manLand58,"crop")) + + vm_landexpansion(j2,"past")$(sameas(manLand58,"past")) + + vm_landexpansion_forestry(j2,"plant")$(sameas(manLand58,"forestry")); + + q58_manLandRed(j2,manLand58) .. + v58_manLandRed(j2,manLand58) =e= + vm_landreduction(j2,"crop")$(sameas(manLand58,"crop")) + + vm_landreduction(j2,"past")$(sameas(manLand58,"past")) + + vm_landreduction_forestry(j2,"plant")$(sameas(manLand58,"forestry")); + +*' Future peatland dynamics (`v58_peatland`) depend on changes in managed land (`v58_manLandExp`, `v58_manLandRed`), +*' multiplied with corresponding scaling factors for expansion (`p58_scaling_factor_exp`) and reduction (`p58_scaling_factor_red`). +*' The scaling factor for expansion makes sure that in case the full cell area consists of +*' managed land (cropland, pasture, forestry plantations), the full peatland area is drained. +*' Likewise, the scaling factor for reduction makes sure that in case no area is used for managed land, +*' managed peatland (`manPeat58`) is reduced to zero. +*' In case managed land remains unchanged, also managed peatland remains unchanged. +*' The distribution of changes in total peatland area to managed peatland categories (`manPeat58`) +*' depends on the weight of these categories in the previous time step (`p58_weight`). + + q58_peatlandMan(j2,manPeat58)$(sum(ct, m_year(ct)) > s58_fix_peatland) .. + v58_peatland(j2,manPeat58) =e= + pc58_peatland(j2,manPeat58) + + sum(manLand58, v58_manLandExp(j2,manLand58)) * sum(ct, p58_scaling_factor_exp(ct,j2) * p58_weight(ct,j2,manPeat58)) + - sum(manLand58, v58_manLandRed(j2,manLand58)) * sum(ct, p58_scaling_factor_red(ct,j2) * p58_weight(ct,j2,manPeat58)); + +*' This constraint avoids the conversion of intact peatland into rewetted peatland. + + q58_peatlandRewet(j2) .. + v58_peatlandChange(j2,"rewetted") =l= -sum(drained58, v58_peatlandChange(j2,drained58)) + v58_peatlandChange(j2,"intact"); *' Costs for peatland degradation and rewetting @@ -50,15 +58,20 @@ vm_peatland_cost(j2) =e= v58_peatland_cost(j2); q58_peatland_cost(j2) .. - v58_peatland_cost(j2) =e= v58_peatland_cost_annuity(j2) + v58_peatland_cost(j2) =e= v58_peatland_cost_annuity_intact(j2) + v58_peatland_cost_annuity_rewet(j2) + v58_peatland(j2,"rewetted") * sum(ct, i58_cost_rewet_recur(ct)) - + sum(landDrainedUsed58, v58_peatland(j2,landDrainedUsed58)) * sum(ct, i58_cost_degrad_recur(ct)); + + sum(manPeat58, v58_peatland(j2,manPeat58)) * sum(ct, i58_cost_degrad_recur(ct)); - q58_peatland_cost_annuity(j2) .. - v58_peatland_cost_annuity(j2) =e= - (v58_expansion(j2,"rewetted") * sum(ct, i58_cost_rewet_onetime(ct)) - + v58_reduction(j2,"intact") * sum(ct, i58_cost_degrad_onetime(ct))) + q58_peatland_cost_annuity_intact(j2) .. + v58_peatland_cost_annuity_intact(j2) =e= + - v58_peatlandChange(j2,"intact") * sum(ct, i58_cost_degrad_onetime(ct)) * sum((cell(i2,j2),ct),pm_interest(ct,i2)/(1+pm_interest(ct,i2))); + + q58_peatland_cost_annuity_rewet(j2) .. + v58_peatland_cost_annuity_rewet(j2) =g= + v58_peatlandChange(j2,"rewetted") * sum(ct, i58_cost_rewet_onetime(ct)) + * sum((cell(i2,j2),ct),pm_interest(ct,i2)/(1+pm_interest(ct,i2))); + *' Detailed peatland GHG emissions diff --git a/modules/58_peatland/v2/not_used.txt b/modules/58_peatland/v2/not_used.txt new file mode 100644 index 0000000000..9f23b880c7 --- /dev/null +++ b/modules/58_peatland/v2/not_used.txt @@ -0,0 +1,2 @@ +name, type, reason +vm_land, input, not used diff --git a/modules/58_peatland/v2/postsolve.gms b/modules/58_peatland/v2/postsolve.gms index 7ad8b0489d..72934224b9 100644 --- a/modules/58_peatland/v2/postsolve.gms +++ b/modules/58_peatland/v2/postsolve.gms @@ -10,74 +10,86 @@ pc58_peatland(j,land58) = v58_peatland.l(j,land58); *#################### R SECTION START (OUTPUT DEFINITIONS) ##################### ov_peatland_cost(t,j,"marginal") = vm_peatland_cost.m(j); ov58_peatland_cost(t,j,"marginal") = v58_peatland_cost.m(j); - ov58_peatland_cost_annuity(t,j,"marginal") = v58_peatland_cost_annuity.m(j); ov58_peatland_emis(t,j,land58,emis58,"marginal") = v58_peatland_emis.m(j,land58,emis58); - ov58_expansion(t,j,land58,"marginal") = v58_expansion.m(j,land58); - ov58_reduction(t,j,land58,"marginal") = v58_reduction.m(j,land58); + ov58_peatlandChange(t,j,land58,"marginal") = v58_peatlandChange.m(j,land58); + ov58_peatland_cost_annuity_intact(t,j,"marginal") = v58_peatland_cost_annuity_intact.m(j); + ov58_peatland_cost_annuity_rewet(t,j,"marginal") = v58_peatland_cost_annuity_rewet.m(j); ov58_peatland(t,j,land58,"marginal") = v58_peatland.m(j,land58); + ov58_manLandExp(t,j,manLand58,"marginal") = v58_manLandExp.m(j,manLand58); + ov58_manLandRed(t,j,manLand58,"marginal") = v58_manLandRed.m(j,manLand58); oq58_peatland(t,j,"marginal") = q58_peatland.m(j); - oq58_expansion(t,j,land58,"marginal") = q58_expansion.m(j,land58); - oq58_reduction(t,j,land58,"marginal") = q58_reduction.m(j,land58); - oq58_peatland_crop(t,j,"marginal") = q58_peatland_crop.m(j); - oq58_peatland_past(t,j,"marginal") = q58_peatland_past.m(j); - oq58_peatland_forestry(t,j,"marginal") = q58_peatland_forestry.m(j); + oq58_peatlandChange(t,j,land58,"marginal") = q58_peatlandChange.m(j,land58); + oq58_peatlandMan(t,j,manPeat58,"marginal") = q58_peatlandMan.m(j,manPeat58); + oq58_peatlandRewet(t,j,"marginal") = q58_peatlandRewet.m(j); oq58_peatland_cost_full(t,j,"marginal") = q58_peatland_cost_full.m(j); oq58_peatland_cost(t,j,"marginal") = q58_peatland_cost.m(j); - oq58_peatland_cost_annuity(t,j,"marginal") = q58_peatland_cost_annuity.m(j); + oq58_peatland_cost_annuity_intact(t,j,"marginal") = q58_peatland_cost_annuity_intact.m(j); + oq58_peatland_cost_annuity_rewet(t,j,"marginal") = q58_peatland_cost_annuity_rewet.m(j); oq58_peatland_emis_detail(t,j,land58,emis58,"marginal") = q58_peatland_emis_detail.m(j,land58,emis58); oq58_peatland_emis(t,i,poll58,"marginal") = q58_peatland_emis.m(i,poll58); + oq58_manLandExp(t,j,manLand58,"marginal") = q58_manLandExp.m(j,manLand58); + oq58_manLandRed(t,j,manLand58,"marginal") = q58_manLandRed.m(j,manLand58); ov_peatland_cost(t,j,"level") = vm_peatland_cost.l(j); ov58_peatland_cost(t,j,"level") = v58_peatland_cost.l(j); - ov58_peatland_cost_annuity(t,j,"level") = v58_peatland_cost_annuity.l(j); ov58_peatland_emis(t,j,land58,emis58,"level") = v58_peatland_emis.l(j,land58,emis58); - ov58_expansion(t,j,land58,"level") = v58_expansion.l(j,land58); - ov58_reduction(t,j,land58,"level") = v58_reduction.l(j,land58); + ov58_peatlandChange(t,j,land58,"level") = v58_peatlandChange.l(j,land58); + ov58_peatland_cost_annuity_intact(t,j,"level") = v58_peatland_cost_annuity_intact.l(j); + ov58_peatland_cost_annuity_rewet(t,j,"level") = v58_peatland_cost_annuity_rewet.l(j); ov58_peatland(t,j,land58,"level") = v58_peatland.l(j,land58); + ov58_manLandExp(t,j,manLand58,"level") = v58_manLandExp.l(j,manLand58); + ov58_manLandRed(t,j,manLand58,"level") = v58_manLandRed.l(j,manLand58); oq58_peatland(t,j,"level") = q58_peatland.l(j); - oq58_expansion(t,j,land58,"level") = q58_expansion.l(j,land58); - oq58_reduction(t,j,land58,"level") = q58_reduction.l(j,land58); - oq58_peatland_crop(t,j,"level") = q58_peatland_crop.l(j); - oq58_peatland_past(t,j,"level") = q58_peatland_past.l(j); - oq58_peatland_forestry(t,j,"level") = q58_peatland_forestry.l(j); + oq58_peatlandChange(t,j,land58,"level") = q58_peatlandChange.l(j,land58); + oq58_peatlandMan(t,j,manPeat58,"level") = q58_peatlandMan.l(j,manPeat58); + oq58_peatlandRewet(t,j,"level") = q58_peatlandRewet.l(j); oq58_peatland_cost_full(t,j,"level") = q58_peatland_cost_full.l(j); oq58_peatland_cost(t,j,"level") = q58_peatland_cost.l(j); - oq58_peatland_cost_annuity(t,j,"level") = q58_peatland_cost_annuity.l(j); + oq58_peatland_cost_annuity_intact(t,j,"level") = q58_peatland_cost_annuity_intact.l(j); + oq58_peatland_cost_annuity_rewet(t,j,"level") = q58_peatland_cost_annuity_rewet.l(j); oq58_peatland_emis_detail(t,j,land58,emis58,"level") = q58_peatland_emis_detail.l(j,land58,emis58); oq58_peatland_emis(t,i,poll58,"level") = q58_peatland_emis.l(i,poll58); + oq58_manLandExp(t,j,manLand58,"level") = q58_manLandExp.l(j,manLand58); + oq58_manLandRed(t,j,manLand58,"level") = q58_manLandRed.l(j,manLand58); ov_peatland_cost(t,j,"upper") = vm_peatland_cost.up(j); ov58_peatland_cost(t,j,"upper") = v58_peatland_cost.up(j); - ov58_peatland_cost_annuity(t,j,"upper") = v58_peatland_cost_annuity.up(j); ov58_peatland_emis(t,j,land58,emis58,"upper") = v58_peatland_emis.up(j,land58,emis58); - ov58_expansion(t,j,land58,"upper") = v58_expansion.up(j,land58); - ov58_reduction(t,j,land58,"upper") = v58_reduction.up(j,land58); + ov58_peatlandChange(t,j,land58,"upper") = v58_peatlandChange.up(j,land58); + ov58_peatland_cost_annuity_intact(t,j,"upper") = v58_peatland_cost_annuity_intact.up(j); + ov58_peatland_cost_annuity_rewet(t,j,"upper") = v58_peatland_cost_annuity_rewet.up(j); ov58_peatland(t,j,land58,"upper") = v58_peatland.up(j,land58); + ov58_manLandExp(t,j,manLand58,"upper") = v58_manLandExp.up(j,manLand58); + ov58_manLandRed(t,j,manLand58,"upper") = v58_manLandRed.up(j,manLand58); oq58_peatland(t,j,"upper") = q58_peatland.up(j); - oq58_expansion(t,j,land58,"upper") = q58_expansion.up(j,land58); - oq58_reduction(t,j,land58,"upper") = q58_reduction.up(j,land58); - oq58_peatland_crop(t,j,"upper") = q58_peatland_crop.up(j); - oq58_peatland_past(t,j,"upper") = q58_peatland_past.up(j); - oq58_peatland_forestry(t,j,"upper") = q58_peatland_forestry.up(j); + oq58_peatlandChange(t,j,land58,"upper") = q58_peatlandChange.up(j,land58); + oq58_peatlandMan(t,j,manPeat58,"upper") = q58_peatlandMan.up(j,manPeat58); + oq58_peatlandRewet(t,j,"upper") = q58_peatlandRewet.up(j); oq58_peatland_cost_full(t,j,"upper") = q58_peatland_cost_full.up(j); oq58_peatland_cost(t,j,"upper") = q58_peatland_cost.up(j); - oq58_peatland_cost_annuity(t,j,"upper") = q58_peatland_cost_annuity.up(j); + oq58_peatland_cost_annuity_intact(t,j,"upper") = q58_peatland_cost_annuity_intact.up(j); + oq58_peatland_cost_annuity_rewet(t,j,"upper") = q58_peatland_cost_annuity_rewet.up(j); oq58_peatland_emis_detail(t,j,land58,emis58,"upper") = q58_peatland_emis_detail.up(j,land58,emis58); oq58_peatland_emis(t,i,poll58,"upper") = q58_peatland_emis.up(i,poll58); + oq58_manLandExp(t,j,manLand58,"upper") = q58_manLandExp.up(j,manLand58); + oq58_manLandRed(t,j,manLand58,"upper") = q58_manLandRed.up(j,manLand58); ov_peatland_cost(t,j,"lower") = vm_peatland_cost.lo(j); ov58_peatland_cost(t,j,"lower") = v58_peatland_cost.lo(j); - ov58_peatland_cost_annuity(t,j,"lower") = v58_peatland_cost_annuity.lo(j); ov58_peatland_emis(t,j,land58,emis58,"lower") = v58_peatland_emis.lo(j,land58,emis58); - ov58_expansion(t,j,land58,"lower") = v58_expansion.lo(j,land58); - ov58_reduction(t,j,land58,"lower") = v58_reduction.lo(j,land58); + ov58_peatlandChange(t,j,land58,"lower") = v58_peatlandChange.lo(j,land58); + ov58_peatland_cost_annuity_intact(t,j,"lower") = v58_peatland_cost_annuity_intact.lo(j); + ov58_peatland_cost_annuity_rewet(t,j,"lower") = v58_peatland_cost_annuity_rewet.lo(j); ov58_peatland(t,j,land58,"lower") = v58_peatland.lo(j,land58); + ov58_manLandExp(t,j,manLand58,"lower") = v58_manLandExp.lo(j,manLand58); + ov58_manLandRed(t,j,manLand58,"lower") = v58_manLandRed.lo(j,manLand58); oq58_peatland(t,j,"lower") = q58_peatland.lo(j); - oq58_expansion(t,j,land58,"lower") = q58_expansion.lo(j,land58); - oq58_reduction(t,j,land58,"lower") = q58_reduction.lo(j,land58); - oq58_peatland_crop(t,j,"lower") = q58_peatland_crop.lo(j); - oq58_peatland_past(t,j,"lower") = q58_peatland_past.lo(j); - oq58_peatland_forestry(t,j,"lower") = q58_peatland_forestry.lo(j); + oq58_peatlandChange(t,j,land58,"lower") = q58_peatlandChange.lo(j,land58); + oq58_peatlandMan(t,j,manPeat58,"lower") = q58_peatlandMan.lo(j,manPeat58); + oq58_peatlandRewet(t,j,"lower") = q58_peatlandRewet.lo(j); oq58_peatland_cost_full(t,j,"lower") = q58_peatland_cost_full.lo(j); oq58_peatland_cost(t,j,"lower") = q58_peatland_cost.lo(j); - oq58_peatland_cost_annuity(t,j,"lower") = q58_peatland_cost_annuity.lo(j); + oq58_peatland_cost_annuity_intact(t,j,"lower") = q58_peatland_cost_annuity_intact.lo(j); + oq58_peatland_cost_annuity_rewet(t,j,"lower") = q58_peatland_cost_annuity_rewet.lo(j); oq58_peatland_emis_detail(t,j,land58,emis58,"lower") = q58_peatland_emis_detail.lo(j,land58,emis58); oq58_peatland_emis(t,i,poll58,"lower") = q58_peatland_emis.lo(i,poll58); + oq58_manLandExp(t,j,manLand58,"lower") = q58_manLandExp.lo(j,manLand58); + oq58_manLandRed(t,j,manLand58,"lower") = q58_manLandRed.lo(j,manLand58); *##################### R SECTION END (OUTPUT DEFINITIONS) ###################### diff --git a/modules/58_peatland/v2/preloop.gms b/modules/58_peatland/v2/preloop.gms index ac58258d2b..7380c4b097 100644 --- a/modules/58_peatland/v2/preloop.gms +++ b/modules/58_peatland/v2/preloop.gms @@ -17,3 +17,6 @@ pc58_peatland(j,land58) = 0; * For the internal GHG emission pricing it is assumed that intact peatlands have the same GHG emission factors as rewetted peatlands. * Without this assumption, GHG emissions of intact peatlands would be zero (no data available). This can lead to cases where intact peatland is converted to rewetted peatland. f58_ipcc_wetland_ef(clcl58,"intact",emis58) = f58_ipcc_wetland_ef(clcl58,"rewetted",emis58); + +* Initialization of peatland weight +p58_weight(t,j,manPeat58) = 1/card(manPeat58); diff --git a/modules/58_peatland/v2/presolve.gms b/modules/58_peatland/v2/presolve.gms index 73b2ddbfe8..4621971a10 100644 --- a/modules/58_peatland/v2/presolve.gms +++ b/modules/58_peatland/v2/presolve.gms @@ -10,17 +10,14 @@ if (m_year(t) <= s58_fix_peatland, * Initialization of peatland area. Drained and used peatland area cannot exceed the corresponding managed area pc58_peatland(j,"crop") = min(f58_peatland_area(j,"crop"),pcm_land(j,"crop")); pc58_peatland(j,"past") = min(f58_peatland_area(j,"past"), pcm_land(j,"past")); - pc58_peatland(j,"forestry") = min(f58_peatland_area(j,"forestry"), pcm_land_forestry(j,"plant")); + pc58_peatland(j,"forestry") = min(f58_peatland_area(j,"forestry"), pcm_land(j,"forestry")); * The residual is added to an "unused" category, which represents drained but unused peatland. - pc58_peatland(j,"unused") = sum(landDrainedUsed58, f58_peatland_area(j,landDrainedUsed58) - pc58_peatland(j,landDrainedUsed58)); + pc58_peatland(j,"unused") = sum(manPeat58, f58_peatland_area(j,manPeat58) - pc58_peatland(j,manPeat58)); * Area used for peat extraction pc58_peatland(j,"peatExtract") = f58_peatland_area(j,"peatExtract"); * Intact peatland area pc58_peatland(j,"intact") = f58_peatland_area(j,"intact"); -* Peatland scaling factor for estimating future peatland dynamics -p58_scaling_factor(j) = sum(land58, pc58_peatland(j,land58)) / sum(land, pcm_land(j,land)); - * Peatland area is fixed to `pc58_peatland` until the year given by s58_fix_peatland v58_peatland.fx(j,land58) = pc58_peatland(j,land58); i58_cost_rewet_recur(t) = 0; @@ -31,7 +28,7 @@ else * Define bounds and costs for peatland area after the year given by s58_fix_peatland v58_peatland.lo(j,land58) = 0; v58_peatland.l(j,land58) = pc58_peatland(j,land58); - v58_peatland.up(j,landDrained58) = Inf; + v58_peatland.up(j,drained58) = Inf; v58_peatland.up(j,"rewetted") = s58_rewetting_switch; v58_peatland.up(j,"intact") = pc58_peatland(j,"intact"); v58_peatland.fx(j,"peatExtract") = pc58_peatland(j,"peatExtract"); @@ -40,3 +37,11 @@ else i58_cost_degrad_recur(t) = s58_cost_degrad_recur; i58_cost_degrad_onetime(t) = s58_cost_degrad_onetime; ); + +* Peatland scaling factors for estimating future peatland dynamics; see macros for details. +p58_scaling_factor_exp(t,j) = m_peatland_scaling_factor_exp(pc58_peatland,pcm_land); +p58_scaling_factor_red(t,j) = m_peatland_scaling_factor_red(pc58_peatland,pcm_land); + +* Peatland weight for distribution of total peatland changes to managed peatland categories +p58_weight(t,j,manPeat58)$(sum(manPeat58_alias, pc58_peatland(j,manPeat58_alias)) > 1e-10) = + pc58_peatland(j,manPeat58) / sum(manPeat58_alias, pc58_peatland(j,manPeat58_alias)); diff --git a/modules/58_peatland/v2/sets.gms b/modules/58_peatland/v2/sets.gms index 0abd629107..d4a99c9441 100644 --- a/modules/58_peatland/v2/sets.gms +++ b/modules/58_peatland/v2/sets.gms @@ -7,13 +7,16 @@ sets - land58 Peatland land types + land58 Peatland categories / intact, crop, past, forestry, peatExtract, unused, rewetted / - landDrained58(land58) Peatland land types + drained58(land58) Drained peatland categories / crop, past, forestry, unused / - landDrainedUsed58(land58) Peatland land types + manPeat58(land58) Drained and managed peatland categories + / crop, past, forestry / + + manLand58(land) Managed main land categories / crop, past, forestry / emis58 Wetland emission types @@ -69,3 +72,5 @@ sets / ; + +alias (manPeat58,manPeat58_alias);