62 double dt2, r, s, u, v, w;
63 double cai, ca_last, t_last;
64 double ct1, ct1_last, ct2, ct2_last, ct3, ct3_last;
65 double ct1i, ct1i_last, ct2i, ct2i_last, ct3i, ct3i_last;
70 if(ct==NULL)
return 2;
76 t_last=0.0;
if(t[0]<t_last) t_last=t[0];
78 ct1_last=ct2_last=ct3_last=ct1i_last=ct2i_last=ct3i_last=0.0;
79 ct1=ct2=ct3=ct1i=ct2i=ct3i=0.0;
82 dt2=0.5*(t[i]-t_last);
88 cai+=(ca[i]+ca_last)*dt2;
92 u=ct1i_last+dt2*ct1_last;
93 v=ct2i_last+dt2*ct2_last;
94 w=ct3i_last+dt2*ct3_last;
96 ct1 = ( k1*cai - (k2 + (k3/r) + (k5/s))*u + (k4/r)*v + (k6/s)*w )
97 / ( 1.0 + dt2*(k2 + (k3/r) + (k5/s)) );
98 ct1i = ct1i_last + dt2*(ct1_last+ct1);
100 ct2 = (k3*ct1i - k4*v) / r;
101 ct2i = ct2i_last + dt2*(ct2_last+ct2);
103 ct3 = (k5*ct1i - k6*w) / s;
104 ct3i = ct3i_last + dt2*(ct3_last+ct3);
108 if(cta!=NULL) cta[i]=ct1;
109 if(ctb!=NULL) ctb[i]=ct2;
110 if(ctc!=NULL) ctc[i]=ct3;
112 t_last=t[i]; ca_last=ca[i];
113 ct1_last=ct1; ct1i_last=ct1i;
114 ct2_last=ct2; ct2i_last=ct2i;
115 ct3_last=ct3; ct3i_last=ct3i;
185 double dt2, r, s, u, v, w, va, vv;
186 double cai, ca_last, t_last, dct, cvb;
187 double ct1, ct1_last, ct2, ct2_last, ct3, ct3_last;
188 double ct1i, ct1i_last, ct2i, ct2i_last, ct3i, ct3i_last;
193 if(cpet==NULL)
return 2;
197 if(vb<0.0 || vb>=1.0)
return 4;
198 if(fa<=0.0 || fa>1.0)
return 5;
199 va=fa*vb; vv=(1.0-fa)*vb;
202 t_last=0.0;
if(t[0]<t_last) t_last=t[0];
204 ct1_last=ct2_last=ct3_last=ct1i_last=ct2i_last=ct3i_last=0.0;
205 ct1=ct2=ct3=ct1i=ct2i=ct3i=0.0;
206 for(i=0; i<nr; i++) {
208 dt2=0.5*(t[i]-t_last);
214 cai+=(ca[i]+ca_last)*dt2;
218 u=ct1i_last+dt2*ct1_last;
219 v=ct2i_last+dt2*ct2_last;
220 w=ct3i_last+dt2*ct3_last;
222 ct1 = ( k1*cai - (k2 + (k3/r) + (k5/s))*u + (k4/r)*v + (k6/s)*w )
223 / ( 1.0 + dt2*(k2 + (k3/r) + (k5/s)) );
224 ct1i = ct1i_last + dt2*(ct1_last+ct1);
226 ct2 = (k3*ct1i - k4*v) / r;
227 ct2i = ct2i_last + dt2*(ct2_last+ct2);
229 ct3 = (k5*ct1i - k6*w) / s;
230 ct3i = ct3i_last + dt2*(ct3_last+ct3);
233 if(f>0.) {dct = k1*ca[i] - k2*ct1; cvb = cb[i] - dct/f;}
else cvb=cb[i];
235 if(vvm==0) cpet[i]= va*cb[i] + vv*cvb + (1.0-vb)*(ct1+ct2+ct3);
236 else cpet[i]= va*cb[i] + vv*cvb + (ct1+ct2+ct3);
237 if(cta!=NULL) {cta[i]=ct1;
if(vvm==0) cta[i]*=(1.0-vb);}
238 if(ctb!=NULL) {ctb[i]=ct2;
if(vvm==0) ctb[i]*=(1.0-vb);}
239 if(ctc!=NULL) {ctc[i]=ct3;
if(vvm==0) ctc[i]*=(1.0-vb);}
240 if(ctab!=NULL) {ctab[i]=va*cb[i];}
241 if(ctvb!=NULL) {ctvb[i]=vv*cvb;}
243 t_last=t[i]; ca_last=ca[i];
244 ct1_last=ct1; ct1i_last=ct1i;
245 ct2_last=ct2; ct2i_last=ct2i;
246 ct3_last=ct3; ct3i_last=ct3i;
int simC3p(double *t, double *ca, const int nr, const double k1, const double k2, const double k3, const double k4, const double k5, const double k6, double *ct, double *cta, double *ctb, double *ctc)
int simC3vp(double *t, double *ca, double *cb, const int nr, const double k1, const double k2, const double k3, const double k4, const double k5, const double k6, const double f, const double vb, const double fa, const int vvm, double *cpet, double *cta, double *ctb, double *ctc, double *ctab, double *ctvb)