6 vector<double>::iterator its = S + n_statevars_system;
7 vector<double>::iterator itr = dSdt + n_statevars_system;
9 for (
int s = 0; s<species_vec.size(); ++s){
10 auto spp = species_vec[s];
13 for (
int i=0; i<spp->J; ++i) *itr++ = 0;
15 if (spp->n_extra_statevars > 0){
17 spp->getExtraRates(itr);
18 assert(distance(itr_prev, itr) == spp->n_extra_statevars*spp->J);
19 its += spp->n_extra_statevars*spp->J;
27 vector<double>::iterator its = S.begin() + n_statevars_system;
30 for (
int s = 0; s<species_vec.size(); ++s){
37 vector<double> &h = spp->
h;
39 vector <double> growthArray(J);
40 for (
int i=0; i<J; ++i) growthArray[i] = spp->
growthRate(i, spp->
getX(i), t, env);
45 birthFlux = calcSpeciesBirthFlux(s,t) * pe;
52 double B0 = 1 + dt/h[0]*growthArray[0] + dt*spp->
mortalityRate(0, spp->
getX(0), t, env);
54 double C0 = spp->
getU(0) + dt/h[0]*birthFlux;
58 for (
int w = 1; w < J; ++w){
59 double Aw = -growthArray[w-1]*dt/h[w];
60 double Bw = 1 + dt/h[w]*growthArray[w] + dt*spp->
mortalityRate(w, spp->
getX(w), t, env);
61 double Cw = spp->
getU(w);
63 U[w] = (Cw - Aw*U[w-1])/Bw;
virtual double growthRate(int i, double x, double t, void *env)=0
virtual double getU(int i)=0
virtual double getX(int i)=0
void stepU_iFMU(double t, std::vector< double > &S, std::vector< double > &dSdt, double dt)
void calcRates_iFMU(double t, std::vector< double >::iterator S, std::vector< double >::iterator dSdt)
virtual double establishmentProbability(double t, void *env)=0
virtual double mortalityRate(int i, double x, double t, void *env)=0
virtual double calc_boundary_u(double gb, double pe)=0