7 return max(max(0.0,min(2*r,1.0)),min(r,2.0));
13 vector<double>::iterator its = S + n_statevars_system;
14 vector<double>::iterator itr = dSdt + n_statevars_system;
16 for (
int s = 0; s<species_vec.size(); ++s){
22 double *dUdt = &(*itr);
24 vector<double> &x = spp->
x;
25 vector<double> &X = spp->
X;
26 vector<double> &h = spp->
h;
28 vector <double> growthArray(J+1);
29 growthArray[0] = spp->
growthRate(-1, x[0], t, env);
30 for (
int i=1; i<J+1; ++i) growthArray[i] = spp->
growthRateOffset(i-1, x[i], t, env);
32 vector <double> u(J+1);
37 double birthFlux = calcSpeciesBirthFlux(s,t) * pe;
38 u[0] = birthFlux/(growthArray[0]+1e-12);
47 for (
int i=2; i<J-1; ++i){
48 if(growthArray[i] >=0){
49 double rMinus = ((U[i]-U[i-1])/(x[i]-x[i-1]))/((U[i-1]-U[i-2]+1e-12)/(x[i-1]-x[i-2]));
50 u[i] = U[i-1] +
phi(rMinus)*(U[i-1]-U[i-2])*(x[i]-x[i-1])/(x[i+1]-x[i-1]);
53 double rPlus = ((U[i]-U[i-1])/(x[i]-x[i-1]))/((U[i+1]-U[i]+1e-12)/(x[i+1]-x[i]));
54 u[i] = U[i] -
phi(rPlus)*(U[i+1]-U[i])*(x[i+1]-x[i])/(x[i+2]-x[i]);
58 u[J-1] = 2*U[J-2] - u[J-2];
59 u[J] = 2*U[J-1] - u[J-1];
63 for (
int i=0; i<spp->
J; ++i){
64 dUdt[i] = -spp->
mortalityRate(i,X[i], t, env)*U[i] - (growthArray[i+1]*u[i+1] - growthArray[i]*u[i])/h[i];
virtual double growthRate(int i, double x, double t, void *env)=0
void calcRates_FMU(double t, std::vector< double >::iterator S, std::vector< double >::iterator dSdt)
virtual void getExtraRates(std::vector< double >::iterator &it)=0
virtual double establishmentProbability(double t, void *env)=0
virtual double growthRateOffset(int i, double x, 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