Skip to contents

About this vignette

This document describes how to run the forest dynamics model of medfate, described in De Cáceres et al. (2023) and implemented in function fordyn(). This document is meant to teach users to run the simulation model with function fordyn(). Details of the model design and formulation can be found at the corresponding chapters of the medfate book.

Because the model builds on the growth and water balance models, the reader is assumed here to be familiarized with spwb() and growth() (otherwise read vignettes Basic water balance and Forest growth).

Preparing model inputs

Any forest dynamics 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 to prepare the data needed to run function fordyn().

Model inputs are explained in greater detail in vignettes Understanding model inputs and Preparing model inputs. Here we only review the different steps required to run function fordyn().

Soil, vegetation, meteorology and species data

Soil information needs to be entered as a data frame with soil layers in rows and physical attributes in columns. Soil physical attributes can be initialized to default values, for a given number of layers, using function defaultSoilParams():

examplesoil <- defaultSoilParams(4)
examplesoil
##   widths clay sand om nitrogen  bd rfc
## 1    300   25   25 NA       NA 1.5  25
## 2    700   25   25 NA       NA 1.5  45
## 3   1000   25   25 NA       NA 1.5  75
## 4   2000   25   25 NA       NA 1.5  95

As explained in the package overview, models included in medfate were primarily designed to be ran on forest inventory plots. Here we use the example object provided with the package:

data(exampleforest)
exampleforest
## $treeData
##            Species   N   DBH Height Z50  Z95
## 1 Pinus halepensis 168 37.55    800 100  600
## 2     Quercus ilex 384 14.60    660 300 1000
## 
## $shrubData
##             Species Cover Height Z50  Z95
## 1 Quercus coccifera  3.75     80 200 1000
## 
## $herbCover
## [1] 10
## 
## $herbHeight
## [1] 20
## 
## $seedBank
## [1] Species Percent
## <0 rows> (or 0-length row.names)
## 
## attr(,"class")
## [1] "forest" "list"

Importantly, a data frame with daily weather for the period to be simulated is required. Here we use the default data frame included with the package:

data(examplemeteo)
head(examplemeteo)
##        dates MinTemperature MaxTemperature Precipitation MinRelativeHumidity
## 1 2001-01-01     -0.5934215       6.287950      4.869109            65.15411
## 2 2001-01-02     -2.3662458       4.569737      2.498292            57.43761
## 3 2001-01-03     -3.8541036       2.661951      0.000000            58.77432
## 4 2001-01-04     -1.8744860       3.097705      5.796973            66.84256
## 5 2001-01-05      0.3288287       7.551532      1.884401            62.97656
## 6 2001-01-06      0.5461322       7.186784     13.359801            74.25754
##   MaxRelativeHumidity Radiation WindSpeed
## 1           100.00000  12.89251  2.000000
## 2            94.71780  13.03079  7.662544
## 3            94.66823  16.90722  2.000000
## 4            95.80950  11.07275  2.000000
## 5           100.00000  13.45205  7.581347
## 6           100.00000  12.84841  6.570501

Finally, simulations in medfate require a data frame with species parameter values, which we load using defaults for Catalonia (NE Spain):

data("SpParamsMED")

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("Granier")

Here we will run simulations of forest dynamics using the basic water balance model (i.e. transpirationMode = "Granier"). The complexity of the soil water balance calculations can be changed by using "Sperry" as input to defaultControl(). However, when running fordyn() sub-daily output will never be stored (i.e. setting subdailyResults = TRUE is useless).

Executing the forest dynamics model

In this vignette we will fake a ten-year weather input by repeating the example weather data frame ten times.

meteo <- rbind(examplemeteo, examplemeteo, examplemeteo, examplemeteo,
                    examplemeteo, examplemeteo, examplemeteo, examplemeteo,
                    examplemeteo, examplemeteo)
meteo$dates <- as.character(seq(as.Date("2001-01-01"), 
                                as.Date("2010-12-29"), by="day"))

Now we run the forest dynamics model using all inputs (note that no intermediate input object is needed, as in spwb() or growth()):

fd<-fordyn(exampleforest, examplesoil, SpParamsMED, meteo, control, 
           latitude = 41.82592, elevation = 100)
## Simulating year 2001 (1/10):  (a) Growth/mortality
## Package 'meteoland' [ver. 2.2.4]
## , (b) Regeneration nT = 2 nS = 1
## Simulating year 2002 (2/10):  (a) Growth/mortality, (b) Regeneration nT = 2 nS = 1
## Simulating year 2003 (3/10):  (a) Growth/mortality, (b) Regeneration nT = 2 nS = 1
## Simulating year 2004 (4/10):  (a) Growth/mortality, (b) Regeneration nT = 2 nS = 1
## Simulating year 2005 (5/10):  (a) Growth/mortality, (b) Regeneration nT = 2 nS = 1
## Simulating year 2006 (6/10):  (a) Growth/mortality, (b) Regeneration nT = 2 nS = 1
## Simulating year 2007 (7/10):  (a) Growth/mortality, (b) Regeneration nT = 2 nS = 1
## Simulating year 2008 (8/10):  (a) Growth/mortality, (b) Regeneration nT = 2 nS = 1
## Simulating year 2009 (9/10):  (a) Growth/mortality, (b) Regeneration nT = 2 nS = 1
## Simulating year 2010 (10/10):  (a) Growth/mortality, (b) Regeneration nT = 2 nS = 1

It is worth noting that, while fordyn() calls function growth() internally for each simulated year, the verbose option of the control parameters only affects function fordyn() (i.e. all console output from growth() is hidden). Recruitment and summaries are done only once a year at the level of function fordyn().

Inspecting model outputs

Stand, species and cohort summaries and plots

Among other outputs, function fordyn() calculates standard summary statistics that describe the structural and compositional state of the forest at each time step. For example, we can access stand-level statistics using:

fd$StandSummary
##    Step NumTreeSpecies NumTreeCohorts NumShrubSpecies NumShrubCohorts
## 1     0              2              2               1               1
## 2     1              2              2               1               1
## 3     2              2              2               1               1
## 4     3              2              2               1               1
## 5     4              2              2               1               1
## 6     5              2              2               1               1
## 7     6              2              2               1               1
## 8     7              2              2               1               1
## 9     8              2              2               1               1
## 10    9              2              2               1               1
## 11   10              2              2               1               1
##    TreeDensityLive TreeBasalAreaLive DominantTreeHeight DominantTreeDiameter
## 1         552.0000          25.03330           800.0000             37.55000
## 2         551.3664          25.20608           806.1349             37.66427
## 3         550.7271          25.37989           812.2899             37.77951
## 4         550.0821          25.55415           818.4331             37.89512
## 5         549.4296          25.72834           824.5462             38.01077
## 6         548.7731          25.90235           830.6199             38.12627
## 7         548.1108          26.07559           836.6488             38.24152
## 8         547.4429          26.24825           842.6316             38.35648
## 9         546.7673          26.42015           848.5666             38.47111
## 10        546.0879          26.59163           854.4529             38.58540
## 11        545.4065          26.76272           860.2918             38.69934
##    QuadraticMeanTreeDiameter HartBeckingIndex ShrubCoverLive BasalAreaDead
## 1                   24.02949         53.20353       3.750000    0.00000000
## 2                   24.12613         52.82897       3.092002    0.03916800
## 3                   24.22321         52.45909       3.139797    0.03982577
## 4                   24.32047         52.09584       3.188166    0.04049381
## 5                   24.41771         51.74031       3.237209    0.04128376
## 6                   24.51479         51.39268       3.286750    0.04185502
## 7                   24.61149         51.05316       3.336758    0.04254409
## 8                   24.70790         50.72159       3.387258    0.04323843
## 9                   24.80398         50.39794       3.438823    0.04405903
## 10                  24.89983         50.08188       3.489709    0.04464407
## 11                  24.99540         49.77303       3.541118    0.04510441
##    ShrubCoverDead BasalAreaCut ShrubCoverCut
## 1     0.000000000            0             0
## 2     0.005308865            0             0
## 3     0.004784382            0             0
## 4     0.004858242            0             0
## 5     0.004946666            0             0
## 6     0.005008892            0             0
## 7     0.005085376            0             0
## 8     0.005162595            0             0
## 9     0.005255268            0             0
## 10    0.005319858            0             0
## 11    0.005368566            0             0

Species-level analogous statistics are shown using:

fd$SpeciesSummary
##    Step           Species NumCohorts TreeDensityLive TreeBasalAreaLive
## 1     0  Pinus halepensis          1        168.0000         18.604547
## 2     0 Quercus coccifera          1              NA                NA
## 3     0      Quercus ilex          1        384.0000          6.428755
## 4     1  Pinus halepensis          1        167.6992         18.684443
## 5     1 Quercus coccifera          1              NA                NA
## 6     1      Quercus ilex          1        383.6671          6.521640
## 7     2  Pinus halepensis          1        167.3956         18.764917
## 8     2 Quercus coccifera          1              NA                NA
## 9     2      Quercus ilex          1        383.3314          6.614976
## 10    3  Pinus halepensis          1        167.0892         18.845381
## 11    3 Quercus coccifera          1              NA                NA
## 12    3      Quercus ilex          1        382.9929          6.708766
## 13    4  Pinus halepensis          1        166.7790         18.925384
## 14    4 Quercus coccifera          1              NA                NA
## 15    4      Quercus ilex          1        382.6506          6.802954
## 16    5  Pinus halepensis          1        166.4668         19.004930
## 17    5 Quercus coccifera          1              NA                NA
## 18    5      Quercus ilex          1        382.3063          6.897421
## 19    6  Pinus halepensis          1        166.1517         19.083809
## 20    6 Quercus coccifera          1              NA                NA
## 21    6      Quercus ilex          1        381.9591          6.991777
## 22    7  Pinus halepensis          1        165.8338         19.161980
## 23    7 Quercus coccifera          1              NA                NA
## 24    7      Quercus ilex          1        381.6091          7.086272
## 25    8  Pinus halepensis          1        165.5121         19.239294
## 26    8 Quercus coccifera          1              NA                NA
## 27    8      Quercus ilex          1        381.2552          7.180852
## 28    9  Pinus halepensis          1        165.1884         19.315922
## 29    9 Quercus coccifera          1              NA                NA
## 30    9      Quercus ilex          1        380.8995          7.275712
## 31   10  Pinus halepensis          1        164.8637         19.391978
## 32   10 Quercus coccifera          1              NA                NA
## 33   10      Quercus ilex          1        380.5428          7.370741
##    ShrubCoverLive BasalAreaDead ShrubCoverDead BasalAreaCut ShrubCoverCut
## 1              NA   0.000000000             NA            0            NA
## 2        3.750000            NA    0.000000000           NA             0
## 3              NA   0.000000000             NA            0            NA
## 4              NA   0.033509817             NA            0            NA
## 5        3.092002            NA    0.005308865           NA             0
## 6              NA   0.005658184             NA            0            NA
## 7              NA   0.034032852             NA            0            NA
## 8        3.139797            NA    0.004784382           NA             0
## 9              NA   0.005792915             NA            0            NA
## 10             NA   0.034563686             NA            0            NA
## 11       3.188166            NA    0.004858242           NA             0
## 12             NA   0.005930120             NA            0            NA
## 13             NA   0.035197398             NA            0            NA
## 14       3.237209            NA    0.004946666           NA             0
## 15             NA   0.006086359             NA            0            NA
## 16             NA   0.035643612             NA            0            NA
## 17       3.286750            NA    0.005008892           NA             0
## 18             NA   0.006211407             NA            0            NA
## 19             NA   0.036189436             NA            0            NA
## 20       3.336758            NA    0.005085376           NA             0
## 21             NA   0.006354650             NA            0            NA
## 22             NA   0.036738721             NA            0            NA
## 23       3.387258            NA    0.005162595           NA             0
## 24             NA   0.006499713             NA            0            NA
## 25             NA   0.037394149             NA            0            NA
## 26       3.438823            NA    0.005255268           NA             0
## 27             NA   0.006664884             NA            0            NA
## 28             NA   0.037848485             NA            0            NA
## 29       3.489709            NA    0.005319858           NA             0
## 30             NA   0.006795587             NA            0            NA
## 31             NA   0.038196361             NA            0            NA
## 32       3.541118            NA    0.005368566           NA             0
## 33             NA   0.006908048             NA            0            NA

Package medfate provides a simple plot function for objects of class fordyn. For example, we can show the interannual variation in stand-level basal area using:

plot(fd, type = "StandBasalArea")

Stand basal area over time

Tree/shrub tables

Another useful output of fordyn() are tables in long format with cohort structural information (i.e. DBH, height, density, etc) for each time step:

fd$TreeTable
##    Step Year Cohort          Species      DBH   Height        N Z50  Z95 ObsID
## 1     0   NA T1_148 Pinus halepensis 37.55000 800.0000 168.0000 100  600  <NA>
## 2     0   NA T2_168     Quercus ilex 14.60000 660.0000 384.0000 300 1000  <NA>
## 3     1 2001 T1_148 Pinus halepensis 37.66427 806.1349 167.6992 100  600  <NA>
## 4     1 2001 T2_168     Quercus ilex 14.71147 663.4696 383.6671 300 1000  <NA>
## 5     2 2002 T1_148 Pinus halepensis 37.77951 812.2899 167.3956 100  600  <NA>
## 6     2 2002 T2_168     Quercus ilex 14.82286 666.9265 383.3314 300 1000  <NA>
## 7     3 2003 T1_148 Pinus halepensis 37.89512 818.4331 167.0892 100  600  <NA>
## 8     3 2003 T2_168     Quercus ilex 14.93417 670.3712 382.9929 300 1000  <NA>
## 9     4 2004 T1_148 Pinus halepensis 38.01077 824.5462 166.7790 100  600  <NA>
## 10    4 2004 T2_168     Quercus ilex 15.04536 673.8025 382.6506 300 1000  <NA>
## 11    5 2005 T1_148 Pinus halepensis 38.12627 830.6199 166.4668 100  600  <NA>
## 12    5 2005 T2_168     Quercus ilex 15.15628 677.2155 382.3063 300 1000  <NA>
## 13    6 2006 T1_148 Pinus halepensis 38.24152 836.6488 166.1517 100  600  <NA>
## 14    6 2006 T2_168     Quercus ilex 15.26653 680.5977 381.9591 300 1000  <NA>
## 15    7 2007 T1_148 Pinus halepensis 38.35648 842.6316 165.8338 100  600  <NA>
## 16    7 2007 T2_168     Quercus ilex 15.37640 683.9581 381.6091 300 1000  <NA>
## 17    8 2008 T1_148 Pinus halepensis 38.47111 848.5666 165.5121 100  600  <NA>
## 18    8 2008 T2_168     Quercus ilex 15.48585 687.2959 381.2552 300 1000  <NA>
## 19    9 2009 T1_148 Pinus halepensis 38.58540 854.4529 165.1884 100  600  <NA>
## 20    9 2009 T2_168     Quercus ilex 15.59508 690.6164 380.8995 300 1000  <NA>
## 21   10 2010 T1_148 Pinus halepensis 38.69934 860.2918 164.8637 100  600  <NA>
## 22   10 2010 T2_168     Quercus ilex 15.70395 693.9158 380.5428 300 1000  <NA>

The same can be shown for dead trees:

fd$DeadTreeTable
##    Step Year Cohort          Species      DBH   Height         N N_starvation
## 1     1 2001 T1_148 Pinus halepensis 37.66427 806.1349 0.3007620            0
## 2     1 2001 T2_168     Quercus ilex 14.71147 663.4696 0.3328701            0
## 3     2 2002 T1_148 Pinus halepensis 37.77951 812.2899 0.3035959            0
## 4     2 2002 T2_168     Quercus ilex 14.82286 666.9265 0.3356938            0
## 5     3 2003 T1_148 Pinus halepensis 37.89512 818.4331 0.3064527            0
## 6     3 2003 T2_168     Quercus ilex 14.93417 670.3712 0.3385412            0
## 7     4 2004 T1_148 Pinus halepensis 38.01077 824.5462 0.3101753            0
## 8     4 2004 T2_168     Quercus ilex 15.04536 673.8025 0.3423437            0
## 9     5 2005 T1_148 Pinus halepensis 38.12627 830.6199 0.3122073            0
## 10    5 2005 T2_168     Quercus ilex 15.15628 677.2155 0.3442822            0
## 11    6 2006 T1_148 Pinus halepensis 38.24152 836.6488 0.3150806            0
## 12    6 2006 T2_168     Quercus ilex 15.26653 680.5977 0.3471530            0
## 13    7 2007 T1_148 Pinus halepensis 38.35648 842.6316 0.3179484            0
## 14    7 2007 T2_168     Quercus ilex 15.37640 683.9581 0.3500218            0
## 15    8 2008 T1_148 Pinus halepensis 38.47111 848.5666 0.3216949            0
## 16    8 2008 T2_168     Quercus ilex 15.48585 687.2959 0.3538608            0
## 17    9 2009 T1_148 Pinus halepensis 38.58540 854.4529 0.3236776            0
## 18    9 2009 T2_168     Quercus ilex 15.59508 690.6164 0.3557639            0
## 19   10 2010 T1_148 Pinus halepensis 38.69934 860.2918 0.3247318            0
## 20   10 2010 T2_168     Quercus ilex 15.70395 693.9158 0.3566545            0
##    N_dessication N_burnt Z50  Z95 ObsID
## 1              0       0 100  600  <NA>
## 2              0       0 300 1000  <NA>
## 3              0       0 100  600  <NA>
## 4              0       0 300 1000  <NA>
## 5              0       0 100  600  <NA>
## 6              0       0 300 1000  <NA>
## 7              0       0 100  600  <NA>
## 8              0       0 300 1000  <NA>
## 9              0       0 100  600  <NA>
## 10             0       0 300 1000  <NA>
## 11             0       0 100  600  <NA>
## 12             0       0 300 1000  <NA>
## 13             0       0 100  600  <NA>
## 14             0       0 300 1000  <NA>
## 15             0       0 100  600  <NA>
## 16             0       0 300 1000  <NA>
## 17             0       0 100  600  <NA>
## 18             0       0 300 1000  <NA>
## 19             0       0 100  600  <NA>
## 20             0       0 300 1000  <NA>

Accessing the output from function growth()

Since function fordyn() makes internal calls to function growth(), it stores the result in a vector called GrowthResults, which we can use to inspect intra-annual patterns of desired variables. For example, the following shows the leaf area for individuals of the three cohorts during the second year:

plot(fd$GrowthResults[[2]], "LeafArea", bySpecies = T)

Leaf area variation over one year Instead of examining year by year, it is possible to plot the whole series of results by passing a fordyn object to the plot() function:

plot(fd, "LeafArea")

Leaf area variation for multiple years

Finally, we can create interactive plots for particular steps using function shinyplot(), e.g.:

shinyplot(fd$GrowthResults[[1]])

Forest dynamics including management

The package allows including forest management in simulations of forest dynamics. This is done in a very flexible manner, in the sense that fordyn() allows the user to supply an arbitrary function implementing a desired management strategy for the stand whose dynamics are to be simulated. The package includes, however, an in-built default function called defaultManagementFunction() along with a flexible parameterization, a list with defaults provided by function defaultManagementArguments().

Here we provide an example of simulations including forest management:

# Default arguments
args <- defaultManagementArguments()
# Here one can modify defaults before calling fordyn()
#
# Simulation
fd<-fordyn(exampleforest, examplesoil, SpParamsMED, meteo, control, 
           latitude = 41.82592, elevation = 100,
           management_function = defaultManagementFunction,
           management_args = args)
## Simulating year 2001 (1/10):  (a) Growth/mortality & management [thinning], (b) Regeneration nT = 2 nS = 2
## Simulating year 2002 (2/10):  (a) Growth/mortality & management [none], (b) Regeneration nT = 2 nS = 2
## Simulating year 2003 (3/10):  (a) Growth/mortality & management [none], (b) Regeneration nT = 2 nS = 2
## Simulating year 2004 (4/10):  (a) Growth/mortality & management [none], (b) Regeneration nT = 2 nS = 2
## Simulating year 2005 (5/10):  (a) Growth/mortality & management [none], (b) Regeneration nT = 2 nS = 2
## Simulating year 2006 (6/10):  (a) Growth/mortality & management [none], (b) Regeneration nT = 2 nS = 2
## Simulating year 2007 (7/10):  (a) Growth/mortality & management [none], (b) Regeneration nT = 2 nS = 2
## Simulating year 2008 (8/10):  (a) Growth/mortality & management [none], (b) Regeneration nT = 2 nS = 2
## Simulating year 2009 (9/10):  (a) Growth/mortality & management [none], (b) Regeneration nT = 2 nS = 2
## Simulating year 2010 (10/10):  (a) Growth/mortality & management [none], (b) Regeneration nT = 2 nS = 2

When management is included in simulations, two additional tables are produced, corresponding to the trees and shrubs that were cut, e.g.:

fd$CutTreeTable
##   Step Year Cohort          Species      DBH   Height          N Z50  Z95 ObsID
## 1    1 2001 T1_148 Pinus halepensis 37.66427 806.1349   9.336019 100  600  <NA>
## 2    1 2001 T2_168     Quercus ilex 14.71147 663.4696 383.667130 300 1000  <NA>

Management parameters were those of an irregular model with thinning interventions from ‘below’, indicating that smaller trees were to be cut earlier:

args$type
## [1] "irregular"
args$thinning
## [1] "below"

Note that in this example, there is resprouting of Quercus ilex after the thinning intervention, evidenced by the new cohort (T3_168) appearing in year 2001:

fd$TreeTable
##    Step Year Cohort          Species       DBH    Height         N      Z50
## 1     0   NA T1_148 Pinus halepensis 37.550000 800.00000  168.0000 100.0000
## 2     0   NA T2_168     Quercus ilex 14.600000 660.00000  384.0000 300.0000
## 3     1 2001 T1_148 Pinus halepensis 37.664271 806.13493  158.3632 100.0000
## 4     1 2001 T3_168     Quercus ilex  1.000000  47.23629 3000.0000 300.0000
## 5     2 2002 T1_148 Pinus halepensis 37.781093 812.32085  158.1918 100.0000
## 6     2 2002 T3_168     Quercus ilex  1.138024  55.69980 2614.7351 300.0000
## 7     3 2003 T1_148 Pinus halepensis 37.900789 818.61986  158.0190 100.0000
## 8     3 2003 T3_168     Quercus ilex  1.253654  62.74529 2359.1259 300.0000
## 9     4 2004 T1_148 Pinus halepensis 38.020666 824.89477  157.8443 100.0000
## 10    4 2004 T3_168     Quercus ilex  1.369318  69.79045 2147.8635 300.0000
## 11    5 2005 T1_148 Pinus halepensis 38.140533 831.13577  157.6687 100.0000
## 12    5 2005 T2_168     Quercus ilex  1.412651  74.28409 2389.9033 282.3452
## 13    6 2006 T1_148 Pinus halepensis 38.257946 837.21650  157.4920 100.0000
## 14    6 2006 T2_168     Quercus ilex  1.528913  81.36774 1910.3305 282.3452
## 15    7 2007 T1_148 Pinus halepensis 38.376094 843.30313  157.3139 100.0000
## 16    7 2007 T2_168     Quercus ilex  1.645496  88.47031 1766.7767 282.3452
## 17    8 2008 T1_148 Pinus halepensis 38.494588 849.37529  157.1340 100.0000
## 18    8 2008 T2_168     Quercus ilex  1.763384  95.65826 1641.4803 282.3452
## 19    9 2009 T1_148 Pinus halepensis 38.613206 855.42160  156.9532 100.0000
## 20    9 2009 T2_168     Quercus ilex  1.882011 102.89694 1531.7118 282.3452
## 21   10 2010 T1_148 Pinus halepensis 38.731810 861.43514  156.7719 100.0000
## 22   10 2010 T2_168     Quercus ilex  2.001189 110.17479 1434.9302 282.3452
##     Z95 ObsID
## 1   600  <NA>
## 2  1000  <NA>
## 3   600  <NA>
## 4  1000  <NA>
## 5   600  <NA>
## 6  1000  <NA>
## 7   600  <NA>
## 8  1000  <NA>
## 9   600  <NA>
## 10 1000  <NA>
## 11  600  <NA>
## 12 1000  <NA>
## 13  600  <NA>
## 14 1000  <NA>
## 15  600  <NA>
## 16 1000  <NA>
## 17  600  <NA>
## 18 1000  <NA>
## 19  600  <NA>
## 20 1000  <NA>
## 21  600  <NA>
## 22 1000  <NA>

References

  • De Cáceres M, Molowny-Horas R, Cabon A, Martínez-Vilalta J, Mencuccini M, García-Valdés R, Nadal-Sala D, Sabaté S, Martin-StPaul N, Morin X, D’Adamo F, Batllori E, Améztegui A (2023) MEDFATE 2.9.3: A trait-enabled model to simulate Mediterranean forest function and dynamics at regional scales. Geoscientific Model Development 16: 3165-3201 (https://doi.org/10.5194/gmd-16-3165-2023).