/* Parametrized simulation driver */ EXP long M_DECL ParamDriverC(double t0, double dt, long npts, double *ic, double *p, double *out, char *errbuf, long internal) { double u[NINP],y[NOUT],w[1+2*NEQ+NPAR+NDFA+NEVT]; long i,j; SolverStruct S; /* Setup */ for(i=0; i<npts*(NOUT+1); i++) out[i]=*dsn_undef; S.w=w; if(internal==0) S.err=0; else S.err=-1; S.buf=errbuf; SolverSetup(t0,ic,u,p,y,dt,&S); /* Output */ out[0]=t0; for(j=0; j<NOUT; j++) out[j+1]=y[j]; /* Integration loop */ for(i=1; i<npts; i++) { /* Take a step with states */ EulerStep(u,&S); if( S.err>0 ) break; /* Output */ SolverOutputs(y,&S); out[i*(NOUT+1)]=S.w[0]; for(j=0; j<NOUT; j++) out[i*(NOUT+1)+j+1]=y[j]; } return(i); }
void Sim::reset(double* out, double* ic) { SolverSetup(t0, ic, u0, params, y, dt, &S); /* Output */ out[0] = t0; for(int j = 0; j < NOUT; j++) out[j + 1] = y[j]; }