... | ... | @@ -25,7 +25,7 @@ config templates: [M0](https://gitlab.ethz.ch/ites-le/gen3sis/gen3sis_wiki/-/blo |
|
|
|
|
|
This function initializes a single species that occupies all non-arid equatorial grid cells.
|
|
|
|
|
|
Required traits: *dispersal*, *temp*, *temp_width*
|
|
|
Required traits: *dispersal*, *temp*, *temp_width*<p>
|
|
|
|
|
|
~~~R
|
|
|
|
... | ... | @@ -53,7 +53,7 @@ create_ancestor_species <- function(landscape, config) { |
|
|
|
|
|
This function initializes a single species that occupies all global grid cells.
|
|
|
|
|
|
Required traits: *dispersal*, *temp*, *prec*, *body_size*
|
|
|
Required traits: *dispersal*, *temp*, *prec*, *body_size*<p>
|
|
|
|
|
|
~~~R
|
|
|
|
... | ... | @@ -89,11 +89,9 @@ create_ancestor_species <- function(landscape, config) { |
|
|
|
|
|
This function draws the dispersal kernel from a Weibull distribution with shape and scale parameters.
|
|
|
|
|
|
Explored parameters:
|
|
|
|
|
|
params$WeibullShape = [2,15]
|
|
|
|
|
|
params$WeibullScale = 222 # requires maximum of 2 decimal degree resolution to
|
|
|
Explored parameters: <br>
|
|
|
_params$WeibullShape = [2,15]_<br>
|
|
|
_params$WeibullScale = 222_ # requires maximum of 2 decimal degree resolution to<p>
|
|
|
|
|
|
~~~R
|
|
|
|
... | ... | @@ -110,10 +108,10 @@ get_dispersal_values <- function(n, species, landscape, config) { |
|
|
This function evolves a single temperature-niche trait under a random walk (Brownian Motion) model.
|
|
|
|
|
|
Explored paramters:
|
|
|
params$Tev = [0.001, 0.02]
|
|
|
_params$Tev = [0.001, 0.02]_<p>
|
|
|
|
|
|
Required trait: temp
|
|
|
Required environment: temperature (temp)
|
|
|
Required trait: _temp_ <p>
|
|
|
Required environment: temperature (_temp_)<p>
|
|
|
|
|
|
~~~R
|
|
|
apply_evolution <- function(species, cluster_indices, landscape, config) {
|
... | ... | @@ -136,12 +134,12 @@ apply_evolution <- function(species, cluster_indices, landscape, config) { |
|
|
This function evolves a temperature-niche trait under an Ornstein Uhlenbeck (OU) model of trait evolution and evolves a body size trait under a Brownian Motion (BM) model. The OU model has a random walk element as in the Brownian motion model and also a parameter (*psi*) that draws the value towards an optimal value (based on the mean temperature value across the cluster's geographic range). When *psi=0* OU = BM. The OU and BM models each have an independent rate parameter (*sigma_squared*). This function evolves each geographic cluster separately (instead of each species separately or each grid cell separately).
|
|
|
|
|
|
Explored parameters:
|
|
|
params$sigma_squared_bs = [0.001, 0.02]
|
|
|
params$sigma_squared_t = [0.001, 0.015]
|
|
|
params$psi = 0
|
|
|
_params$sigma_squared_bs = [0.001, 0.02]_<br>
|
|
|
_params$sigma_squared_t = [0.001, 0.015]_<br>
|
|
|
_params$psi = 0_<p>
|
|
|
|
|
|
Required traits: *temp* and *body_size*
|
|
|
Requires environment: *temp*
|
|
|
Required traits: *temp* and *body_size*<br>
|
|
|
Requires environment: *temp*<p>
|
|
|
|
|
|
~~~R
|
|
|
sigma_squared_bs <- params$sigma_squared_bs
|
... | ... | @@ -181,8 +179,8 @@ apply_evolution <- function(species, cluster_indices, landscape, config) { |
|
|
|
|
|
This function increases divergence between populations by 0.1 at each timestep and speciation occurs after divergence crosses threshold _S_. Values < 1 mean populations separate more slowly than they come back together, as populations that come into secondary contact separate at a rate of 1 per time step.
|
|
|
|
|
|
Explored paramters:
|
|
|
params$divergence_threshold = [1.5,3]
|
|
|
Explored paramters: <br>
|
|
|
_params$divergence_threshold = [1.5,3]_<p>
|
|
|
|
|
|
~~~R
|
|
|
divergence_threshold = params$S
|
... | ... | @@ -197,12 +195,12 @@ get_divergence_factor <- function(species, cluster_indices, landscape, config) { |
|
|
|
|
|
This function increases divergence between populations each timestep as an exponential function of the sum of the mean temperature values across each diverging population's geographic ranges. The exponent is scaled with the parameter, _lambda_. Speciation occurs after divergence crosses threshold _S_. Values < 1 mean populations separate more slowly than they come back together, as populations that come into secondary contact separate at a rate of 1 per time step.
|
|
|
|
|
|
Explored paramters:
|
|
|
params$divergence_threshold = [2,10]
|
|
|
params$lambda = [2,5]
|
|
|
Explored paramters: <br>
|
|
|
_params$divergence_threshold = [2,10]_<br>
|
|
|
_params$lambda = [2,5]_<p>
|
|
|
|
|
|
Required traits: *body_size*
|
|
|
Required environment: *temp*
|
|
|
Required traits: *body_size*<p>
|
|
|
Required environment: *temp*<p>
|
|
|
|
|
|
~~~R
|
|
|
divergence_threshold = params$divergence_threshold
|
... | ... | @@ -237,12 +235,13 @@ get_divergence_factor <- function(species, cluster_indices, landscape, config) { |
|
|
|
|
|
This function increases divergence between populations each timestep as an exponential function of 1 - the sum of the mean body size values across each diverging population's geographic ranges. The exponent is scaled with the parameter, _lambda_. Speciation occurs after divergence crosses threshold _S_. Values < 1 mean populations separate more slowly than they come back together, as populations that come into secondary contact separate at a rate of 1 per time step.
|
|
|
|
|
|
Explored paramters:
|
|
|
params$divergence_threshold = [2,10]
|
|
|
params$lambda = [2,5]
|
|
|
Explored paramters: <br>
|
|
|
_params$divergence_threshold = [2,10]_<br>
|
|
|
_params$lambda = [2,5]_<p>
|
|
|
|
|
|
Required traits: *body_size*<p>
|
|
|
Required environment: temperature (_temp_) <p>
|
|
|
|
|
|
Required traits: *body_size*
|
|
|
Required environment: temperature (temp)
|
|
|
~~~R
|
|
|
divergence_threshold = params$divergence_threshold
|
|
|
lambda = params$lambda
|
... | ... | @@ -276,16 +275,16 @@ get_divergence_factor <- function(species, cluster_indices, landscape, config) { |
|
|
~~~
|
|
|
|
|
|
|
|
|
### 1.4.3 Exponential temperature + body size-dependent divergence (Evolutionary Speed Hypothesis, Skeels et al 2021)
|
|
|
### 1.4.4 Exponential temperature + body size-dependent divergence (Evolutionary Speed Hypothesis, Skeels et al 2021)
|
|
|
|
|
|
This function increases divergence between populations each timestep as an exponential function of the sum of the mean temperature values across each diverging population's geographic ranges and 1 - the sum of mean body size values. The exponent is scaled with the parameter, _lambda_. Speciation occurs after divergence crosses threshold _S_. Values < 1 mean populations separate more slowly than they come back together, as populations that come into secondary contact separate at a rate of 1 per time step.
|
|
|
|
|
|
Explored paramters:
|
|
|
params$divergence_threshold = [2,10]
|
|
|
params$lambda = [2,5]
|
|
|
Explored paramters: <br>
|
|
|
_params$divergence_threshold = [2,10]_<br>
|
|
|
_params$lambda = [2,5]_<p>
|
|
|
|
|
|
Required traits: *body_size* and *temperature*
|
|
|
Required environment: temperature (temp)
|
|
|
Required traits: *body_size* and *temperature*<p>
|
|
|
Required environment: temperature (_temp_)<p>
|
|
|
|
|
|
~~~R
|
|
|
divergence_threshold = params$divergence_threshold
|
... | ... | @@ -323,9 +322,9 @@ get_divergence_factor <- function(species, cluster_indices, landscape, config) { |
|
|
|
|
|
### 1.5.1 Temperature and aridity thresholds (Pantropical diversity, Hagen and Skeels et al 2021)
|
|
|
|
|
|
This function determines whether species can occupy a grid cell based on the temperature niche trait and width as well as aridity. Species can occupy cells of the temp niche + or - the temp width. A further constraint is added where species cannot occupy arid grid cells.
|
|
|
This function determines whether species can occupy a grid cell based on the temperature niche trait and width as well as aridity. Species can occupy cells of the _temp_ niche + or - the temp width. A further constraint is added where species cannot occupy arid grid cells.
|
|
|
|
|
|
Requires environment: temperature (temp) and aridity (prec)
|
|
|
Required environment: temperature (_temp_) and aridity (_prec_)<p>
|
|
|
|
|
|
~~~R
|
|
|
apply_ecology <- function(abundance, traits, landscape, config) {
|
... | ... | @@ -342,31 +341,35 @@ This function uses the temperature niche optima and the site's aridity value to |
|
|
|
|
|
The size (_N_) of population _i_ in site _j_ is determined by a gaussian function of resource use efficiency - the distance between the temperature value in the site (_Tj_), and the population’s temperature optimum (_Ti_):
|
|
|
|
|
|
Nij = K * exp(-(Ti - Tj/omega)2 ) equation 1
|
|
|
<div align="center">Nij = K * exp(-(Ti - Tj/omega)2 ) <b>equation 1</b></div><p>
|
|
|
|
|
|
|
|
|
where omega is a parameter that determines the strength of environmental filtering, with small values leading to a sharper decline in abundance as the species temperature niche optimum (_Ti_) becomes more different from the temperature of the site (_Tj_). _Nij_ will equal _K_ in the absence of competitors if population _i_ were perfectly adapted to the site. The carrying capacity for each site (_K_) was independent of temperature but decreased exponentially with the aridity index in each site (_Aj_) according to the function:
|
|
|
|
|
|
K = Kc * exp(-1*Aj) equation 2
|
|
|
<div align="center">K = Kc * exp(-1*Aj) <b>equation 2</b></div><p>
|
|
|
|
|
|
|
|
|
Where _Kc_ was a constant [30000]. We model a zero-sum game where sites have finite resources available and this places ecological limits on the maximum number of individuals in a site across populations of all species present (_Nj_). Therefore, if the total community abundance across all species, _Nj_, is at or above _K_ the addition of any new species will decrease resources available to all present species. In saturated communities (where _Nj_ >= K), the realized abundance of each species (_N̂ij_) is apportioned according to the resource use efficiency of each species:
|
|
|
|
|
|
<div align="center">N̂ij=Nij∗min(Nj,K)/Nj <b>equation 3</b></div><p>
|
|
|
|
|
|
Where _Kc_ was a constant [30000]. We model a zero-sum game where sites have finite resources available and this places ecological limits on the maximum number of individuals in a site across populations of all species present (_Nj_). Therefore, if the total community abundance across all species, Nj_,_ is at or above _K_ the addition of any new species will decrease resources available to all present species. In saturated communities (where _Nj_ >= K), the realized abundance of each species (_N̂ij_) is apportioned according to the resource use efficiency of each species:
|
|
|
|
|
|
N̂ij=Nij∗min(Nj,K)/Nj equation 3
|
|
|
Local extinction occurs deterministically if _N̂ij_ = 0 or stochastically as a sigmoidal function of N̂ij:
|
|
|
|
|
|
Local extinction occurs deterministically if N̂ij = 0 or stochastically as a sigmoidal function of N̂ij:
|
|
|
<div align="center">1/(1+exp(-μd * (μt - N̂ij)))) <b>equation 4</b></div><p>
|
|
|
|
|
|
1/(1+exp(-μd * (μt - N̂ij)))) equation 4
|
|
|
|
|
|
Where μt is the population size threshold below which extirpation in site j becomes more likely and _μd_ is the rate of decay of the function. Extinction of a species occurs when it no longer occupies any sites.
|
|
|
Where μt is the population size threshold below which extirpation in site _j_ becomes more likely and _μd_ is the rate of decay of the function. Extinction of a species occurs when it no longer occupies any sites.
|
|
|
|
|
|
Explored parameters:
|
|
|
params$K = 30000
|
|
|
params$omega [0.01, 0.035]
|
|
|
params$aridity_cost = 2
|
|
|
params$inflexion = 1000
|
|
|
params$decay = 0.1
|
|
|
|
|
|
Rrequired traits: *temp*, *body_size*
|
|
|
Required Environments: tmeperature (temp), aridity (prec)
|
|
|
_params$K = 30000_<br>
|
|
|
_params$omega [0.01, 0.035]_<br>
|
|
|
_params$aridity_cost = 2_<br>
|
|
|
_params$inflexion = 1000_<br>
|
|
|
_params$decay = 0.1_<br>
|
|
|
|
|
|
Rrequired traits: *temp*, *body_size*<p>
|
|
|
Required environments: tmeperature (_temp_), aridity (_prec_)<p>
|
|
|
~~~R
|
|
|
|
|
|
|
... | ... | |