This script is designed to create parameter files containing response to disturbance parameters for each PFG (one file for each of them) used in the disturbance module of FATE.

PRE_FATE.params_PFGdisturbance(
  name.simulation,
  mat.PFG.dist = NULL,
  mat.PFG.tol,
  opt.folder.name = NULL
)

Arguments

name.simulation

a string corresponding to the main directory or simulation name of the FATE simulation

mat.PFG.dist

(optional)
a data.frame with 5 columns :
PFG, type, maturity, longevity, age_above_150cm (see Details)

mat.PFG.tol

a data.frame with 3 to 7 columns :

  • nameDist,

  • PFG,

  • (responseStage, breakAge, resproutAge),

  • responseStage, killedIndiv, resproutIndiv (or strategy_tol)

(see Details)

opt.folder.name

(optional)
a string corresponding to the name of the folder that will be created into the name.simulation/DATA/PFGS/DIST/ directory to store the results

Value

A .txt file per PFG into the name.simulation/DATA/PFGS/DIST/ directory with the following parameters :

BREAK_AGE

ages at which the PFG changes of response stage (in years)

RESPR_AGE

resprouting age table (in a single row)
This is a vector of no.DIST * no.responseStages numbers corresponding
to the age at which the PFG can be rejuvenated (younger than the actual one) :

  • at different response stages (RS)

  • for each disturbance (DI).

These parameters should be given in this order (e.g. with 3 response stages) :
DI1_RS1, DI1_RS2, DI1_RS3, DI2_RS1... (in years).

FATES

disturbance response table (in a single row)
This is a vector of no.DIST * no.responseStages * 2 numbers corresponding
to the proportion of individuals :

  • that will be killed (Ki) or resprout (Re)

  • at different response stages (RS)

  • for each disturbance (DI).

These parameters should be given in this order (e.g. with 3 response stages) :
DI1_RS1_Ki, DI1_RS1_Re, DI1_RS2_Ki, DI1_RS2_Re, DI1_RS3_Ki, DI1_RS3_Re, DI2_RS1_Ki...
(integer between 0 and 100%).

PROP_KILLED

proportion of propagules killed by each disturbance
(integer between 0 and 100%)

ACTIVATED_SEED

proportion of seeds activated by each disturbance
(integer between 0 and 100%)

A DIST_COMPLETE_TABLE.csv file summarizing information for all groups into the name.simulation/DATA/PFGS/ directory.

If the opt.folder.name has been used, the files will be into the folder name.simulation/DATA/PFGS/DIST/opt.folder.name/.

Details

The disturbance module allows the user to simulate spatial perturbation(s) that will impact each PFG in terms of resprouting and mortality at different response stages.

Several parameters, given within mat.PFG.dist or mat.PFG.tol, are required for each PFG in order to set up these responses :

PFG

the concerned plant functional group

(type)

or life-form, based on Raunkier.
It should be either H (herbaceous), C (chamaephyte) or P (phanerophyte) for now

(maturity)

the age from which the PFG can reproduce

(longevity)

the maximum or average lifespan of the PFG

(age_above_150cm)

the age from which the PFG reaches 150 cm (1000 otherwise)

nameDist

the name of each perturbation (several can be defined at the same time)

(responseStage)

an integer corresponding to the concerned response class

(breakAge)

the age from which the PFG is associated with this response class

(resproutAge)

the age at which the plants will grow back, if they grow back

responseStage

an integer corresponding to the concerned response class

killedIndiv

an integer between 0 and 100 corresponding to the proportion of killed individuals

resproutIndiv

an integer between 0 and 100 corresponding to the proportion of resprouting individuals

(strategy_tol)

a string to choose the response to disturbance strategy :
indifferent, mowing_herbs, mowing_trees, grazing_herbs_1, grazing_herbs_2, grazing_herbs_3, grazing_trees_1, grazing_trees_2, grazing_trees_3

These values will allow to calculate or define a set of characteristics for each PFG :

BREAK_AGE

= each PFG can respond to a disturbance in several different ways that depend on the PFG age
= ages at which each PFG changes of response stage

Two methods to define these ages are available :

  • from predefined rules (using type, maturity, longevity, age_above_150cm) :

    4 classes are defined that can be labelled as :
    JustBorn (1), Juveniles (2), Matures (3), Senescents (4)

    H (herbaceous)C (chamaephyte) or P (phanerophyte)
    from class 1 to 2maturity - 21
    from class 2 to 3maturitymin(maturity - 2 , age_above_150cm)
    from class 3 to 4longevity - 2min(longevity - 2 , age_above_150cm)

    Some corrections are made for short-living plants (annuals and biennials) :

    • as they die after 1 or 2 years, they are not affected differently according to life stages

    • break ages from class 1 to 3 are set to 1, and break age from 3 to 4 is set to their longevity (1 or 2)

  • from user data :
    with the values contained within the breakAge column, if provided

RESPR_AGE

= when subject to a perturbation, each PFG can either stay undisturbed, be killed, or resprout at a particular age (in years)
= ages at which each PFG will be rejuvenated by a disturbance

Two methods to define these ages are available :

  • from predefined rules (using maturity, longevity, age_above_150cm) :

    • classes 1 and 2 : too young to resprout

    • class 3 : min(maturity - 2 , age_above_150cm)

    • class 4 : longevity - 2

    • short-living plants (annuals and biennials) always start back at 0

  • from user data :
    with the values contained within the resproutAge column, if provided

FATES

= proportion of killed and resprouting individuals
= for each disturbance and for each response stage

Two methods to define these tolerances are available :

  • from predefined scenarios (using strategy_tol) :

    • the values give the percentage of killed or resprouting individuals

    • with 1, 2, 3, 4: response classes

    • with K: killed individuals, R: resprouting individuals

    | ___1___ | ___2___ | ___3___ | ___4___ |
    | _K_ _R_ | _K_ _R_ | _K_ _R_ | _K_ _R_ |
    _________________________________________
    | _0_ _0_ | _0_ _0_ | _0_ _0_ | _0_ _0_ | indifferent
    _________________________________________
    | _0_ _0_ | _0_ _0_ | 50% 50% | 100% 0_ | mowing_herbs
    | _0_ _0_ | 100% 0_ | 100% 0_ | 100% 0_ | mowing_trees
    _________________________________________
    | _0_ _0_ | 10% _0_ | _0_ 50% | _0_ 10% | grazing_herbs_1
    | _0_ _0_ | 50% _0_ | _0_ 80% | 10% 50% | grazing_herbs_2
    | _0_ _0_ | 90% _0_ | 10% 90% | 50% 50% | grazing_herbs_3
    _________________________________________
    | 40% _0_ | _0_ _0_ | _0_ _0_ | _0_ _0_ | grazing_trees_1
    | 80% _0_ | _0_ _0_ | _0_ _0_ | _0_ _0_ | grazing_trees_2
    | 100% 0_ | 40% _0_ | _0_ _0_ | _0_ _0_ | grazing_trees_3

  • from user data :
    with the values contained within the responseStage, killedIndiv and resproutIndiv columns, if provided
    The PFG column can contain either the life form (H, C or P) or the PFG name. Both methods can be combined (but are applied in the order given by the PFG column).

PROP_KILLED

= the proportion of propagules killed by each disturbance
(currently set to 0% for all PFG and disturbances)

ACTIVATED_SEED

= the proportion of seeds activated by each disturbance
(currently set to 0% for all PFG and disturbances)

Author

Isabelle Boulangeat, Damien Georges, Maya Guéguen

Examples


## Create a skeleton folder with the default name ('FATE_simulation')
PRE_FATE.skeletonDirectory()


mat.char = data.frame(PFG = paste0('PFG', 1:6)
                      , type = c('C', 'C', 'H', 'H', 'P', 'P')
                      , maturity = c(5, 5, 3, 3, 8, 9)
                      , longevity = c(12, 200, 25, 4, 110, 70)
                      , age_above_150cm = c(1000, 100, 1000, 1000, 10, 12))

mat.tol = data.frame(nameDist = 'grazing'
                     , PFG = paste0('PFG', 1:6)
                     , strategy_tol = c('indifferent', 'grazing_herbs_1'
                                        , 'grazing_herbs_1', 'grazing_herbs_2'
                                        , 'indifferent', 'grazing_trees_2'))

## Create PFG response to disturbance parameter files (with PFG characteristics) -------------
PRE_FATE.params_PFGdisturbance(name.simulation = 'FATE_simulation'
                               , mat.PFG.dist = mat.char
                               , mat.PFG.tol = mat.tol)
                                                        

## Create PFG response to disturbance parameter files (with all values) ----------------------
mat.tol = expand.grid(responseStage = 1:3
                      , PFG = paste0('PFG', 1:6)
                      , nameDist = 'Mowing')
mat.tol$breakAge = c(1, 4, 10
                     , 1, 4, 10
                     , 1, 2, 50
                     , 1, 2, 20
                     , 2, 6, 95
                     , 3, 8, 55)
mat.tol$resproutAge = c(0, 0, 4
                        , 0, 0, 4
                        , 0, 0, 2
                        , 0, 0, 2
                        , 0, 2, 5
                        , 0, 4, 7)
mat.tol$killedIndiv = c(100, 100, 50
                        , 100, 100, 50
                        , 100, 100, 50
                        , 100, 100, 50
                        , 100, 70, 40
                        , 100, 60, 30)
mat.tol$resproutIndiv = c(0, 0, 50
                          , 0, 0, 50
                          , 0, 0, 30
                          , 0, 0, 30
                          , 0, 10, 40
                          , 0, 20, 50)
str(mat.tol)

PRE_FATE.params_PFGdisturbance(name.simulation = 'FATE_simulation'
                               , mat.PFG.tol = mat.tol)
                                                        
                                                        
## -------------------------------------------------------------------------------------------

## Load example data
Champsaur_params = .loadData('Champsaur_params', 'RData')

## Create a skeleton folder
PRE_FATE.skeletonDirectory(name.simulation = 'FATE_Champsaur')


## PFG traits for succession
tab.succ = Champsaur_params$tab.SUCC
str(tab.succ)

## Create PFG succession parameter files (fixing strata limits) --------------
PRE_FATE.params_PFGsuccession(name.simulation = 'FATE_Champsaur'
                           , mat.PFG.succ = tab.succ
                           , strata.limits = c(0, 20, 50, 150, 400, 1000, 2000)
                           , strata.limits_reduce = FALSE)

require(data.table)
tmp = fread('FATE_Champsaur/DATA/PFGS/SUCC_COMPLETE_TABLE.csv')
tab.succ = Champsaur_params$tab.SUCC
tab.succ$age_above_150cm = tmp$CHANG_STR_AGES_to_str_4_150
tab.succ = tab.succ[, c('PFG', 'type', 'maturity', 'longevity', 'age_above_150cm')]
str(tab.succ)

## PFG traits for disturbance
tab.dist = Champsaur_params$tab.DIST
str(tab.dist)

## Create PFG response to disturbance parameter files (give warnings) ------------------------
PRE_FATE.params_PFGdisturbance(name.simulation = 'FATE_Champsaur'
                               , mat.PFG.dist = tab.succ
                               , mat.PFG.tol = tab.dist)