int CVAspilsJacTimesVec(N_Vector vB, N_Vector JvB, realtype t, N_Vector yB, N_Vector fyB, 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", "CVAspilsJacTimesVec", MSGS_BAD_T); return(-1); } /* Call user's adjoint jtimesB routine */ retval = jtimes_B(vB, JvB, t, ytmp, yB, fyB, jac_data_B, tmpB); return(retval); }
static int cvSpilsJacTimesVecBWrapper(N_Vector vB, N_Vector JvB, realtype t, N_Vector yB, N_Vector fyB, 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", "cvSpilsJacTimesVecBWrapper", MSGS_BAD_TINTERP); return(-1); } /* Call user's adjoint jtimesB routine */ retval = jtimes_B(vB, JvB, t, ytmp, yB, fyB, cvB_mem->cv_user_data, tmpB); return(retval); }