int CVAspilsPrecSolve(realtype t, N_Vector yB, N_Vector fyB, N_Vector rB, N_Vector zB, realtype gammaB, realtype deltaB, int lrB, void *cvadj_mem, N_Vector tmpB) { CVadjMem ca_mem; CVodeMem cvB_mem; CVSpilsMemB cvspilsB_mem; int retval, flag; ca_mem = (CVadjMem) cvadj_mem; cvB_mem = ca_mem->cvb_mem; cvspilsB_mem = (CVSpilsMemB) lmemB; /* Forward solution from interpolation */ flag = getY(ca_mem, t, ytmp); if (flag != CV_SUCCESS) { CVProcessError(cvB_mem, -1, "CVSPILS", "CVAspilsPrecSolve", MSGS_BAD_T); return(-1); } /* Call user's adjoint psolveB routine */ retval = psolve_B(t, ytmp, yB, fyB, rB, zB, gammaB, deltaB, lrB, P_data_B, tmpB); return(retval); }
static int cvSpilsPrecSolveBWrapper(realtype t, N_Vector yB, N_Vector fyB, N_Vector rB, N_Vector zB, realtype gammaB, realtype deltaB, int lrB, void *cvode_mem, N_Vector tmpB) { CVodeMem cv_mem; CVadjMem ca_mem; CVodeBMem cvB_mem; CVSpilsMemB cvspilsB_mem; int retval, flag; cv_mem = (CVodeMem) cvode_mem; ca_mem = cv_mem->cv_adj_mem; cvB_mem = ca_mem->ca_bckpbCrt; cvspilsB_mem = (CVSpilsMemB) (cvB_mem->cv_lmem); /* Forward solution from interpolation */ flag = IMget(cv_mem, t, ytmp, NULL); if (flag != CV_SUCCESS) { cvProcessError(cv_mem, -1, "CVSPILS", "cvSpilsPrecSolveBWrapper", MSGS_BAD_TINTERP); return(-1); } /* Call user's adjoint psolveB routine */ retval = psolve_B(t, ytmp, yB, fyB, rB, zB, gammaB, deltaB, lrB, cvB_mem->cv_user_data, tmpB); return(retval); }