Parallel PopGen Package
Sim_Model::demography_population_specific< Functor_d, Functor_d_pop > Struct Template Reference

functor: one population, pop, has a different, demography function, d_pop, all others have function, d More...

Public Member Functions

 demography_population_specific ()
 default constructor More...
 
 demography_population_specific (Functor_d d_in, Functor_d_pop d_pop_in, int pop, int generation_shift=0)
 constructor More...
 
__host__ __device__ __forceinline__ int operator() (const int population, const int generation) const
 

Public Attributes

int pop
 population with specific demography function More...
 
int generation_shift
 number of generations to shift function backwards More...
 
Functor_d d
 demographic function applied to all other populations More...
 
Functor_d_pop d_pop
 population specific demographic function for pop More...
 

Detailed Description

template<typename Functor_d, typename Functor_d_pop>
struct Sim_Model::demography_population_specific< Functor_d, Functor_d_pop >

functor: one population, pop, has a different, demography function, d_pop, all others have function, d

Takes in two template types: the function to be returned for the rest of the populations and the function for the specific population, pop.
Population specific demographic functors can be nested within each other and with piecewise demographic functors for multiple populations and multiple time functions, e.g.:

Using both demographic and migration functors, population 0 splits in two, forming population 1 in the first generation. Population 1's size increases exponentially afterwards with no further migration between the groups

typedef Sim_Model::demography_constant dem_constant;
dem_constant d_pop0(100000), d_pop1(0);
dem_pop_constant_constant d_generation_0(d_pop0,d_pop1,1); //at the start of the simulation, the first population pop0 starts out at 100,000 individuals, pop1 doesn't exist yet
dem_constant d_pop0_1(90000); dem_exponential d_pop1_1(0.01, 10000, 1); //shifts exponential back one generation so it starts at 10,000
dem_pop_constant_exponential d_remaining_generations(d_pop0_1,d_pop1_1,1); //in the first generation, 10,000 individuals from pop0 move to start pop1, which grows exponentially afterwards at a rate of 1%
Sim_Model::demography_piecewise<dem_pop_constant_constant,dem_pop_constant_exponential> demography_model(d_generation_0,d_remaining_generations,1);
typedef Sim_Model::migration_constant_equal mig_const_equal;
mig_const_equal m0; //no migration
mig_const_equal_const_dir m_pop0_pop1(1.f,0,1,m0); //pop1 made up entirely of individuals from pop0, no other population contributing to pop0
mig_const_equal_const_dir_const_dir m_pop1_pop1(0.f,1,1,m_pop0_pop1); //pop1 made up entirely of individuals from pop0 (since pop1 previously did not exist, no migration from previous pop1 generation!)
split_pop0_gen1 m_generation_1(m0,m_pop1_pop1,1); //no migration in generation 0, splits pop1 off from pop0 in generation 1
Sim_Model::migration_piecewise<split_pop0_gen1,mig_const_equal> migration_model(m_generation_1,m0,2); //no further migration between groups

The modularity of these functor templates allow parameter models to be extended to any number of populations and piecewise parameter functions (including user defined functions).

Examples:
Example2-DaDi.

Definition at line 203 of file go_fish.cuh.

Constructor & Destructor Documentation

§ demography_population_specific() [1/2]

template<typename Functor_d , typename Functor_d_pop >
Sim_Model::demography_population_specific< Functor_d, Functor_d_pop >::demography_population_specific ( )
inline

default constructor

pop = 0
generation_shift = 0
Function d assigned default constructor of Functor_d
Function d_pop assigned default constructor of Functor_d_pop

Definition at line 345 of file template_inline_simulation_functors.cuh.

§ demography_population_specific() [2/2]

template<typename Functor_d , typename Functor_d_pop >
Sim_Model::demography_population_specific< Functor_d, Functor_d_pop >::demography_population_specific ( Functor_d  d_in,
Functor_d_pop  d_pop_in,
int  pop,
int  generation_shift = 0 
)
inline

constructor

Parameters
generation_shift(optional input) default 0

Definition at line 348 of file template_inline_simulation_functors.cuh.

Member Function Documentation

§ operator()()

template<typename Functor_d , typename Functor_d_pop >
__host__ __device__ __forceinline__ int Sim_Model::demography_population_specific< Functor_d, Functor_d_pop >::operator() ( const int  population,
const int  generation 
) const

if(pop == population) N = d_pop(population, generation-generation_shift)
else N = d(population, generation-generation_shift)

Definition at line 352 of file template_inline_simulation_functors.cuh.

Member Data Documentation

§ pop

template<typename Functor_d , typename Functor_d_pop >
int Sim_Model::demography_population_specific< Functor_d, Functor_d_pop >::pop

population with specific demography function

Definition at line 205 of file go_fish.cuh.

§ generation_shift

template<typename Functor_d , typename Functor_d_pop >
int Sim_Model::demography_population_specific< Functor_d, Functor_d_pop >::generation_shift

number of generations to shift function backwards

useful if you are starting the simulation from a previous simulation state and this function is expecting to start at 0 or any scenario where you want to shift the generation of the function relative to the simulation generation

Definition at line 206 of file go_fish.cuh.

§ d

template<typename Functor_d , typename Functor_d_pop >
Functor_d Sim_Model::demography_population_specific< Functor_d, Functor_d_pop >::d

demographic function applied to all other populations

Definition at line 207 of file go_fish.cuh.

§ d_pop

template<typename Functor_d , typename Functor_d_pop >
Functor_d_pop Sim_Model::demography_population_specific< Functor_d, Functor_d_pop >::d_pop

population specific demographic function for pop

Definition at line 208 of file go_fish.cuh.


The documentation for this struct was generated from the following files: