libpspm
species.h
Go to the documentation of this file.
1 #ifndef PSPM_PSPM_SPECIES_H_
2 #define PSPM_PSPM_SPECIES_H_
3 
4 #include <vector>
5 #include <list>
6 #include <string>
7 
8 //#include "iterator_set.h"
9 #include "cohort.h"
10 
11 // forward declaration of Solver so Species can befriend it
12 class Solver;
13 
14 
16  // Solver should be able to access Species' privates
17  friend class Solver;
18 
19  protected: // private members
20  int J;
22 
23  std::list<double> birth_flux_out_history;
24 
25  // These are only used by FMU solver.
26  // Others derive them from the state.
27  // Kept private so users dont accidently access them for other solvers
28  std::vector <double> X;
29  std::vector <double> x;
30  std::vector <double> h;
31  std::vector <double> schedule; // used only by CM/EBT
32 
33  public:
34  double birth_flux_in;
35 
36  //debug only
37  bool bfin_is_u0in = false;
38 
39 
40  public: // public members
41  double xb;
43 
44 
45  public: // public functions
46 
47  virtual ~Species_Base() = 0;
48 
49  int xsize();
50  int size();
51 
52  void set_inputBirthFlux(double b);
53  void set_bfin_is_u0in(bool flag);
54 
55  public:
56  virtual void resize(int _J) = 0;
57  virtual double get_maxSize() = 0;
58  virtual void print() = 0;
59 
60  virtual void set_xb(double _xb) = 0;
61  virtual void set_ub(double _ub) = 0;
62  virtual void set_birthTime(int i, double t0) = 0;
63  virtual void setX(int i, double _x) = 0;
64  virtual void setU(int i, double _u) = 0;
65 
66  virtual double getX(int i) = 0;
67  virtual double getU(int i) = 0;
68 
69  virtual double init_density(int i, double x, void * env) = 0;
70  virtual void initAndCopyExtraState(double t, void * env, std::vector<double>::iterator &it) = 0;
71  virtual void initBoundaryCohort(double t, void * env) = 0;
72 
73  virtual void copyExtraStateToCohorts(std::vector<double>::iterator &it) = 0;
74  virtual void copyCohortsExtraToState(std::vector<double>::iterator &it) = 0;
75 
76  virtual double establishmentProbability(double t, void * env) = 0;
77  virtual double calc_boundary_u(double gb, double pe) = 0;
78  virtual double get_boundary_u() = 0;
79 
80  virtual void triggerPreCompute() = 0;
81 
82  // TODO: argument x can probably be removed from these functions
83  virtual double growthRate(int i, double x, double t, void * env) = 0;
84  virtual double growthRateOffset(int i, double x, double t, void * env) = 0;
85  virtual std::vector<double> growthRateGradient(int i, double x, double t, void * env, double grad_dx) = 0;
86  virtual std::vector<double> growthRateGradientCentered(int i, double xplus, double xminus, double t, void * env) = 0;
87  virtual double mortalityRate(int i, double x, double t, void * env) = 0;
88  virtual std::vector<double> mortalityRateGradient(int i, double x, double t, void * env, double grad_dx) = 0;
89  virtual double birthRate(int i, double x, double t, void * env) = 0;
90  virtual void getExtraRates(std::vector<double>::iterator &it) = 0;
91 
92  virtual void addCohort() = 0;
93  template<class T> void addCohort(T bc);
94 
95  virtual void removeDensestCohort() = 0;
96  virtual void removeDenseCohorts(double dxcut) = 0;
97  virtual void removeDeadCohorts(double ucut) = 0;
98 
99 // virtual void backupCohort(int j) = 0;
100 // virtual void restoreCohort(int j) = 0;
101 // virtual void copyBoundaryCohortTo(int j) = 0;
102 };
103 
104 
105 
106 template <class Model>
107 class Species : public Species_Base{
108  protected:
109  std::vector<Cohort<Model>> cohorts;
111 
112  Cohort<Model> savedCohort; // a cohort to save a backup of any other cohort
113 
114  public:
115  // TODO: make these virtual? - not needed. They are virtual by default.
116  Species(std::vector<double> breaks = std::vector<double>());
117  Species(Model M);
118 
119  void resize(int _J);
120  double get_maxSize();
121 
122  void print();
123 
124  void set_xb(double _xb);
125  void set_ub(double _ub);
126  void set_birthTime(int i, double t0);
127  void setX(int i, double _x);
128  void setU(int i, double _u);
129 
130  double getX(int i);
131  double getU(int i);
132 
133  double init_density(int i, double x, void * env);
134  void initAndCopyExtraState(double t, void * env, std::vector<double>::iterator &it);
135  void initBoundaryCohort(double t, void * env);
136 
137  void copyExtraStateToCohorts(std::vector<double>::iterator &it);
138  void copyCohortsExtraToState(std::vector<double>::iterator &it);
139 
140  double establishmentProbability(double t, void * env);
141  double calc_boundary_u(double gb, double pe);
142  double get_boundary_u();
143 
144  void triggerPreCompute();
145  double growthRate(int i, double x, double t, void * env);
146  double growthRateOffset(int i, double x, double t, void * env);
147  std::vector<double> growthRateGradient(int i, double x, double t, void * env, double grad_dx);
148  std::vector<double> growthRateGradientCentered(int i, double xplus, double xminus, double t, void * env);
149  double mortalityRate(int i, double x, double t, void * env);
150  std::vector<double> mortalityRateGradient(int i, double x, double t, void * env, double grad_dx);
151  double birthRate(int i, double x, double t, void * env);
152  void getExtraRates(std::vector<double>::iterator &it);
153 
154  void addCohort();
155  void addCohort(Cohort<Model> bc);
156 
157  void removeDensestCohort();
158  void removeDenseCohorts(double dxcut);
159  void removeDeadCohorts(double ucut);
160 
161 // void backupCohort(int j);
162 // void restoreCohort(int j);
163 // void copyBoundaryCohortTo(int j);
164 
165  public:
166  Cohort<Model>& getCohort(int i);
167 };
168 
169 
170 #include "../src/species.tpp"
171 
172 #endif
virtual double growthRate(int i, double x, double t, void *env)=0
virtual double get_maxSize()=0
Cohort< Model > savedCohort
Definition: species.h:112
virtual double init_density(int i, double x, void *env)=0
Cohort< Model > boundaryCohort
Definition: species.h:110
virtual void resize(int _J)=0
bool bfin_is_u0in
Definition: species.h:37
virtual double get_boundary_u()=0
virtual void removeDensestCohort()=0
virtual void removeDeadCohorts(double ucut)=0
std::vector< double > h
Definition: species.h:30
virtual double getU(int i)=0
std::list< double > birth_flux_out_history
Definition: species.h:23
virtual ~Species_Base()=0
Definition: species.cpp:4
virtual void addCohort()=0
virtual void set_ub(double _ub)=0
int n_extra_statevars
Definition: species.h:21
virtual double getX(int i)=0
virtual void set_xb(double _xb)=0
virtual void initBoundaryCohort(double t, void *env)=0
int xsize()
Definition: species.cpp:45
void set_inputBirthFlux(double b)
Definition: species.cpp:30
virtual std::vector< double > mortalityRateGradient(int i, double x, double t, void *env, double grad_dx)=0
virtual std::vector< double > growthRateGradientCentered(int i, double xplus, double xminus, double t, void *env)=0
virtual void initAndCopyExtraState(double t, void *env, std::vector< double >::iterator &it)=0
virtual void getExtraRates(std::vector< double >::iterator &it)=0
virtual double establishmentProbability(double t, void *env)=0
bool is_resident
Definition: species.h:42
virtual double growthRateOffset(int i, double x, double t, void *env)=0
EnvironmentBase * env
Definition: solver.h:24
virtual void triggerPreCompute()=0
virtual double birthRate(int i, double x, double t, void *env)=0
std::vector< double > x
Definition: species.h:29
virtual double mortalityRate(int i, double x, double t, void *env)=0
virtual void copyCohortsExtraToState(std::vector< double >::iterator &it)=0
virtual void set_birthTime(int i, double t0)=0
double birth_flux_in
Definition: species.h:34
Definition: solver.h:15
virtual void removeDenseCohorts(double dxcut)=0
virtual void setU(int i, double _u)=0
double xb
Definition: species.h:41
virtual double calc_boundary_u(double gb, double pe)=0
virtual std::vector< double > growthRateGradient(int i, double x, double t, void *env, double grad_dx)=0
std::vector< Cohort< Model > > cohorts
Definition: species.h:109
virtual void copyExtraStateToCohorts(std::vector< double >::iterator &it)=0
void set_bfin_is_u0in(bool flag)
Definition: species.cpp:40
virtual void setX(int i, double _x)=0
std::vector< double > X
Definition: species.h:28
virtual void print()=0
std::vector< double > schedule
Definition: species.h:31