int FCVBandJac(long int N, long int mupper, long int mlower, BandMat J, realtype t, N_Vector y, N_Vector fy, void *jac_data, N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3) { int ier; realtype *ydata, *fydata, *jacdata, *v1data, *v2data, *v3data; realtype h; long int eband; FCVUserData CV_userdata; CVodeGetLastStep(CV_cvodemem, &h); ydata = N_VGetArrayPointer(y); fydata = N_VGetArrayPointer(fy); v1data = N_VGetArrayPointer(vtemp1); v2data = N_VGetArrayPointer(vtemp2); v3data = N_VGetArrayPointer(vtemp3); eband = (J->smu) + mlower + 1; jacdata = BAND_COL(J,0) - mupper; CV_userdata = (FCVUserData) jac_data; FCV_BJAC(&N, &mupper, &mlower, &eband, &t, ydata, fydata, jacdata, &h, CV_userdata->ipar, CV_userdata->rpar, v1data, v2data, v3data, &ier); return(ier); }
void FCVBandJac(long int N, long int mupper, long int mlower, BandMat J, realtype t, N_Vector y, N_Vector fy, void *jac_data, N_Vector vtemp1, N_Vector vtemp2, N_Vector vtemp3) { N_Vector ewt; realtype *ydata, *fydata, *jacdata, *ewtdata, *v1data, *v2data, *v3data; realtype h; long int eband; ewt = N_VClone(y); CVodeGetErrWeights(CV_cvodemem, ewt); CVodeGetLastStep(CV_cvodemem, &h); ydata = N_VGetArrayPointer(y); fydata = N_VGetArrayPointer(fy); v1data = N_VGetArrayPointer(vtemp1); v2data = N_VGetArrayPointer(vtemp2); v3data = N_VGetArrayPointer(vtemp3); ewtdata = N_VGetArrayPointer(ewt); eband = (J->smu) + mlower + 1; jacdata = BAND_COL(J,0) - mupper; FCV_BJAC(&N, &mupper, &mlower, &eband, &t, ydata, fydata, jacdata, ewtdata, &h, v1data, v2data, v3data); N_VDestroy(ewt); }