int CVode(void *cvode_mem, realtype tout, N_Vector yout, realtype *t, int itask);
(NORMAL or ONE_STEP) tout = desired output time. yout is the output vector
//Given
N_Vector v; //This is a pointer
real *v_data;
real r;
integer v_len;
integer i;
//User defined/alloc data
N_Vector N_VMake(integertype n, realtype *v_data, M_Env machEnv);
void N_VDispose(N_Vector v);
//Accessors
N_VGetData(v); //pointer to data storage
N_VSetData(realtype *v_data, N_Vector v)
N_VLENGTH; //Set/Get the length of the vector
N_VIth(v,i);//Like v[i]
//Manually
v = (N_Vector) malloc(sizeof(*v)); v>data = v_data; v>length = v_len;
free(v)
v>data;
v>length;
(v>data)[i]
//CVode alloc
v = N_VNew(int n, NULL)
N_VFree(v)
//CVodeMalloc
static void *cvode_mem;
cvode_mem = CVodeMalloc(N, f, t0, y0,lmm, iter, itol, &reltol, &abstol, f_data, errfp, optIn, iopt, ropt, NULL)
N = Problem Size
t0, y0 = Initial conditions
lmm = Liner Multistep method (Adams, BRF)
itol = (SS) scale relative and absolute tolerances  (SV) scalar relative and vector (N_Vactor) absolute tolerances
f_data = pointer to user data;
errfp = file pointer for error, NULL = standard output
iopt, ropt = real and integer optional inputs
**y0 is copied to zn[0]
For code see cvode.c L#495 ,cvode.h L#564
void f_GPC(long N, realtype time, N_Vector y, N_Vector ydot, void *f_data) {
f(N, tn, zn[0], ftemp, f_data);
zn[0] = y
ftemp = ydot
#define zn (cv_mem>cv_zn)
#define ftemp (cv_mem>cv_ftemp)
first run
f(N, tn, zn[0], zn[1], f_data);
Must redo pointers everytime;
