static void PrintFinalStats(void *cvode_mem) { int flag; long int nst, nfe, nsetups, netf, nni, ncfn, njeB, nfeB; flag = CVodeGetNumSteps(cvode_mem, &nst); check_flag(&flag, "CVodeGetNumSteps", 1); flag = CVodeGetNumRhsEvals(cvode_mem, &nfe); check_flag(&flag, "CVodeGetNumRhsEvals", 1); flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups); check_flag(&flag, "CVodeGetNumLinSolvSetups", 1); flag = CVodeGetNumErrTestFails(cvode_mem, &netf); check_flag(&flag, "CVodeGetNumErrTestFails", 1); flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni); check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1); flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn); check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1); flag = CVBandGetNumJacEvals(cvode_mem, &njeB); check_flag(&flag, "CVBandGetNumJacEvals", 1); flag = CVBandGetNumRhsEvals(cvode_mem, &nfeB); check_flag(&flag, "CVBandGetNumRhsEvals", 1); printf("\nFinal Statistics:\n"); printf("nst = %-6ld nfe = %-6ld nsetups = %-6ld nfeB = %-6ld njeB = %ld\n", nst, nfe, nsetups, nfeB, njeB); printf("nni = %-6ld ncfn = %-6ld netf = %ld\n \n", nni, ncfn, netf); return; }
static void PrintFinalStats(void *cvode_mem, int miter, realtype ero) { long int lenrw, leniw, nst, nfe, nsetups, nni, ncfn, netf; long int lenrwL, leniwL, nje, nfeL; int flag; flag = CVodeGetWorkSpace(cvode_mem, &lenrw, &leniw); check_flag(&flag, "CVodeGetWorkSpace", 1); flag = CVodeGetNumSteps(cvode_mem, &nst); check_flag(&flag, "CVodeGetNumSteps", 1); flag = CVodeGetNumRhsEvals(cvode_mem, &nfe); check_flag(&flag, "CVodeGetNumRhsEvals", 1); flag = CVodeGetNumLinSolvSetups(cvode_mem, &nsetups); check_flag(&flag, "CVodeGetNumLinSolvSetups", 1); flag = CVodeGetNumErrTestFails(cvode_mem, &netf); check_flag(&flag, "CVodeGetNumErrTestFails", 1); flag = CVodeGetNumNonlinSolvIters(cvode_mem, &nni); check_flag(&flag, "CVodeGetNumNonlinSolvIters", 1); flag = CVodeGetNumNonlinSolvConvFails(cvode_mem, &ncfn); check_flag(&flag, "CVodeGetNumNonlinSolvConvFails", 1); printf("\n Final statistics for this run:\n\n"); printf(" CVode real workspace length = %4ld \n", lenrw); printf(" CVode integer workspace length = %4ld \n", leniw); printf(" Number of steps = %4ld \n", nst); printf(" Number of f-s = %4ld \n", nfe); printf(" Number of setups = %4ld \n", nsetups); printf(" Number of nonlinear iterations = %4ld \n", nni); printf(" Number of nonlinear convergence failures = %4ld \n", ncfn); printf(" Number of error test failures = %4ld \n\n",netf); if (miter != FUNC) { switch(miter) { case DENSE_USER : case DENSE_DQ : flag = CVDenseGetNumJacEvals(cvode_mem, &nje); check_flag(&flag, "CVDenseGetNumJacEvals", 1); flag = CVDenseGetNumRhsEvals(cvode_mem, &nfeL); check_flag(&flag, "CVDenseGetNumRhsEvals", 1); flag = CVDenseGetWorkSpace(cvode_mem, &lenrwL, &leniwL); check_flag(&flag, "CVDenseGetWorkSpace", 1); break; case BAND_USER : case BAND_DQ : flag = CVBandGetNumJacEvals(cvode_mem, &nje); check_flag(&flag, "CVBandGetNumJacEvals", 1); flag = CVBandGetNumRhsEvals(cvode_mem, &nfeL); check_flag(&flag, "CVBandGetNumRhsEvals", 1); flag = CVBandGetWorkSpace(cvode_mem, &lenrwL, &leniwL); check_flag(&flag, "CVBandGetWorkSpace", 1); break; case DIAG : nje = nsetups; flag = CVDiagGetNumRhsEvals(cvode_mem, &nfeL); check_flag(&flag, "CVDiagGetNumRhsEvals", 1); flag = CVDiagGetWorkSpace(cvode_mem, &lenrwL, &leniwL); check_flag(&flag, "CVDiagGetWorkSpace", 1); break; } printf(" Linear solver real workspace length = %4ld \n", lenrwL); printf(" Linear solver integer workspace length = %4ld \n", leniwL); printf(" Number of Jacobian evaluations = %4ld \n", nje); printf(" Number of f-s evaluations = %4ld \n\n", nfeL); } #if defined(SUNDIALS_EXTENDED_PRECISION) printf(" Error overrun = %.3Lf \n", ero); #else printf(" Error overrun = %.3f \n", ero); #endif }