xref: /petsc/src/ts/impls/implicit/sundials/sundials.h (revision b90f4e8e2d1ae90880ffa0fd3113e4b748be9ce0)
1 
2 /*
3     Provides a PETSc interface to SUNDIALS. Alan Hindmarsh's parallel ODE
4    solver developed at LLNL.
5 */
6 
7 #if !defined(__PETSCSUNDIALS_H)
8 #define __PETSCSUNDIALS_H
9 
10 #include <private/tsimpl.h>       /*I   "petscts.h"   I*/
11 #include <private/pcimpl.h>               /*I   "petscpc.h"   I*/
12 #include <private/matimpl.h>
13 
14 /*
15    Include files specific for SUNDIALS
16 */
17 #if defined(PETSC_HAVE_SUNDIALS)
18 
19 EXTERN_C_BEGIN
20 #include <cvode/cvode.h>                  /* prototypes for CVODE fcts. */
21 #include <cvode/cvode_spgmr.h>            /* prototypes and constants for CVSPGMR solver */
22 #include <nvector/nvector_parallel.h>     /* definition N_Vector and macro NV_DATA_P  */
23 EXTERN_C_END
24 
25 typedef struct {
26   Vec        update;    /* work vector where new solution is formed */
27   Vec        func;      /* work vector where F(t[i],u[i]) is stored */
28   Vec        rhs;       /* work vector for RHS; vec_sol/dt */
29   Vec        w1,w2;     /* work space vectors for function evaluation */
30   PetscBool  exact_final_time; /* force Sundials to interpolate solution to exactly final time
31                                    requested by user (default) */
32   /* PETSc peconditioner objects used by SUNDIALS */
33   Mat  pmat;                         /* preconditioner Jacobian */
34   int  cvode_type;                   /* the SUNDIALS method, BDF or ADAMS  */
35   TSSundialsGramSchmidtType gtype;
36   int                       restart;
37   double                    linear_tol;
38 
39   PetscReal mindt,maxdt;
40 
41   /* Variables used by Sundials */
42   MPI_Comm    comm_sundials;
43   double      reltol;
44   double      abstol;        /* only for using SS flag in SUNDIALS */
45   N_Vector    y;             /* current solution */
46   void        *mem;
47   PetscBool   monitorstep;   /* flag for monitor internal steps; itask=V_ONE_STEP or itask=CV_NORMAL*/
48 } TS_Sundials;
49 #endif
50 
51 #endif
52 
53 
54 
55 
56