61 double b, c, d, w, z, dt2;
62 double cai, ca_last, t_last;
63 double ct1, ct1_last, ct2, ct2_last, ct3, ct3_last;
64 double ct1i, ct1i_last, ct2i, ct2i_last, ct3i, ct3i_last;
69 if(ct==NULL)
return 2;
73 if(k3<=0.0) {k3=0.0;
if(k2<=0.0) k2=0.0;}
74 else if(k5<=0.0) {k5=0.0;
if(k4<=0.0) k4=0.0;}
75 else {
if(k6<=0.0) k6=0.0;}
78 t_last=0.0;
if(t[0]<t_last) t_last=t[0];
80 ct1_last=ct2_last=ct3_last=ct1i_last=ct2i_last=ct3i_last=0.0;
81 ct1=ct2=ct3=ct1i=ct2i=ct3i=0.0;
84 dt2=0.5*(t[i]-t_last);
90 cai+=(ca[i]+ca_last)*dt2;
92 b=ct1i_last+dt2*ct1_last;
93 c=ct2i_last+dt2*ct2_last;
94 d=ct3i_last+dt2*ct3_last;
95 w=k4 + k5 - (k5*k6*dt2)/(1.0+k6*dt2);
99 + k1*z*cai + (k3*k4*dt2 - (k2+k3)*z)*b
100 + k4*c + k4*k6*dt2*d/(1.0+k6*dt2)
101 ) / ( z*(1.0 + dt2*(k2+k3)) - k3*k4*dt2*dt2 );
102 ct1i = ct1i_last + dt2*(ct1_last+ct1);
104 ct2 = (k3*ct1i - w*c + k6*d/(1.0+k6*dt2)) / z;
105 ct2i = ct2i_last + dt2*(ct2_last+ct2);
107 ct3 = (k5*ct2i - k6*d) / (1.0 + k6*dt2);
108 ct3i = ct3i_last + dt2*(ct3_last+ct3);
112 if(cta!=NULL) cta[i]=ct1;
113 if(ctb!=NULL) ctb[i]=ct2;
114 if(ctc!=NULL) ctc[i]=ct3;
116 t_last=t[i]; ca_last=ca[i];
117 ct1_last=ct1; ct1i_last=ct1i;
118 ct2_last=ct2; ct2i_last=ct2i;
119 ct3_last=ct3; ct3i_last=ct3i;
188 double b, c, d, w, z, dt2, va, vv;
189 double cai, ca_last, t_last, dct, cvb;
190 double ct1, ct1_last, ct2, ct2_last, ct3, ct3_last;
191 double ct1i, ct1i_last, ct2i, ct2i_last, ct3i, ct3i_last;
196 if(cpet==NULL)
return 2;
200 if(vb<0.0 || vb>=1.0)
return 4;
201 if(fa<=0.0 || fa>1.0)
return 5;
202 va=fa*vb; vv=(1.0-fa)*vb;
205 t_last=0.0;
if(t[0]<t_last) t_last=t[0];
207 ct1_last=ct2_last=ct3_last=ct1i_last=ct2i_last=ct3i_last=0.0;
208 ct1=ct2=ct3=ct1i=ct2i=ct3i=0.0;
209 for(i=0; i<nr; i++) {
211 dt2=0.5*(t[i]-t_last);
217 cai+=(ca[i]+ca_last)*dt2;
219 b=ct1i_last+dt2*ct1_last;
220 c=ct2i_last+dt2*ct2_last;
221 d=ct3i_last+dt2*ct3_last;
222 w=k4 + k5 - (k5*k6*dt2)/(1.0+k6*dt2);
226 + k1*z*cai + (k3*k4*dt2 - (k2+k3)*z)*b
227 + k4*c + k4*k6*dt2*d/(1.0+k6*dt2)
228 ) / ( z*(1.0 + dt2*(k2+k3)) - k3*k4*dt2*dt2 );
229 ct1i = ct1i_last + dt2*(ct1_last+ct1);
231 ct2 = (k3*ct1i - w*c + k6*d/(1.0+k6*dt2)) / z;
232 ct2i = ct2i_last + dt2*(ct2_last+ct2);
234 ct3 = (k5*ct2i - k6*d) / (1.0 + k6*dt2);
235 ct3i = ct3i_last + dt2*(ct3_last+ct3);
238 if(f>0.) {dct = k1*ca[i] - k2*ct1; cvb = cb[i] - dct/f;}
else cvb=cb[i];
240 if(vvm==0) cpet[i]= va*cb[i] + vv*cvb + (1.0-vb)*(ct1+ct2+ct3);
241 else cpet[i]= va*cb[i] + vv*cvb + (ct1+ct2+ct3);
242 if(cta!=NULL) {cta[i]=ct1;
if(vvm==0) cta[i]*=(1.0-vb);}
243 if(ctb!=NULL) {ctb[i]=ct2;
if(vvm==0) ctb[i]*=(1.0-vb);}
244 if(ctc!=NULL) {ctc[i]=ct3;
if(vvm==0) ctc[i]*=(1.0-vb);}
245 if(ctab!=NULL) {ctab[i]=va*cb[i];}
246 if(ctvb!=NULL) {ctvb[i]=vv*cvb;}
248 t_last=t[i]; ca_last=ca[i];
249 ct1_last=ct1; ct1i_last=ct1i;
250 ct2_last=ct2; ct2i_last=ct2i;
251 ct3_last=ct3; ct3i_last=ct3i;
int simC3vs(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)
int simC3s(double *t, double *ca, const int nr, double k1, double k2, double k3, double k4, double k5, double k6, double *ct, double *cta, double *ctb, double *ctc)