######################################
### METADATA ###
######################################
# Version: 1.0
#
# Author: J.S. Cabral and O. Hagen
#
# Date: 1.7.2020
#
# Landscape: CaseStudy1
#
# Publications: R-package gen3sis
#
# Description: Fast version of config_rte.R from example config used at the introduction vignette and similar to case study island configs in (Hagen et al. 2020).
#Scenarios (these 3 scenarios were repeated for each experiment), this config represents only one!:
#I) mutation rates = temporal environmental variance (control):
#SD for temperature: 0.5
#SD for precipitation: 50
#II) mutation rates < temporal environmental variance (higher phylo constraint):
#SD for temperature: 0.3
#SD for precipitation: 30
#III) mutation rates > temporal environmental variance (less phylo constraint):
#SD for temperature: 0.7
#SD for precipitation: 70
#O. Hagen, B. Flück, F. Fopp, J.S. Cabral, F. Hartig, M. Pontarp, T.F. Rangel, L. Pellissier. gen3sis: The GENeral Engine for Eco-Evolutionary SImulationS on the origins of biodiversity.
######################################
######################################
### General settings ###
######################################
# set seed for the simulation
random_seed = 666
# set the starting time step or leave NA to use the earliest/highest timestep
start_time = 100
# set the end time step or leave as NA to use the lates/lowest timestep (0)
end_time = NA
# maximum total number of species in the simulation before it is aborted
max_number_of_species = 200000
# maximum number of species within one cell before the simulation is aborted
max_number_of_coexisting_species = 1e5
# a list of traits to include with each species
# a "dispersal" trait is implictly added in any case
trait_names = c("temp", "prec", "dispersal")
# ranges to scale the input environemts with:
# not listed variable: no scaling takes place
# listed, set to NA: the environmental variable will be scaled from [min, max] to [0, 1]
# lsited with a given range r: the environmental variable will be scaled from [r1, r2] to [0, 1]
#environmental_ranges = list("temp" = c(-45, 25), "prec" = NA )
######################################
### Observer ###
######################################
# a place to inspect the internal state of the simulation and collect additional information if desired
end_of_timestep_observer = function(data, vars, config){
# a list of all species can be found in data$all_species
# the current landscape can be found in data$landscape
save_landscape()
save_species()
plot_richness(data$all_species, data$landscape)
}
######################################
### Initialization ###
######################################
# the intial abundace of a newly colonized cell, both during setup and later when colonizing a cell during the dispersal
initial_abundance = 10
# place speices within rectangle:
create_ancestor_species <- function(landscape, config) {
all_species <- list()
suitablecells<- c(449, 450, 480, 481)
for(cellID in 1: length(suitablecells)){
cell <- as.character(suitablecells[cellID])
new_species <- create_species(as.character(cell), config) # use this function to create species, one can provide directly the initial cells
new_species$traits[ , "dispersal"] <- 1
new_species$traits[ , "temp"] <- rnorm(1,20,0.5)
new_species$traits[ , "prec"] <- rnorm(1,500,50)
all_species <- append(all_species, list(new_species))
}
return(all_species)
}
# environmental_ranges = list("temp" = c(17, 23), "prec" = c(250,750) )
######################################
### Dispersal ###
######################################
# returns n dispersal values
get_dispersal_values <- function(n, species, landscape, config) {
dispersal_range = c(0, 1)
weighted_dispersal <- sum(species[["traits"]][, "dispersal"] * species[["abundance"]])
disp_factor <- weighted_dispersal/sum(species[["abundance"]])
scale <- ((dispersal_range[2] - dispersal_range[1]) * disp_factor ) + dispersal_range[1]
values <- rweibull(n, shape = 2.5, scale = scale)
return(values)
}
######################################
### Speciation ###
######################################
# threshold for genetic distance after which a speciation event takes place
divergence_threshold = 10 #runif(1,min=5, max=5.5) ### Arbitrary value to ensure enough diversification wihtout stopping the simulation midway
# factor by which the divergence is increased between geographicaly isolated population
# can also be a matrix between the different population clusters
get_divergence_factor <- function(species, cluster_indices, landscape, config) {
return(1)
}
######################################
### Evolution ###
######################################
# mutate the traits of a species and return the new traits matrix
apply_evolution <- function(species, cluster_indices, landscape, config) {
traits <- species[["traits"]]
#### HERE CHANGES BETWEEN CONFIGS #####
traits[, "temp"] <- traits[, "temp"] + rnorm(length(traits[, "temp"]), mean = 0, sd = 0.5) # sd value: control = 0.5; less phylo constraint=0.7; higher phylo constraint=0.3
traits[, "prec"] <- traits[, "prec"] + rnorm(length(traits[, "prec"]), mean = 0, sd = 50) # sd value: control = 50; less phylo constraint=70; higher phylo constraint=30
# your mutations
return(traits)
}
######################################
### Ecology ###
######################################
# called for every cell with all occuring species, this functin calculates the who survives in the current cells
# returns a vector of abundances
# set the abundance to 0 for every species supposed to die
apply_ecology <- function(abundance, traits, landscape, config) {
abundance <- ( abs( traits[, "temp"] - landscape[, "temp"]) < 1.5 ) & #1.5
( abs( traits[, "prec"] - landscape[, "prec"]) < 150 ) # 150
return(abundance)
}
#In the sample file there are things wrong
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.