56 double cri, cr_last, t_last;
57 double cf, cf_last, cb, cb_last;
58 double cfi, cfi_last, cbi, cbi_last;
63 if(ct==NULL)
return 2;
66 t_last=0.0;
if(t[0]<t_last) t_last=t[0];
67 cri=cr_last=0.0; cf_last=cb_last=cfi_last=cbi_last=cf=cb=cfi=cbi=0.0;
70 dt2=0.5*(t[i]-t_last);
76 cri+=(cr[i]+cr_last)*dt2;
78 f=cfi_last+dt2*cf_last;
79 b=cbi_last+dt2*cb_last;
80 w=k2 + k3 + k2*k4*dt2;
82 cf = ( (1.0 + k4*dt2)*(R1*cr[i] + k2*cri) + k4*b - w*f ) / ( 1.0 + dt2*(w+k4) );
83 cfi = cfi_last + dt2*(cf_last+cf);
85 cb = (k3*cfi - k4*b) / (1.0 + k4*dt2);
86 cbi = cbi_last + dt2*(cb_last+cb);
90 if(cta!=NULL) cta[i]=cf;
91 if(ctb!=NULL) ctb[i]=cb;
93 t_last=t[i]; cr_last=cr[i];
94 cf_last=cf; cfi_last=cfi;
95 cb_last=cb; cbi_last=cbi;
132 double cri, cr_last, t_last;
133 double ct_last, cti, cti_last;
138 if(ct==NULL)
return 2;
141 t_last=0.0;
if(t[0]<t_last) t_last=t[0];
142 cri=cr_last=0.0; cti=ct_last=cti_last=0.0;
143 for(i=0; i<nr; i++) {
145 dt2=0.5*(t[i]-t_last);
151 cri+=(cr[i]+cr_last)*dt2;
153 ct[i] = ( R1*cr[i] + k2*cri - (k2/(1.0+BP))*(cti_last+dt2*ct_last) ) /
154 ( 1.0 + dt2*(k2/(1.0+BP)) );
155 cti = cti_last + dt2*(ct_last+ct[i]);
160 t_last=t[i]; cr_last=cr[i];
161 ct_last=ct[i]; cti_last=cti;
200 double cri, cr_last, t_last;
201 double ct_last, cti, cti_last;
206 if(ct==NULL)
return 2;
209 t_last=0.0;
if(t[0]<t_last) t_last=t[0];
210 cri=cr_last=0.0; cti=ct_last=cti_last=0.0;
211 for(i=0; i<nr; i++) {
213 dt2=0.5*(t[i]-t_last);
219 cri+=(cr[i]+cr_last)*dt2;
221 ct[i] = ( R1*cr[i] + R1*k3*cri - (k2+k3)*(cti_last+dt2*ct_last) ) / ( 1.0 + dt2*(k2+k3) );
222 cti = cti_last + dt2*(ct_last+ct[i]);
227 t_last=t[i]; cr_last=cr[i];
228 ct_last=ct[i]; cti_last=cti;
int simTRTM(double *t, double *cr, const int nr, const double R1, const double k2, const double k3, double *ct)
int simRTCM(double *t, double *cr, const int nr, const double R1, const double k2, const double k3, const double k4, double *ct, double *cta, double *ctb)
int simSRTM(double *t, double *cr, const int nr, const double R1, const double k2, const double BP, double *ct)