55 double cai, ca_last, t_last;
56 double ct1, ct1_last, ct2, ct2_last;
57 double ct1i, ct1i_last, ct2i, ct2i_last;
62 if(t==NULL || ca==NULL || ct==NULL)
return 2;
68 t_last=0.0;
if(t[0]<t_last) t_last=t[0];
70 ct1_last=ct2_last=ct1i_last=ct2i_last=0.0;
71 ct1=ct2=ct1i=ct2i=0.0;
74 dt2=0.5*(t[i]-t_last);
80 cai+=(ca[i]+ca_last)*dt2;
83 u=ct1i_last+dt2*ct1_last;
84 v=ct2i_last+dt2*ct2_last;
86 ct1 = ( k1*cai - (k2 + (k3/r))*u + (k4/r)*v ) / ( 1.0 + dt2*(k2 + (k3/r)) );
87 ct1i = ct1i_last + dt2*(ct1_last+ct1);
89 ct2 = (k3*ct1i - k4*v) / r;
90 ct2i = ct2i_last + dt2*(ct2_last+ct2);
94 if(cta!=NULL) cta[i]=ct1;
95 if(ctb!=NULL) ctb[i]=ct2;
97 t_last=t[i]; ca_last=ca[i];
98 ct1_last=ct1; ct1i_last=ct1i;
99 ct2_last=ct2; ct2i_last=ct2i;
149 double ct1, ct1_last, ct2, ct2_last;
150 double ct1i, ct1i_last, ct2i, ct2i_last;
155 if(t==NULL || cai==NULL || ct==NULL)
return 2;
161 t_last=0.0;
if(t[0]<t_last) t_last=t[0];
162 ct1_last=ct2_last=ct1i_last=ct2i_last=0.0;
163 ct1=ct2=ct1i=ct2i=0.0;
164 for(i=0; i<nr; i++) {
166 dt2=0.5*(t[i]-t_last);
173 u=ct1i_last+dt2*ct1_last;
174 v=ct2i_last+dt2*ct2_last;
176 ct1 = ( k1*cai[i] - (k2 + (k3/r))*u + (k4/r)*v ) / ( 1.0 + dt2*(k2 + (k3/r)) );
177 ct1i = ct1i_last + dt2*(ct1_last+ct1);
179 ct2 = (k3*ct1i - k4*v) / r;
180 ct2i = ct2i_last + dt2*(ct2_last+ct2);
184 if(cta!=NULL) cta[i]=ct1;
185 if(ctb!=NULL) ctb[i]=ct2;
188 ct1_last=ct1; ct1i_last=ct1i;
189 ct2_last=ct2; ct2i_last=ct2i;
int simC2(double *t, double *ca, const int nr, const double k1, const double k2, const double k3, const double k4, double *ct, double *cta, double *ctb)
int simC2_i(double *t, double *cai, const int nr, const double k1, const double k2, const double k3, const double k4, double *ct, double *cta, double *ctb)