MAgPIE - An Open Source land-use modeling framework

4.14.2

created with goxygen 1.5.1

Natural Vegetation (35_natveg)

Description

The natural vegetation (natveg) land module is one of the land modules in MAgPIE (see also the other land modules: [30_crop], 31_past, 32_forestry, 34_urban). It calculates land and carbon stocks, as well as the biodiversity value, of natural vegetation, which consists of primary forest, secondary forest and other natural land. The module considers land conservation and determines the availability of natural vegetation for land conversion.

Interfaces

Interfaces to other modules

Input

module inputs (A: pot_forest_may24 | B: pot_forest_oct26)
  Description Unit A B
fm_bii_coeff
(bii_class44, potnatveg)
Biodiversity Intactness Index coefficients \(unitless\) x x
fm_carbon_density
(t_all, j, land, c_pools)
LPJmL carbon density for land and carbon pools \(tC/ha\) x x
fm_luh2_side_layers
(j, luh2_side_layers10)
luh2 side layers \(grid cell share\) x x
im_forest_ageclass
(j, ac)
Forest area in 5-year age-classes \(10^6 ha\) x x
im_growing_stock
(t, j, ac, land_timber)
Harvestable stem biomass per ha by age class \(tDM/ha\) x x
pcm_land
(j, land)
Land area in previous time step including possible changes after optimization \(10^6 ha\) x x
pm_carbon_density_other_ac
(t_all, j, ac, ag_pools)
Vegetation other land carbon density for age classes and carbon pools \(tC/ha\) x x
pm_carbon_density_secdforest_ac
(t_all, j, ac, ag_pools)
Vegetation secondary forest carbon density for age classes and carbon pools \(tC/ha\) x x
pm_land_conservation
(t, j, land, consv_type)
Land protection and restoration for all land types \(10^6 ha\) x x
sm_fix_SSP2 year until which all parameters are fixed to SSP2 values \(year\) x x
sm_fix_cc year until which all parameters affected by cc are fixed to historical values \(year\) x x
vm_bv
(j, landcover44, potnatveg)
Biodiversity stock for all land cover classes \(Mha\) x x
vm_carbon_stock
(j, land, c_pools, stockType)
Carbon stock in vegetation soil and litter for different land types \(10^6 tC\) x x
vm_land
(j, land)
Land area of the different land types \(10^6 ha\) x x
vm_landexpansion
(j, land)
Land expansion \(10^6 ha\) x x
vm_lu_transitions
(j, land_from, land_to)
Land transitions between time steps \(10^6 ha\) x x

Output

module outputs
  Description Unit
pm_max_forest_est
(t, j)
Overall forest establishment potential in current time step \(10^6 ha\)
vm_cost_hvarea_natveg
(i)
Cost of harvesting natural vegetation \(10^6 USD_{17MER}\)
vm_land_other
(j, othertype35, ac)
Detailed stock of other land \(10^6 ha\)
vm_landdiff_natveg Aggregated difference in natveg land compared to previous timestep \(10^6 ha\)
vm_natforest_reduction
(j)
Natural forest reduction \(10^6 ha\)
vm_prod_natveg
(j, land_natveg, kforestry)
Production of woody biomass from natural vegetation \(10^6 tDM/yr\)

Realizations

(A) pot_forest_may24

In the pot_forest_may24 realization, land and carbon stock dynamics of natural vegetation are modeled endogenously. The initial spatial distribution of the sub-land-types primary forest, secondary forest and other natural land is based on the LUH3 data set (Chini and Hurtt 2026). Forest establishment is constrained by the potential forest area, which is defined by areas with a potential carbon density of >20 tC/ha and, by default, corrected for grassland ecoregions (Dinerstein et al. 2017), where forest expansion is ecologically inappropriate (Veldman et al. 2015) and LPJmL overestimates forest cover (c35_pot_forest_correction). The remaining forest establishment area in the current time step is provided to the 32_forestry module via the interface parameter pm_max_forest_est. This realization also includes national policies implemented (NPI) and nationally determined contributions to the Paris agreement (NDC) with regard to forest and other land protection. The NPI/NDC polices ramp up until 2030 and are assumed constant thereafter. NPI/NDC land conservation polices are applied on forest and other land, depending on individual country reports. The NPI/NDC policies are treated as minimum constraints and therefore are non-additive, if the land protection targets as provided by the module 22_land_conservation and the interface pm_land_conservation are larger. Additionally, this module includes forest damage and provides the ability to harvest natural vegetation for timber. Wood and woodfuel can be produced from primary forest, secondary forest and other land.

The interface vm_land provides aggregated natveg land pools (ac) to other modules.

\[\begin{multline*} vm\_land(j2,"secdforest") = \sum_{ac} v35\_secdforest(j2,ac) \end{multline*}\]

\[\begin{multline*} vm\_land(j2,"other") = \sum_{othertype35,ac} vm\_land\_other(j2,othertype35,ac) \end{multline*}\]

The total natural land area cannot be smaller than the total natural land conservation target. Area requirements for natural land conservation are derived from WDPA and formulated based on conservation priority areas during future time steps.

\[\begin{multline*} \sum_{land\_natveg} vm\_land(j2,land\_natveg) \geq \sum_{ct,land\_natveg} pm\_land\_conservation(ct,j2,land\_natveg,"protect") \end{multline*}\]

\[\begin{multline*} \sum_{land\_ag} vm\_lu\_transitions(j2,land\_ag,"secdforest") + vm\_lu\_transitions(j2,"forestry","secdforest") \geq p35\_land\_restoration(j2,"secdforest") \end{multline*}\]

\[\begin{multline*} \sum_{land\_ag} vm\_lu\_transitions(j2,land\_ag,"other") \geq p35\_land\_restoration(j2,"other") \end{multline*}\]

Carbon stocks for primary forest, secondary forest or other natural land are calculated as the product of respective area and carbon density. Carbon stocks decline if the area decreases (e.g. due to cropland expansion into forests). In case of abandoned agricultural land (increase of other natural land), natural succession, represented by age-class growth, results in increasing carbon stocks.

\[\begin{multline*} vm\_carbon\_stock(j2,"primforest",ag\_pools,stockType) = m\_carbon\_stock(vm\_land,fm\_carbon\_density,"primforest") \end{multline*}\]

\[\begin{multline*} vm\_carbon\_stock(j2,"secdforest",ag\_pools,stockType) = m\_carbon\_stock\_ac(v35\_secdforest,pm\_carbon\_density\_secdforest\_ac,"ac","ac\_sub") \end{multline*}\]

\[\begin{multline*} vm\_carbon\_stock(j2,"other",ag\_pools,stockType) = m\_carbon\_stock\_ac(vm\_land\_other,p35\_carbon\_density\_other,"othertype35,ac","othertype35,ac\_sub") \end{multline*}\]

The biodiversity value (BV) of primary forest, secondary forest and other land is computed by multiplying their respective land area with bii coefficients, which depend on the age class and whether the potential natural vegetation forest or non-forest (luh2 side layers).

\[\begin{multline*} vm\_bv(j2,"primforest",potnatveg) = vm\_land(j2,"primforest") \cdot fm\_bii\_coeff("primary",potnatveg) \cdot fm\_luh2\_side\_layers(j2,potnatveg) \end{multline*}\]

\[\begin{multline*} vm\_bv(j2,"secdforest",potnatveg) = \sum_{bii\_class\_secd}\left( \sum\left(ac\_to\_bii\_class\_secd(ac,bii\_class\_secd), v35\_secdforest(j2,ac)\right) \cdot fm\_bii\_coeff(bii\_class\_secd,potnatveg)\right) \cdot fm\_luh2\_side\_layers(j2,potnatveg) \end{multline*}\]

\[\begin{multline*} vm\_bv(j2,"other",potnatveg) = \sum_{bii\_class\_secd}\left( \sum_{ac\_to\_bii\_class\_secd(ac,bii\_class\_secd)}\left( \sum\left(othertype35, vm\_land\_other(j2,othertype35,ac)\right)\right) \cdot fm\_bii\_coeff(bii\_class\_secd,potnatveg)\right) \cdot fm\_luh2\_side\_layers(j2,potnatveg) \end{multline*}\]

NPI/NDC land protection policies based on country reports are implemented as minimum forest and other land stocks. They are not interchangeable (as compared to the natural land conservation constraint) and specifically formulated for forest and other land stocks.

\[\begin{multline*} \sum_{land\_forest} vm\_land(j2,land\_forest) \geq \sum_{ct} p35\_min\_forest(ct,j2) \end{multline*}\]

\[\begin{multline*} vm\_land(j2,"other") \geq \sum_{ct} p35\_min\_other(ct,j2) \end{multline*}\]

\[\begin{multline*} vm\_natforest\_reduction(j2) = v35\_primforest\_reduction(j2) + \sum_{ac\_sub} v35\_secdforest\_reduction(j2,ac\_sub) \end{multline*}\]

The following technical calculations are needed for reducing differences in land-use patterns between time steps. The gross change in natural vegetation is calculated based on land expansion and land contraction of other land, and land reduction of primary and secondary forest. This information is then passed to the land module (10_land):

\[\begin{multline*} vm\_landdiff\_natveg = \sum_{j2}\left( \sum_{othertype35}v35\_other\_expansion(j2,othertype35) + \sum_{othertype35,ac\_sub} v35\_other\_reduction(j2,othertype35,ac\_sub) + v35\_secdforest\_expansion(j2) + \sum_{ac\_sub} v35\_secdforest\_reduction(j2,ac\_sub) + v35\_primforest\_reduction(j2)\right) \end{multline*}\]

\[\begin{multline*} v35\_other\_expansion(j2,othertype35) = \sum_{ac\_est} vm\_land\_other(j2,othertype35,ac\_est) \end{multline*}\]

\[\begin{multline*} v35\_other\_reduction(j2,othertype35,ac\_sub) = pc35\_land\_other(j2,othertype35,ac\_sub) - vm\_land\_other(j2,othertype35,ac\_sub) \end{multline*}\]

\[\begin{multline*} v35\_secdforest\_expansion(j2) = \sum_{ac\_est} v35\_secdforest(j2,ac\_est) \end{multline*}\]

\[\begin{multline*} v35\_secdforest\_reduction(j2,ac\_sub) = pc35\_secdforest(j2,ac\_sub) - v35\_secdforest(j2,ac\_sub) \end{multline*}\]

\[\begin{multline*} v35\_primforest\_reduction(j2) = pcm\_land(j2,"primforest") - vm\_land(j2,"primforest") \end{multline*}\]

For natural forest, per-hectare harvesting costs are positive to make sure that older forest with higher growing stock is preferred over younger forest. To mimic the difficulties in accessing primary forest, per-hectare harvesting costs for primary forest are higher than for secondary forest. Harvesting costs are paid everytime natural vegetation is harvested. The “real” harvested area are received from the timber module 73_timber.

\[\begin{multline*} vm\_cost\_hvarea\_natveg(i2) = \sum_{ct,cell(i2,j2),ac\_sub} v35\_hvarea\_secdforest(j2,ac\_sub) \cdot s35\_timber\_harvest\_cost\_secdforest + \sum_{ct,cell(i2,j2),othertype35,ac\_sub} v35\_hvarea\_other(j2,othertype35,ac\_sub) \cdot s35\_timber\_harvest\_cost\_other + \sum_{ct,cell(i2,j2)} v35\_hvarea\_primforest(j2) \cdot s35\_timber\_harvest\_cost\_primforest \end{multline*}\]

Woody biomass production from secondary forests is calculated by multiplying the area under production with corresponding growing stock of secondary forests, divided by the timestep length.

\[\begin{multline*} \sum_{kforestry} vm\_prod\_natveg(j2,"secdforest",kforestry) = \frac{ \sum_{ac\_sub}\left( v35\_hvarea\_secdforest(j2,ac\_sub) \cdot \sum\left(ct,im\_growing\_stock(ct,j2,ac\_sub,"secdforest")\right)\right) }{ m\_timestep\_length\_forestry} \end{multline*}\]

Woody biomass production from primary forests is calculated by multiplying the area under production with corresponding growing stock of primary forests, divided by the timestep length.

\[\begin{multline*} \sum_{kforestry} vm\_prod\_natveg(j2,"primforest",kforestry) = v35\_hvarea\_primforest(j2) \cdot \frac{ \sum_{ct} im\_growing\_stock(ct,j2,"acx","primforest") }{ m\_timestep\_length\_forestry} \end{multline*}\]

Woody biomass production from other land is calculated by multiplying the area under production with corresponding growing stock of other land, divided by the timestep length.

\[\begin{multline*} \sum_{kforestry} vm\_prod\_natveg(j2,"other",kforestry) = \frac{ \left(\sum_{ac\_sub}\left( v35\_hvarea\_other(j2,"othernat",ac\_sub) \cdot \sum_{ct} im\_growing\_stock(ct,j2,ac\_sub,"other")\right) + \sum_{ac\_sub}\left( v35\_hvarea\_other(j2,"youngsecdf",ac\_sub) \cdot \sum_{ct} im\_growing\_stock(ct,j2,ac\_sub,"secdforest")\right)\right) }{ m\_timestep\_length\_forestry } \end{multline*}\]

Following equations show the harvested area from natural vegetation i.e. primary forests, secondary forests and other land. Harvested area for production purposes can be lower than or equal to the land reduction in natural vegetation, as not all lost area is (or should be) used for production.

\[\begin{multline*} v35\_hvarea\_secdforest(j2,ac\_sub) \leq v35\_secdforest\_reduction(j2,ac\_sub) \end{multline*}\]

\[\begin{multline*} v35\_hvarea\_primforest(j2) \leq v35\_primforest\_reduction(j2) \end{multline*}\]

\[\begin{multline*} v35\_hvarea\_other(j2,othertype35,ac\_sub) \leq v35\_other\_reduction(j2,othertype35,ac\_sub) \end{multline*}\]

The constraint for overall forest establishment, including forestry, is given by the remaining potential forest area, which is derived from the potential natural forestarea minus the recovering secondary forest area.

\[\begin{multline*} \sum_{land\_forest} vm\_landexpansion(j2,land\_forest) \leq \sum_{ct}pm\_max\_forest\_est(ct,j2) - \sum_{ac} vm\_land\_other(j2,"youngsecdf",ac) \end{multline*}\]

Harvested secondary forest is still considered secondary forests due to restrictive NPI definitions. Also primary forest harvested will be considered to be secondary forest i.e., harvested primary forest gets reclassified as secondary forest and ends up in the youngest age-class (and follows regrowth)

\[\begin{multline*} \sum_{ac\_est} v35\_secdforest(j2,ac\_est) = \sum_{ac\_sub}v35\_hvarea\_secdforest(j2,ac\_sub) + v35\_hvarea\_primforest(j2) + p35\_land\_restoration(j2,"secdforest") \end{multline*}\]

Harvested other land is still considered other land

\[\begin{multline*} \sum_{ac\_est} vm\_land\_other(j2,"othernat",ac\_est) = \sum_{othertype35,ac\_sub}v35\_hvarea\_other(j2,othertype35,ac\_sub) + vm\_landexpansion(j2,"other") \end{multline*}\]

The following two constraints distribute additions to secdforest and other land over ac_est, which depends on the time step length (e.g. ac0 and ac5 for a 10 year time step).

\[\begin{multline*} v35\_secdforest(j2,ac\_est) = \frac{ \sum_{ac\_est2} v35\_secdforest(j2,ac\_est2)}{card(ac\_est2)} \end{multline*}\]

\[\begin{multline*} vm\_land\_other(j2,"othernat",ac\_est) = \frac{ \sum_{ac\_est2} vm\_land\_other(j2,"othernat",ac\_est2)}{card(ac\_est2)} \end{multline*}\]

If the vegetation carbon density in a simulation unit due to regrowth exceeds a threshold of 20 tC/ha the respective area is shifted from young secondary forest, which is still considered other land, to secondary forest land. Uses the secdforest carbon curve so natural succession from abandoned cropland matures at realistic rates; the FRA 2025 match is a wood-only multiplier in module 14 and never bends carbon.

p35_maturesecdf(t,j,ac)$(not sameas(ac,"acx")) =
      p35_land_other(t,j,"youngsecdf",ac)$(pm_carbon_density_secdforest_ac(t,j,ac,"vegc") > 20);
p35_land_other(t,j,"youngsecdf",ac) = p35_land_other(t,j,"youngsecdf",ac) - p35_maturesecdf(t,j,ac);
p35_secdforest(t,j,ac) = p35_secdforest(t,j,ac) + p35_maturesecdf(t,j,ac);

Limitations The satellite age-class data (module 28_ageclass) contain a large share of very young secondary forest whose regrowth MAgPIE would over-credit, because disturbances that keep this forest young in reality (shifting cultivation, fire, small-scale clearing) are not represented explicitly. To avoid this, the youngest secondary-forest age classes are initialised with the area of the ~35-year class. Additionally, in this module realization, harvested secondary forest stays secondary forest and harvested primary forest is reclassified as secondary forest. Secondary-forest harvest is not age-differentiated, so cost-minimising harvest draws first on the oldest, highest-carbon stands (the planted-forest pools are instead harvested at their rotation age). The resulting concentration in old secondary forest is stronger than managed-rotation forestry practice in some regions; an age-dependent or regionally differentiated harvest preference for secondary forest is left to future work. The correction of the potential forest area for grassland ecoregions uses a static ecoregion map, so the grassland/forest boundary does not shift with climate over the scenario horizon.

(B) pot_forest_oct26

In the pot_forest_oct26 realization, land and carbon stock dynamics of natural vegetation are modeled endogenously. The initial spatial distribution of the sub-land-types primary forest, secondary forest and other natural land is based on the LUH3 data set (Chini and Hurtt 2026). Forest establishment is constrained by the potential forest area, which is defined by areas with a potential carbon density of >20 tC/ha and, by default, corrected for grassland ecoregions (Dinerstein et al. 2017), where forest expansion is ecologically inappropriate (Veldman et al. 2015) and LPJmL overestimates forest cover (c35_pot_forest_correction). The remaining forest establishment area in the current time step is provided to the 32_forestry module via the interface parameter pm_max_forest_est. This realization also includes national policies implemented (NPI) and nationally determined contributions to the Paris agreement (NDC) with regard to forest and other land protection. The NPI/NDC polices ramp up until 2030 and are assumed constant thereafter. NPI/NDC land conservation polices are applied on forest and other land, depending on individual country reports. The NPI/NDC policies are treated as minimum constraints and therefore are non-additive, if the land protection targets as provided by the module 22_land_conservation and the interface pm_land_conservation are larger. Additionally, this module includes forest damage and provides the ability to harvest natural vegetation for timber. Wood and woodfuel can be produced from primary forest, secondary forest and other land. This realization differs from pot_forest_may24 only in the forest damage from shifting cultivation: the share of forest disturbed per year is derived from the tree cover loss by dominant driver of Sims et al. (2025) instead of the regional table of Curtis et al. (2018).

The interface vm_land provides aggregated natveg land pools (ac) to other modules.

\[\begin{multline*} vm\_land(j2,"secdforest") = \sum_{ac} v35\_secdforest(j2,ac) \end{multline*}\]

\[\begin{multline*} vm\_land(j2,"other") = \sum_{othertype35,ac} vm\_land\_other(j2,othertype35,ac) \end{multline*}\]

The total natural land area cannot be smaller than the total natural land conservation target. Area requirements for natural land conservation are derived from WDPA and formulated based on conservation priority areas during future time steps.

\[\begin{multline*} \sum_{land\_natveg} vm\_land(j2,land\_natveg) \geq \sum_{ct,land\_natveg} pm\_land\_conservation(ct,j2,land\_natveg,"protect") \end{multline*}\]

\[\begin{multline*} \sum_{land\_ag} vm\_lu\_transitions(j2,land\_ag,"secdforest") + vm\_lu\_transitions(j2,"forestry","secdforest") \geq p35\_land\_restoration(j2,"secdforest") \end{multline*}\]

\[\begin{multline*} \sum_{land\_ag} vm\_lu\_transitions(j2,land\_ag,"other") \geq p35\_land\_restoration(j2,"other") \end{multline*}\]

Carbon stocks for primary forest, secondary forest or other natural land are calculated as the product of respective area and carbon density. Carbon stocks decline if the area decreases (e.g. due to cropland expansion into forests). In case of abandoned agricultural land (increase of other natural land), natural succession, represented by age-class growth, results in increasing carbon stocks.

\[\begin{multline*} vm\_carbon\_stock(j2,"primforest",ag\_pools,stockType) = m\_carbon\_stock(vm\_land,fm\_carbon\_density,"primforest") \end{multline*}\]

\[\begin{multline*} vm\_carbon\_stock(j2,"secdforest",ag\_pools,stockType) = m\_carbon\_stock\_ac(v35\_secdforest,pm\_carbon\_density\_secdforest\_ac,"ac","ac\_sub") \end{multline*}\]

\[\begin{multline*} vm\_carbon\_stock(j2,"other",ag\_pools,stockType) = m\_carbon\_stock\_ac(vm\_land\_other,p35\_carbon\_density\_other,"othertype35,ac","othertype35,ac\_sub") \end{multline*}\]

The biodiversity value (BV) of primary forest, secondary forest and other land is computed by multiplying their respective land area with bii coefficients, which depend on the age class and whether the potential natural vegetation forest or non-forest (luh2 side layers).

\[\begin{multline*} vm\_bv(j2,"primforest",potnatveg) = vm\_land(j2,"primforest") \cdot fm\_bii\_coeff("primary",potnatveg) \cdot fm\_luh2\_side\_layers(j2,potnatveg) \end{multline*}\]

\[\begin{multline*} vm\_bv(j2,"secdforest",potnatveg) = \sum_{bii\_class\_secd}\left( \sum\left(ac\_to\_bii\_class\_secd(ac,bii\_class\_secd), v35\_secdforest(j2,ac)\right) \cdot fm\_bii\_coeff(bii\_class\_secd,potnatveg)\right) \cdot fm\_luh2\_side\_layers(j2,potnatveg) \end{multline*}\]

\[\begin{multline*} vm\_bv(j2,"other",potnatveg) = \sum_{bii\_class\_secd}\left( \sum_{ac\_to\_bii\_class\_secd(ac,bii\_class\_secd)}\left( \sum\left(othertype35, vm\_land\_other(j2,othertype35,ac)\right)\right) \cdot fm\_bii\_coeff(bii\_class\_secd,potnatveg)\right) \cdot fm\_luh2\_side\_layers(j2,potnatveg) \end{multline*}\]

NPI/NDC land protection policies based on country reports are implemented as minimum forest and other land stocks. They are not interchangeable (as compared to the natural land conservation constraint) and specifically formulated for forest and other land stocks.

\[\begin{multline*} \sum_{land\_forest} vm\_land(j2,land\_forest) \geq \sum_{ct} p35\_min\_forest(ct,j2) \end{multline*}\]

\[\begin{multline*} vm\_land(j2,"other") \geq \sum_{ct} p35\_min\_other(ct,j2) \end{multline*}\]

\[\begin{multline*} vm\_natforest\_reduction(j2) = v35\_primforest\_reduction(j2) + \sum_{ac\_sub} v35\_secdforest\_reduction(j2,ac\_sub) \end{multline*}\]

The following technical calculations are needed for reducing differences in land-use patterns between time steps. The gross change in natural vegetation is calculated based on land expansion and land contraction of other land, and land reduction of primary and secondary forest. This information is then passed to the land module (10_land):

\[\begin{multline*} vm\_landdiff\_natveg = \sum_{j2}\left( \sum_{othertype35}v35\_other\_expansion(j2,othertype35) + \sum_{othertype35,ac\_sub} v35\_other\_reduction(j2,othertype35,ac\_sub) + v35\_secdforest\_expansion(j2) + \sum_{ac\_sub} v35\_secdforest\_reduction(j2,ac\_sub) + v35\_primforest\_reduction(j2)\right) \end{multline*}\]

\[\begin{multline*} v35\_other\_expansion(j2,othertype35) = \sum_{ac\_est} vm\_land\_other(j2,othertype35,ac\_est) \end{multline*}\]

\[\begin{multline*} v35\_other\_reduction(j2,othertype35,ac\_sub) = pc35\_land\_other(j2,othertype35,ac\_sub) - vm\_land\_other(j2,othertype35,ac\_sub) \end{multline*}\]

\[\begin{multline*} v35\_secdforest\_expansion(j2) = \sum_{ac\_est} v35\_secdforest(j2,ac\_est) \end{multline*}\]

\[\begin{multline*} v35\_secdforest\_reduction(j2,ac\_sub) = pc35\_secdforest(j2,ac\_sub) - v35\_secdforest(j2,ac\_sub) \end{multline*}\]

\[\begin{multline*} v35\_primforest\_reduction(j2) = pcm\_land(j2,"primforest") - vm\_land(j2,"primforest") \end{multline*}\]

For natural forest, per-hectare harvesting costs are positive to make sure that older forest with higher growing stock is preferred over younger forest. To mimic the difficulties in accessing primary forest, per-hectare harvesting costs for primary forest are higher than for secondary forest. Harvesting costs are paid everytime natural vegetation is harvested. The “real” harvested area are received from the timber module 73_timber.

\[\begin{multline*} vm\_cost\_hvarea\_natveg(i2) = \sum_{ct,cell(i2,j2),ac\_sub} v35\_hvarea\_secdforest(j2,ac\_sub) \cdot s35\_timber\_harvest\_cost\_secdforest + \sum_{ct,cell(i2,j2),othertype35,ac\_sub} v35\_hvarea\_other(j2,othertype35,ac\_sub) \cdot s35\_timber\_harvest\_cost\_other + \sum_{ct,cell(i2,j2)} v35\_hvarea\_primforest(j2) \cdot s35\_timber\_harvest\_cost\_primforest \end{multline*}\]

Woody biomass production from secondary forests is calculated by multiplying the area under production with corresponding growing stock of secondary forests, divided by the timestep length.

\[\begin{multline*} \sum_{kforestry} vm\_prod\_natveg(j2,"secdforest",kforestry) = \frac{ \sum_{ac\_sub}\left( v35\_hvarea\_secdforest(j2,ac\_sub) \cdot \sum\left(ct,im\_growing\_stock(ct,j2,ac\_sub,"secdforest")\right)\right) }{ m\_timestep\_length\_forestry} \end{multline*}\]

Woody biomass production from primary forests is calculated by multiplying the area under production with corresponding growing stock of primary forests, divided by the timestep length.

\[\begin{multline*} \sum_{kforestry} vm\_prod\_natveg(j2,"primforest",kforestry) = v35\_hvarea\_primforest(j2) \cdot \frac{ \sum_{ct} im\_growing\_stock(ct,j2,"acx","primforest") }{ m\_timestep\_length\_forestry} \end{multline*}\]

Woody biomass production from other land is calculated by multiplying the area under production with corresponding growing stock of other land, divided by the timestep length.

\[\begin{multline*} \sum_{kforestry} vm\_prod\_natveg(j2,"other",kforestry) = \frac{ \left(\sum_{ac\_sub}\left( v35\_hvarea\_other(j2,"othernat",ac\_sub) \cdot \sum_{ct} im\_growing\_stock(ct,j2,ac\_sub,"other")\right) + \sum_{ac\_sub}\left( v35\_hvarea\_other(j2,"youngsecdf",ac\_sub) \cdot \sum_{ct} im\_growing\_stock(ct,j2,ac\_sub,"secdforest")\right)\right) }{ m\_timestep\_length\_forestry } \end{multline*}\]

Following equations show the harvested area from natural vegetation i.e. primary forests, secondary forests and other land. Harvested area for production purposes can be lower than or equal to the land reduction in natural vegetation, as not all lost area is (or should be) used for production.

\[\begin{multline*} v35\_hvarea\_secdforest(j2,ac\_sub) \leq v35\_secdforest\_reduction(j2,ac\_sub) \end{multline*}\]

\[\begin{multline*} v35\_hvarea\_primforest(j2) \leq v35\_primforest\_reduction(j2) \end{multline*}\]

\[\begin{multline*} v35\_hvarea\_other(j2,othertype35,ac\_sub) \leq v35\_other\_reduction(j2,othertype35,ac\_sub) \end{multline*}\]

The constraint for overall forest establishment, including forestry, is given by the remaining potential forest area, which is derived from the potential natural forestarea minus the recovering secondary forest area.

\[\begin{multline*} \sum_{land\_forest} vm\_landexpansion(j2,land\_forest) \leq \sum_{ct}pm\_max\_forest\_est(ct,j2) - \sum_{ac} vm\_land\_other(j2,"youngsecdf",ac) \end{multline*}\]

Harvested secondary forest is still considered secondary forests due to restrictive NPI definitions. Also primary forest harvested will be considered to be secondary forest i.e., harvested primary forest gets reclassified as secondary forest and ends up in the youngest age-class (and follows regrowth)

\[\begin{multline*} \sum_{ac\_est} v35\_secdforest(j2,ac\_est) = \sum_{ac\_sub}v35\_hvarea\_secdforest(j2,ac\_sub) + v35\_hvarea\_primforest(j2) + p35\_land\_restoration(j2,"secdforest") \end{multline*}\]

Harvested other land is still considered other land

\[\begin{multline*} \sum_{ac\_est} vm\_land\_other(j2,"othernat",ac\_est) = \sum_{othertype35,ac\_sub}v35\_hvarea\_other(j2,othertype35,ac\_sub) + vm\_landexpansion(j2,"other") \end{multline*}\]

The following two constraints distribute additions to secdforest and other land over ac_est, which depends on the time step length (e.g. ac0 and ac5 for a 10 year time step).

\[\begin{multline*} v35\_secdforest(j2,ac\_est) = \frac{ \sum_{ac\_est2} v35\_secdforest(j2,ac\_est2)}{card(ac\_est2)} \end{multline*}\]

\[\begin{multline*} vm\_land\_other(j2,"othernat",ac\_est) = \frac{ \sum_{ac\_est2} vm\_land\_other(j2,"othernat",ac\_est2)}{card(ac\_est2)} \end{multline*}\]

If the vegetation carbon density in a simulation unit due to regrowth exceeds a threshold of 20 tC/ha the respective area is shifted from young secondary forest, which is still considered other land, to secondary forest land. Uses the secdforest carbon curve so natural succession from abandoned cropland matures at realistic rates; the FRA 2025 match is a wood-only multiplier in module 14 and never bends carbon.

p35_maturesecdf(t,j,ac)$(not sameas(ac,"acx")) =
      p35_land_other(t,j,"youngsecdf",ac)$(pm_carbon_density_secdforest_ac(t,j,ac,"vegc") > 20);
p35_land_other(t,j,"youngsecdf",ac) = p35_land_other(t,j,"youngsecdf",ac) - p35_maturesecdf(t,j,ac);
p35_secdforest(t,j,ac) = p35_secdforest(t,j,ac) + p35_maturesecdf(t,j,ac);

Limitations The satellite age-class data (module 28_ageclass) contain a large share of very young secondary forest whose regrowth MAgPIE would over-credit, because disturbances that keep this forest young in reality (shifting cultivation, fire, small-scale clearing) are not represented explicitly; shifting cultivation enters only as the uniform regional loss rate above. To avoid this, the youngest secondary-forest age classes are initialised with the area of the ~35-year class. Additionally, in this module realization, harvested secondary forest stays secondary forest and harvested primary forest is reclassified as secondary forest. Secondary-forest harvest is not age-differentiated, so cost-minimising harvest draws first on the oldest, highest-carbon stands (the planted-forest pools are instead harvested at their rotation age). The resulting concentration in old secondary forest is stronger than managed-rotation forestry practice in some regions; an age-dependent or regionally differentiated harvest preference for secondary forest is left to future work. The correction of the potential forest area for grassland ecoregions uses a static ecoregion map, so the grassland/forest boundary does not shift with climate over the scenario horizon.

Definitions

Objects

module-internal objects (A: pot_forest_may24 | B: pot_forest_oct26)
  Description Unit A B
f35_forest_disturbance_share
(i)
Share of area damaged by forest disturbances \(1\) x
f35_forest_lost_share
(i, driver_source)
Share of area damaged by forest fires \(1\) x x
f35_forest_shock
(t_all, shock_scen)
Forest carbon shock scenarios \(area share affected/year\) x x
f35_min_land_stock
(t_all, j, pol35, pol_stock35)
Avoided deforestation and land protection policies [minimum land stock] \(Mha\) x x
f35_pot_forest_area
(t_all, j)
Potential forest area \(10^6 ha\) x x
i35_land_other
(j, othertype35, ac)
Initial other land \(10^6 ha\) x x
i35_secdforest
(j, ac)
Initial secdforest \(10^6 ha\) x x
p35_carbon_density_other
(t, j, othertype35, ac, ag_pools)
Carbon density other land \(tC/ha\) x x
p35_damage_fader
(t_all)
Fader for forest damage \(1\) x x
p35_disturbance_loss_primf
(t, j)
Loss due to disturbances in primary forest \(10^6 ha\) x x
p35_disturbance_loss_secdf
(t, j, ac)
Loss due to disturbances in secondary forest \(10^6 ha\) x x
p35_forest_recovery_area
(t, j, ac)
Recovered forest \(10^6 ha\) x x
p35_land_other
(t, j, othertype35, ac)
Other land per age class \(10^6 ha\) x x
p35_land_restoration
(j, land_natveg)
Actual secondary forest and other land restoration area \(10^6 ha\) x x
p35_land_start_ac
(j, ac, land_natveg)
Initial Natural vegetation area \(10^6 ha\) x x
p35_maturesecdf
(t, j, ac)
Matured secondary forest \(10^6 ha\) x x
p35_min_forest
(t, j)
Minimum forest and other stock based on NPI or NDC targets \(10^6 ha\) x x
p35_min_other
(t, j)
Minimum forest and other stock based on NPI or NDC targets \(10^6 ha\) x x
p35_protection_dist
(j, ac)
Distribution of secondary forest protection \(1\) x x
p35_restoration_shift
(j)
Restoration of other land instead of secdforest \(10^6 ha\) x x
p35_secdf_ageclass
(j, ac)
Secondary forest area in 5-year age-classes \(10^6 ha\) x x
p35_secdf_ageclass_dist
(j, ac)
Share of age-classes in secondary forest \(1\) x x
p35_secdforest
(t, j, ac)
Secdforest per age class \(10^6 ha\) x x
pc35_forest_recovery_shr
(j)
Forest share in natveg recovery \(1\) x x
pc35_land_other
(j, othertype35, ac)
Other land per age class in current time step \(10^6 ha\) x x
pc35_max_forest_recovery
(j)
Maximum forest recovery potential after land abandonement \(10^6 ha\) x x
pc35_secdforest
(j, ac)
Secdforest per age class in current time step \(10^6 ha\) x x
q35_bv_other
(j, potnatveg)
Biodiversity value of other land \(10^6 ha\) x x
q35_bv_primforest
(j, potnatveg)
Biodiversity value of primary forest \(10^6 ha\) x x
q35_bv_secdforest
(j, potnatveg)
Biodiversity value of secondary forest \(10^6 ha\) x x
q35_carbon_other
(j, ag_pools, stockType)
Other land carbon stock calculation \(10^6 tC\) x x
q35_carbon_primforest
(j, ag_pools, stockType)
Primforest carbon stock calculation \(10^6 tC\) x x
q35_carbon_secdforest
(j, ag_pools, stockType)
Secdforest carbon stock calculation \(10^6 tC\) x x
q35_cost_hvarea
(i)
Cost of harvesting natural vegetation \(10^6 USD_{17MER}\) x x
q35_hvarea_other
(j, othertype35, ac)
Harvested area other land \(10^6 ha\) x x
q35_hvarea_primforest
(j)
Harvested area primforest \(10^6 ha\) x x
q35_hvarea_secdforest
(j, ac)
Harvested area secdforest \(10^6 ha\) x x
q35_land_other
(j)
Other land pool calculation \(10^6 ha\) x x
q35_land_secdforest
(j)
Secdforest land pool calculation \(10^6 ha\) x x
q35_landdiff Difference in natveg land \(10^6 ha\) x x
q35_max_forest_establishment
(j)
Maximum forestry regeneration based on potential forest area \(10^6 ha\) x x
q35_min_forest
(j)
Minimum forest land constraint \(10^6 ha\) x x
q35_min_other
(j)
Minimum other land constraint \(10^6 ha\) x x
q35_natforest_reduction
(j)
Natural forest reduction \(10^6 ha\) x x
q35_natveg_conservation
(j)
Total natural vegetation conservation constraint \(10^6 ha\) x x
q35_other_est
(j, ac)
Distribution of other land additions over ac_est \(10^6 ha\) x x
q35_other_expansion
(j, othertype35)
Other land expansion \(10^6 ha\) x x
q35_other_reduction
(j, othertype35, ac)
Other land reduction \(10^6 ha\) x x
q35_other_regeneration
(j)
Other land regeneration \(10^6 ha\) x x
q35_other_restoration
(j)
Other land restoration constraint \(10^6 ha\) x x
q35_primforest_reduction
(j)
Primforest reduction \(10^6 ha\) x x
q35_prod_other
(j)
Production of woody biomass from other land \(10^6 tDM/yr\) x x
q35_prod_primforest
(j)
Production of woody biomass from primary forests \(10^6 tDM/yr\) x x
q35_prod_secdforest
(j)
Production of woody biomass from secondary forests \(10^6 tDM/yr\) x x
q35_secdforest_est
(j, ac)
Distribution of secdforest additions over ac_est \(10^6 ha\) x x
q35_secdforest_expansion
(j)
Secdforest expansion \(10^6 ha\) x x
q35_secdforest_reduction
(j, ac)
Secdforest reduction \(10^6 ha\) x x
q35_secdforest_regeneration
(j)
Secondary forest regeneration \(10^6 ha\) x x
q35_secdforest_restoration
(j)
Secondary forest restoration constraint \(10^6 ha\) x x
s35_forest_damage Damage simulation in forests \(0=none 1=shifting agriculture 2= Damage from shifting agriculture is faded out by c35_forest_damage_end 4= f35_forest_shock scenario\) x x
s35_forest_damage_end Year of forest damage end \(1\) x x
s35_hvarea Flag for harvested area and establishment \(0=zero 1=exogenous 2=endogenous\) x x
s35_hvarea_other annual other land harvest rate for s35_hvarea equals 1 \(percent/year\) x x
s35_hvarea_primforest annual primforest harvest rate for s35_hvarea equals 1 \(percent/year\) x x
s35_hvarea_secdforest annual secdforest harvest rate for s35_hvarea equals 1 \(percent/year\) x x
s35_natveg_harvest_shr Constrains the allowed wood harvest from natural vegetation (1=unconstrained) \(1\) x x
s35_npi_ndc_reversal Year in which NPI NDC reversal should take place \(1\) x x
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\) x x
s35_shift number of 5-year age-classes corresponding to current time step length \(1\) x x
s35_timber_harvest_cost_other Cost for harvesting from other land \(USD_{17MER}/ha\) x x
s35_timber_harvest_cost_primforest Cost for harvesting from primary forest \(USD_{17MER}/ha\) x x
s35_timber_harvest_cost_secdforest Cost for harvesting from secondary forest \(USD_{17MER}/ha\) x x
v35_hvarea_other
(j, othertype35, ac)
Harvested area from other land \(10^6 ha\) x x
v35_hvarea_primforest
(j)
Harvested area from primary forest \(10^6 ha\) x x
v35_hvarea_secdforest
(j, ac)
Harvested area from secondary forest \(10^6 ha\) x x
v35_other_expansion
(j, othertype35)
Other land expansion compared to previous timestep \(10^6 ha\) x x
v35_other_reduction
(j, othertype35, ac)
Other land reduction compared to previous timestep \(10^6 ha\) x x
v35_primforest_reduction
(j)
Primforest reduction compared to previous timestep \(10^6 ha\) x x
v35_secdforest
(j, ac)
Detailed stock of secdforest \(10^6 ha\) x x
v35_secdforest_expansion
(j)
Secdforest expansion compared to previous timestep \(10^6 ha\) x x
v35_secdforest_reduction
(j, ac)
Secdforest reduction compared to previous timestep \(10^6 ha\) x x

Sets

sets in use
  description
ac Age classes
ac_est(ac) Dynamic subset of age classes for establishment
ac_sub(ac) Dynamic subset of age classes excluding establishment
ac_to_bii_class_secd(ac, bii_class_secd) Mapping between forest ageclasses and bii coefficent land cover classes
ac_young(ac) Young age classes (below about 35 years)
ag_pools(c_pools) Above ground carbon pools
age Population age groups
bii_class44 bii coefficent land cover classes
bii_class_secd(bii_class44) bii coefficent land cover classes secondary vegetation
c_pools Carbon pools
cell(i, j) number of LPJ cells per region i
combined_loss(driver_source) Combined loss from fire plus agriculture
consv_type Type of land conservation
ct(t) Current time period
driver_source Source of deforestation drivers
i all economic regions
i2(i) World regions (dynamic set)
j number of LPJ cells
j2(j) Spatial Clusters (dynamic set)
kforestry(k) forestry products
land Land pools
land_ag(land) Agricultural land pools
land_forest(land_timber) Forested land pools
land_natveg(land_timber) Natural vegetation land pools
land_timber(land) land from which timber can be taken away
landcover44 land cover classes used in bii calculation
luh2_side_layers10 side layers from LUH2
othertype35 Other land types
pol35 Land protection policy
pol_stock35 Land types for land protection policies
potnatveg(luh2_side_layers10) potentially forested biomes
shock_scen Scenario name of forest carbon shock
stockType Carbon stock types
t(t_all) Simulated time periods
t_all(t_ext) 5-year time periods
t_past(t_all) Timesteps with observed data
type GAMS variable attribute used for the output

Authors

Florian Humpenöder, Abhijeet Mishra, Patrick v. Jeetze

See Also

09_drivers, 10_land, 11_costs, 14_yields, 22_land_conservation, 28_ageclass, 32_forestry, 44_biodiversity, 52_carbon, 56_ghg_policy, 59_som, 73_timber

References

Chini, Louise, and George Hurtt. 2026. “Land-Use Harmonization 3 V1.2 for CMIP7 Historical (LUH3 V1.2).” Zenodo. https://doi.org/10.5281/zenodo.19261724.
Curtis, Philip G., Christy M. Slay, Nancy L. Harris, Alexandra Tyukavina, and Matthew C. Hansen. 2018. “Classifying Drivers of Global Forest Loss.” Science 361 (6407): 1108–11. https://doi.org/10.1126/science.aau3445.
Dinerstein, Eric, David Olson, Anup Joshi, Carly Vynne, Neil D. Burgess, Eric Wikramanayake, Nathan Hahn, et al. 2017. “An Ecoregion-Based Approach to Protecting Half the Terrestrial Realm.” BioScience 67 (6): 534–45. https://doi.org/10.1093/biosci/bix014.
Sims, Michelle J., Radost Stanimirova, Anton Raichuk, Maxim Neumann, Jessica Richter, Forrest Follett, James MacCarthy, et al. 2025. “Global Drivers of Forest Loss at 1 Km Resolution.” Environmental Research Letters 20 (7): 074027. https://doi.org/10.1088/1748-9326/add606.
Veldman, Joseph W., Gerhard E. Overbeck, Daniel Negreiros, Gregory Mahy, Soizig Le Stradic, G. Wilson Fernandes, Giselda Durigan, Elise Buisson, Francis E. Putz, and William J. Bond. 2015. “Where Tree Planting and Forest Expansion Are Bad for Biodiversity and Ecosystem Services.” BioScience 65 (10): 1011–18. https://doi.org/10.1093/biosci/biv118.