static void Problem2(void) { void *fct; void *cpode_mem; N_Vector y, yp; realtype reltol=RTOL, abstol=ATOL, t, tout, erm, hu; int flag, iout, qu; y = NULL; yp = NULL; cpode_mem = NULL; y = N_VNew_Serial(P2_NEQ); N_VConst(ZERO, y); NV_Ith_S(y,0) = ONE; yp = N_VNew_Serial(P2_NEQ); if (ODE == CP_EXPL) { fct = (void *)f2; } else { fct = (void *)res2; f2(P2_T0, y, yp, NULL); } cpode_mem = CPodeCreate(ODE, CP_ADAMS, CP_FUNCTIONAL); /* flag = CPodeSetInitStep(cpode_mem, 2.0e-9);*/ flag = CPodeInit(cpode_mem, fct, NULL, P2_T0, y, yp, CP_SS, reltol, &abstol); printf("\n t max.err qu hu \n"); for(iout=1, tout=P2_T1; iout <= P2_NOUT; iout++, tout*=P2_TOUT_MULT) { flag = CPode(cpode_mem, tout, &t, y, yp, CP_NORMAL); if (flag != CP_SUCCESS) break; erm = MaxError(y, t); flag = CPodeGetLastOrder(cpode_mem, &qu); flag = CPodeGetLastStep(cpode_mem, &hu); printf("%10.3f %12.4le %2d %12.4le\n", t, erm, qu, hu); } PrintFinalStats(cpode_mem); CPodeFree(&cpode_mem); N_VDestroy_Serial(y); N_VDestroy_Serial(yp); return; }
int main() { void *fct; void *cpode_mem; N_Vector y, yp; realtype reltol=RTOL, abstol=ATOL, t, tout, hu; int flag, iout, qu; y = NULL; yp = NULL; cpode_mem = NULL; y = N_VNew_Serial(P1_NEQ); NV_Ith_S(y,0) = TWO; NV_Ith_S(y,1) = ZERO; yp = N_VNew_Serial(P1_NEQ); if (ODE == CP_EXPL) { fct = (void *)f; } else { fct = (void *)res; f(P1_T0, y, yp, NULL); } cpode_mem = CPodeCreate(ODE, CP_ADAMS, CP_FUNCTIONAL); /* flag = CPodeSetInitStep(cpode_mem, 4.0e-9);*/ flag = CPodeInit(cpode_mem, fct, NULL, P1_T0, y, yp, CP_SS, reltol, &abstol); printf("\n t x xdot qu hu \n"); for(iout=1, tout=P1_T1; iout <= P1_NOUT; iout++, tout += P1_DTOUT) { flag = CPode(cpode_mem, tout, &t, y, yp, CP_NORMAL); if (flag != CP_SUCCESS) break; flag = CPodeGetLastOrder(cpode_mem, &qu); flag = CPodeGetLastStep(cpode_mem, &hu); printf("%10.5f %12.5le %12.5le %2d %6.4le\n", t, NV_Ith_S(y,0), NV_Ith_S(y,1), qu, hu); } PrintFinalStats(cpode_mem); CPodeFree(&cpode_mem); N_VDestroy_Serial(y); N_VDestroy_Serial(yp); return 0; }