Forest growth simulation

Miquel De Caceres

2020-11-05

About this vignette

This document describes how to run a growth model of medfate. This document is meant to teach users to run the simulation model within R. All the details of the model design and formulation can be found at https://vegmod.ctfc.cat/software/medfate.

Preparing model inputs

Any forest growth model needs information on climate, vegetation and soils of the forest stand to be simulated. Moreover, since models in medfate differentiate between species, information on species-specific model parameters is also needed. In this subsection we explain the different steps (including optional pathways) to prepare all the data needed to run function growth().

Soils

Required soil data

Simulation models in medfate require information on the physical attributes of soil, namely soil depth, texture, bulk density and rock fragment content. Soil information needs to be entered as a data frame with soil layers in rows and physical attributes in columns. The model accepts different layer definitions (from one to five layers). Soil physical attributes can be initialized to default values, for a given number of layers, using function defaultSoilParams():

spar = defaultSoilParams(2)
print(spar)
##   widths clay sand om  bd rfc
## 1    300   25   25 NA 1.5  25
## 2    700   25   25 NA 1.5  45

where widths are soil layer widths in mm; clay and sand are the percentage of clay and sand, in percent of dry weight, om stands for organic matter, bd is bulk density (in g·cm\(^{-3}\)) and rfc the percentage of rock fragments. Because soil properties vary strongly at fine spatial scales, ideally soil physical attributes should be measured on samples taken at the forest stand to be simulated. For those users lacking such data, soil properties modelled at larger scales are available via soilgrids.org (see function soilgridsParams()).

Soil input object

The soil input for function growth() is actually an object of class soil that is created using a function with the same name:

examplesoil = soil(spar, VG_PTF = "Toth")
names(examplesoil)
##  [1] "SoilDepth"    "W"            "SWE"          "Temp"         "Ksoil"       
##  [6] "Gsoil"        "dVec"         "sand"         "clay"         "om"          
## [11] "VG_alpha"     "VG_n"         "VG_theta_res" "VG_theta_sat" "Ksat"        
## [16] "Kdrain"       "macro"        "bd"           "rfc"

In addition to the physical soil description, this object contains soil parameters needed for soil water balance simulations. For example, macro specifies the macroporosity of each layer; Gsoil and Ksoil are parameters needed to model infiltration of water into the soil. With VG_PTF = "Toth", we specify that van Genuchten parameters are estimated from texture using the pedotransfer functions of Toth et al (2015). The details of all elements in the soil object can be found in the help page for function soil().

The soil object is also used to store the moisture degree of each soil layer. In particular, W contains the state variable that represents moisture (i.e. the proportion of moisture relative to field capacity), which is normally initialized to 1 for each layer:

examplesoil$W
## [1] 1 1

Analogously, Temp contains the temperature (in degrees) of soil layers, initialized to missing values:

examplesoil$Temp
## [1] NA NA

It is important to remember that, unlike normal objects in R, any simulation will modify the values of state variables in soil object. That is, the state of the soil at the end of the simulated process (i.e. W) will be stored (the same for Temp). Hence, one can use the same object to simulate water balance sequentially and the final state of one simulation is the initial state of the next.

Water retention curves

At any time, one can print the status of the soil object using its print function:

print(examplesoil, model = "SX")
## Soil depth (mm): 1000 
## 
## Layer  1  [ 0  to  300 mm ] 
##     clay (%): 25 silt (%): 50 sand (%): 25 organic matter (%): NA [ Silt loam ]
##     Rock fragment content (%): 25 Macroporosity (%): 5 
##     Theta WP (%): 14 Theta FC (%): 30 Theta SAT (%): 49 Theta current (%) 30 
##     Vol. WP (mm): 32 Vol. FC (mm): 68 Vol. SAT (mm): 111 Vol. current (mm): 68 
##     Temperature (Celsius): NA 
## 
## Layer  2  [ 300  to  1000 mm ] 
##     clay (%): 25 silt (%): 50 sand (%): 25 organic matter (%): NA [ Silt loam ]
##     Rock fragment content (%): 45 Macroporosity (%): 5 
##     Theta WP (%): 14 Theta FC (%): 30 Theta SAT (%): 49 Theta current (%) 30 
##     Vol. WP (mm): 55 Vol. FC (mm): 117 Vol. SAT (mm): 190 Vol. current (mm): 117 
##     Temperature (Celsius): NA 
## 
## Total soil saturated capacity (mm): 300 
## Total soil water holding capacity (mm): 185 
## Total soil extractable water (mm): 116 
## Total soil current Volume (mm): 185 
## 
## Snow pack water equivalent (mm): 0 
## Soil water table depth (mm): 1000

The modelled moisture content of the soil depends on the water retention curve used to represent the relationship between soil volumetric water content (\(\theta\); %) and soil water potential (\(\Psi\); MPa). By default the Saxton equations are used as water retention curve, but the user may choose to follow Van Genuchten - Mualem equations, which will give different values for the same texture:

print(examplesoil, model="VG")
## Soil depth (mm): 1000 
## 
## Layer  1  [ 0  to  300 mm ] 
##     clay (%): 25 silt (%): 50 sand (%): 25 organic matter (%): NA [ Silt loam ]
##     Rock fragment content (%): 25 Macroporosity (%): 5 
##     Theta WP (%): 13 Theta FC (%): 29 Theta SAT (%): 42 Theta current (%) 29 
##     Vol. WP (mm): 30 Vol. FC (mm): 64 Vol. SAT (mm): 95 Vol. current (mm): 64 
##     Temperature (Celsius): NA 
## 
## Layer  2  [ 300  to  1000 mm ] 
##     clay (%): 25 silt (%): 50 sand (%): 25 organic matter (%): NA [ Silt loam ]
##     Rock fragment content (%): 45 Macroporosity (%): 5 
##     Theta WP (%): 13 Theta FC (%): 30 Theta SAT (%): 42 Theta current (%) 30 
##     Vol. WP (mm): 49 Vol. FC (mm): 117 Vol. SAT (mm): 163 Vol. current (mm): 117 
##     Temperature (Celsius): NA 
## 
## Total soil saturated capacity (mm): 258 
## Total soil water holding capacity (mm): 181 
## Total soil extractable water (mm): 118 
## Total soil current Volume (mm): 181 
## 
## Snow pack water equivalent (mm): 0 
## Soil water table depth (mm): 1000

While Saxton equations use texture and organic matter as inputs, the Van Genuchten-Mualem equations need other parameters, which are estimated using pedotransfer functions and their names start with VG_. Functions soil_psi2thetaSX() and soil_psi2thetaVG() (and their counterparts) can be used to calculate volumetric soil moisture from the water potential using the two models. When simulating soil water balance, the user can choose among the two models (see control parameters below). The soil water balance model described in this vignette uses the van Genuchten-Mualem equations for water retention curves and rhizosphere conductance.

Species data table

Simulation models in medfate require a data frame with species parameter values. The package provides a default data set of parameter values for 89 Mediterranean species (rows), resulting from bibliographic search, fit to empirical data or expert-based guesses:

data("SpParamsMED")

These species commonly occur in the Spanish forest inventory of Catalonia, but may not be sufficient for other areas. A large number of parameters (columns) can be found in SpParamsMED:

names(SpParamsMED)
##  [1] "Name"               "IFNcodes"           "SpIndex"           
##  [4] "Group"              "Order"              "Family"            
##  [7] "GrowthForm"         "Hmed"               "Hmax"              
## [10] "Z50"                "Z95"                "a_ash"             
## [13] "a_bsh"              "b_bsh"              "cr"                
## [16] "a_fbt"              "b_fbt"              "c_fbt"             
## [19] "d_fbt"              "a_cr"               "b_1cr"             
## [22] "b_2cr"              "b_3cr"              "c_1cr"             
## [25] "c_2cr"              "a_cw"               "b_cw"              
## [28] "PhenologyType"      "LeafDuration"       "Sgdd"              
## [31] "SLA"                "LeafDensity"        "WoodDensity"       
## [34] "FineRootDensity"    "r635"               "pDead"             
## [37] "Al2As"              "LeafWidth"          "SRL"               
## [40] "RLD"                "minFMC"             "maxFMC"            
## [43] "LeafPI0"            "LeafEPS"            "LeafAF"            
## [46] "StemPI0"            "StemEPS"            "StemAF"            
## [49] "LigninPercent"      "ParticleDensity"    "LeafLitterFuelType"
## [52] "Flammability"       "SAV"                "HeatContent"       
## [55] "gammaSWR"           "alphaSWR"           "kPAR"              
## [58] "g"                  "Psi_Extract"        "Psi_Critic"        
## [61] "WUE"                "pRootDisc"          "Gwmin"             
## [64] "Gwmax"              "VCleaf_kmax"        "VCleaf_c"          
## [67] "VCleaf_d"           "Kmax_stemxylem"     "VCstem_c"          
## [70] "VCstem_d"           "Kmax_rootxylem"     "VCroot_c"          
## [73] "VCroot_d"           "Narea"              "Vmax298"           
## [76] "Jmax298"            "WoodC"              "RGRsapwoodmax"     
## [79] "fHDmin"             "fHDmax"

Not all parameters are needed for all models. The user can find parameter definitions in the help page of this data set. However, to fully understand the role of parameters in the model, the user should read the details of model design and formulation (https://vegmod.ctfc.cat/software/medfate).

Vegetation

Forest plot data

Models included in medfate were primarily designed to be ran on forest inventory plots. In this kind of data, the vegetation of a sampled area is described in terms of woody plants (trees and shrubs) along with their size and species identity. Forest plots in medfate are assumed to be in a format that follows closely the Spanish forest inventory. Each forest plot is represented in an object of class forest, a list that contains several elements. Among them, the most important items are two data frames, treeData (for trees) and shrubData for shrubs:

data(exampleforestMED)
exampleforestMED
## $ID
## [1] "1"
## 
## $patchsize
## [1] 10000
## 
## $treeData
##   Species   N   DBH Height Z50  Z95
## 1      54 168 37.55    800 750 3000
## 2      68 384 14.60    660 750 3000
## 
## $shrubData
##   Species Cover Height Z50  Z95
## 1      65  3.75     80 300 1500
## 
## $herbCover
## [1] 10
## 
## $herbHeight
## [1] 20
## 
## attr(,"class")
## [1] "forest" "list"

Trees are expected to be primarily described in terms of species, diameter (DBH) and height, whereas shrubs are described in terms of species, percent cover and mean height.

Aboveground and belowground data tables

Because the forest plot format is rather specific, simulation functions in medfate allow starting in a more general way using two data frames, one with aboveground information (i.e. the leave area and size of plants) and the other with belowground information (i.e. root distribution). The aboveground data frame does not distinguish between trees and shrubs. It includes, for each plant cohort to be considered in rows, its species identity, height and leaf area index (LAI). While users can build their input data themselves, we use function forest2aboveground() on the object exampleforestMED to show how should the data look like:

above = forest2aboveground(exampleforestMED, SpParamsMED)
above
##       SP        N   DBH Cover   H        CR  LAI_live LAI_expanded LAI_dead
## T1_54 54 168.0000 37.55    NA 800 0.7150421 0.8167012    0.8167012        0
## T2_68 68 384.0000 14.60    NA 660 0.6055642 0.7977952    0.7977952        0
## S1_65 65 773.9235    NA  3.75  80 0.9738889 0.0653033    0.0653033        0

Note that the call to forest2aboveground() included species parameters, because species-specific values are needed to calculate leaf area from tree diameters or shrub cover. Columns N, DBH and Cover are required for simulating growth, but not for soil water balance, which only requires columns SP, H (in cm), CR (i.e. the crown ratio), LAI_live, LAI_expanded and LAI_dead. Here plant cohorts are given unique codes that tell us whether they correspond to trees or shrubs, but the user can use other row identifiers as long as they are unique. In practice, the user only needs to worry to calculate the values for LAI_live. LAI_live and LAI_expanded can contain the same LAI values, and LAI_dead is normally zero. This is so because models update LAI_expanded and LAI_dead according to the leaf phenology of species.

Regarding belowground information, a matrix describing for each plant cohort, the proportion of fine roots in each soil layer. As before, we use function forest2belowground() on the object exampleforestMED to show how should the data look like:

Z = c(exampleforestMED$treeData$Z95, exampleforestMED$shrubData$Z)
Z
## [1] 3000 3000
below = forest2belowground(exampleforestMED, examplesoil)
below
##               1         2
## T1_54 0.1933638 0.8066362
## T2_68 0.1933638 0.8066362
## S1_65 0.5554389 0.4445611

Function forest2belowground() internally takes values of Z50 and Z95 and calls function root_ldrDistribution() to estimate the distribution of fine roots according to the linear dose response model. For example the first row is:

root_ldrDistribution(exampleforestMED$treeData$Z50[1], 
                     exampleforestMED$treeData$Z95[1],
                     examplesoil$dVec)
##           [,1]      [,2]
## [1,] 0.1933638 0.8066362

An analogous function root_conicDistribution() can be used to estimate fine root distribution according to a cone. The user is free to build any numeric matrix for root distribution, as long as values in rows sum always one (i.e. we have proportions). Otherwise, functions root_conicDistribution() and root_ldrDistribution() can be used to calculate root distribution under specific assumptions.

Meteorological forcing

Soil water simulations require daily weather inputs. The weather variables that are required depend on the complexity of the soil water balance model we are using. The complex simulation model requires precipitation, radiation, wind speed, min/max temparature and relative humitidy. Here we show an example of meteorological forcing data.

data(examplemeteo)
head(examplemeteo)
##            MeanTemperature MinTemperature MaxTemperature Precipitation
## 2001-01-01      3.57668969     -0.5934215       6.287950      4.869109
## 2001-01-02      1.83695972     -2.3662458       4.569737      2.498292
## 2001-01-03      0.09462563     -3.8541036       2.661951      0.000000
## 2001-01-04      1.13866156     -1.8744860       3.097705      5.796973
## 2001-01-05      4.70578690      0.3288287       7.551532      1.884401
## 2001-01-06      4.57036721      0.5461322       7.186784     13.359801
##            MeanRelativeHumidity MinRelativeHumidity MaxRelativeHumidity
## 2001-01-01             78.73709            65.15411           100.00000
## 2001-01-02             69.70800            57.43761            94.71780
## 2001-01-03             70.69610            58.77432            94.66823
## 2001-01-04             76.89156            66.84256            95.80950
## 2001-01-05             76.67424            62.97656           100.00000
## 2001-01-06             89.01940            74.25754           100.00000
##            Radiation WindSpeed WindDirection       PET
## 2001-01-01  12.89251  2.000000           172 1.3212770
## 2001-01-02  13.03079  7.662544           278 2.2185985
## 2001-01-03  16.90722  2.000000           141 1.8045176
## 2001-01-04  11.07275  2.000000           172 0.9200627
## 2001-01-05  13.45205  7.581347           321 2.2914449
## 2001-01-06  12.84841  6.570501           141 1.7255058

Simulation models in medfate have been designed to work along with data generated from package meteoland. The user is strongly recommended to resort to this package to obtain suitable weather input for soil water balance simulations.

Simulation control

Apart from data inputs, the behaviour of simulation models can be controlled using a set of global parameters. The default parameterization is obtained using function defaultControl():

control = defaultControl()

The names of all control parameters are:

names(control)
##  [1] "verbose"                             "subdailyResults"                    
##  [3] "defaultWindSpeed"                    "soilFunctions"                      
##  [5] "snowpack"                            "rockyLayerDrainage"                 
##  [7] "unlimitedSoilWater"                  "plantWaterPools"                    
##  [9] "leafPhenology"                       "unfoldingDD"                        
## [11] "transpirationMode"                   "cavitationRefill"                   
## [13] "refillMaximumRate"                   "verticalLayerSize"                  
## [15] "gainModifier"                        "costModifier"                       
## [17] "costWater"                           "cochard"                            
## [19] "capacitance"                         "klatstem"                           
## [21] "klatleaf"                            "taper"                              
## [23] "numericParams"                       "fracLeafResistance"                 
## [25] "fracRootResistance"                  "averageFracRhizosphereResistance"   
## [27] "Catm"                                "ndailysteps"                        
## [29] "thermalCapacityLAI"                  "allocationStrategy"                 
## [31] "nonStomatalPhotosynthesisLimitation" "floemConductanceFactor"             
## [33] "nonSugarConcentration"               "equilibriumOsmoticConcentration"    
## [35] "minimumSugarForGrowth"               "respirationRates"                   
## [37] "turnoverRates"                       "constructionCosts"                  
## [39] "maximumRelativeGrowthRates"

Most of these parameters should normally be left to their default value. However, there are some that deserve explanation here:

  1. Console output can be turned off by setting verbose = FALSE.
  2. The complexity of the soil water balance calculations is controlled using transpirationMode.

Growth input object

A last step is needed before calling simulation functions. It consists in the compilation of all aboveground and belowground parameters and the specification of additional parameter values for each plant cohort, such as their light extinction coefficient or their response to drought. This is done by calling function growthInput() and taking species parameter values from species parameter data:

Z50 = c(exampleforestMED$treeData$Z50, exampleforestMED$shrubData$Z50)
Z95 = c(exampleforestMED$treeData$Z95, exampleforestMED$shrubData$Z95)
x = growthInput(above, Z50, Z95, examplesoil, SpParamsMED, control)

If one has a forest object, the growthInput object can be generated in directly from it, avoiding the need to explicitly build aboveground and belowground data frames:

x = forest2growthInput(exampleforestMED, examplesoil, SpParamsMED, control)

All the input information for forest data and species parameter values can be inspected by printing different elements of the input object, which are:

names(x)
##  [1] "control"             "canopy"              "cohorts"            
##  [4] "above"               "below"               "belowLayers"        
##  [7] "paramsPhenology"     "paramsAnatomy"       "paramsInterception" 
## [10] "paramsTranspiration" "paramsWaterStorage"  "paramsGrowth"       
## [13] "paramsAllometries"   "internalPhenology"   "internalWater"      
## [16] "internalCarbon"      "internalAllocation"  "internalRings"

First, information about the cohort species is found in element cohorts (i.e. code, species and name):

x$cohorts
##       SP              Name
## T1_54 54  Pinus halepensis
## T2_68 68      Quercus ilex
## S1_65 65 Quercus coccifera

Element above contains the aboveground structure data that we already know, but with additional columns that describe the estimated initial amount of sapwood area and carbon reserves (if required):

x$above
##       SP        N   DBH Cover   H        CR  LAI_live LAI_expanded LAI_dead
## T1_54 54 168.0000 37.55    NA 800 0.7150421 0.8167012    0.8167012        0
## T2_68 68 384.0000 14.60    NA 660 0.6055642 0.7977952    0.7977952        0
## S1_65 65 773.9235    NA  3.75  80 0.9738889 0.0653033    0.0653033        0
##               SA Status
## T1_54 368.973920  alive
## T2_68  82.688152  alive
## S1_65   3.358305  alive

As with the soil input object, the growthInput object will be modified during simulations. In the case of growth(), these modifications concern SA, fastCstorage, slowCstorage, LAI_expanded and LAI_dead in element above, as well as canopy variables.

Aboveground parameters related to plant transpiration can be seen in paramsTransp:

x$paramsTransp
##       Psi_Extract Psi_Critic WUE pRootDisc
## T1_54          -2  -5.140000   6         0
## T2_68          -3  -7.130000   6         0
## S1_65          -4  -7.936105   6         0

Belowground parameters can be seen in below and include root distribution as well as maximum root and rhizosphere conductances by soil layer:

x$below
##       Z50  Z95 coarseRootSoilVolume
## T1_54 750 3000            0.6815696
## T2_68 750 3000            0.6815696
## S1_65 300 1500            0.4242041

Parameters related to plant growth can be seen in paramsGrowth and paramsAllometries:

x$paramsGrowth
##           WoodC RGRsapwoodmax fHDmin fHDmax
## T1_54 0.4963636         0.001    100    120
## T2_68 0.4934416         0.001    100    120
## S1_65 0.4934416         0.001     NA     NA
x$paramsAllometries
##           Aash      Absh      Bbsh     Acr      B1cr      B2cr         B3cr
## T1_54       NA        NA        NA 1.50576 -0.706481 -0.078039  0.000182000
## T2_68 1.533547 0.6134487 0.7558145 1.98539 -0.552000 -0.013860 -0.000110736
## S1_65 0.757100 0.6388122 0.5609432      NA        NA        NA           NA
##            C1cr     C2cr       Acw    Bcw
## T1_54 -0.007262  0.00000 0.6415296 0.7310
## T2_68 -0.006850 -0.20101 0.5681897 0.7974
## S1_65        NA       NA        NA     NA

Finally, note that one can play with plant-specific parameters for growth simulation (instead of using species-level values) by modifying manually the parameter values in this object.

Executing the growth model

In this vignette we will use one year of example meteorological data with the following precipitation and temperature seasonal trends:

G1<-growth(x, examplesoil, examplemeteo, latitude = 41.82592, elevation = 100)
## Initial soil water content (mm): 185.069
## Initial snowpack content (mm): 0
## Performing daily simulations ..................................... [update structural variables] done.
## Final soil water content (mm): 167.658
## Final snowpack content (mm): 0
## Change in soil water content (mm): -17.4114
## Soil water balance result (mm): -17.4114
## Change in snowpack water content (mm): 0
## Snowpack water balance result (mm): -7.10543e-15
## Water balance components:
##   Precipitation (mm) 513
##   Rain (mm) 462 Snow (mm) 51
##   Interception (mm) 83 Net rainfall (mm) 380
##   Infiltration (mm) 421 Runoff (mm) 10 Deep drainage (mm) 118
##   Soil evaporation (mm) 42 Transpiration (mm) 279

Plotting results

In addition to all the plots that were available for result of simulations with function spwb(), one can display the following information out of the output of function growth():

Carbon balance components

To inspect components of the plant carbon balance we can first display gross photosynthesis expressed as assimilation relative to biomass:

plot(G1, "GrossPhotosynthesis", bySpecies = T)

Then we can draw the respiration costs (maintenance and growth) in the same units:

plot(G1, "MaintenanceRespiration", bySpecies = T)

plot(G1, "GrowthRespiration", bySpecies = T)

Finally we can display the daily negative or positive balance of the plant, which determines changes in plant carbon pools:

plot(G1, "CarbonBalance", bySpecies = T)

Carbon storage

Carbon assimilation and respiration rates define the dynamics of stored carbon, which in medfate is divided into two organs (leaves and sapwood) and two chemical compounds (soluble sugars and starch):

plot(G1, "SugarLeaf", bySpecies = T)

plot(G1, "StarchLeaf", bySpecies = T)

plot(G1, "SugarSapwood", bySpecies = T)

plot(G1, "StarchSapwood", bySpecies = T)

Leaf and sapwood area changes

Leaf and sapwood area dynamics arising from the interplay between growth and senescence of tissues can be inspected using:

plot(G1, "LeafArea", bySpecies = T)

plot(G1, "SapwoodArea", bySpecies = T)

The corresponding daily growth rates can also be displayed:

plot(G1, "LAgrowth", bySpecies = T)

plot(G1, "SAgrowth", bySpecies = T)

Stand structure dynamics

The output object returned by function growth() contains information of the year-by-year stand (aboveground) structure, starting with the initial one:

G1$StandStructures
## $Initial
##       SP        N   DBH Cover   H        CR  LAI_live LAI_expanded LAI_dead
## T1_54 54 168.0000 37.55    NA 800 0.7150421 0.8167012    0.8167012        0
## T2_68 68 384.0000 14.60    NA 660 0.6055642 0.7977952    0.7977952        0
## S1_65 65 773.9235    NA  3.75  80 0.9738889 0.0653033    0.0653033        0
##               SA Status
## T1_54 368.973920  alive
## T2_68  82.688152  alive
## S1_65   3.358305  alive
## 
## $Year_1
##       SP        N      DBH   Cover         H        CR   LAI_live LAI_expanded
## T1_54 54 168.0000 38.47756      NA 860.29995 0.7057758 0.70184296   0.70184296
## T2_68 68 384.0000 15.37886      NA 708.32962 0.5974822 0.68559590   0.68559590
## S1_65 65 773.9235       NA 5.70093  98.63867 0.9738889 0.04638488   0.04638488
##           LAI_dead         SA Status
## T1_54 0.0026136061 406.777938  alive
## T2_68 0.0025531033  97.009221  alive
## S1_65 0.0003914267   5.359074  alive

We can also display summarized stand information (leaf area index, basal area, etc.) using:

G1$StandStructures
## $Initial
##       SP        N   DBH Cover   H        CR  LAI_live LAI_expanded LAI_dead
## T1_54 54 168.0000 37.55    NA 800 0.7150421 0.8167012    0.8167012        0
## T2_68 68 384.0000 14.60    NA 660 0.6055642 0.7977952    0.7977952        0
## S1_65 65 773.9235    NA  3.75  80 0.9738889 0.0653033    0.0653033        0
##               SA Status
## T1_54 368.973920  alive
## T2_68  82.688152  alive
## S1_65   3.358305  alive
## 
## $Year_1
##       SP        N      DBH   Cover         H        CR   LAI_live LAI_expanded
## T1_54 54 168.0000 38.47756      NA 860.29995 0.7057758 0.70184296   0.70184296
## T2_68 68 384.0000 15.37886      NA 708.32962 0.5974822 0.68559590   0.68559590
## S1_65 65 773.9235       NA 5.70093  98.63867 0.9738889 0.04638488   0.04638488
##           LAI_dead         SA Status
## T1_54 0.0026136061 406.777938  alive
## T2_68 0.0025531033  97.009221  alive
## S1_65 0.0003914267   5.359074  alive