xref: /petsc/src/ts/impls/implicit/sundials/sundials.h (revision 98d129c30f3ee9fdddc40fdbc5a989b7be64f888)
1 /*
2     Provides a PETSc interface to SUNDIALS. Alan Hindmarsh's parallel ODE
3    solver developed at LLNL.
4 */
5 
6 #pragma once
7 
8 #include <petsc/private/tsimpl.h> /*I   "petscts.h"   I*/
9 #include <petsc/private/pcimpl.h>
10 #include <petsc/private/matimpl.h>
11 
12 /*
13    Include files specific for SUNDIALS
14 */
15 #if defined(PETSC_HAVE_SUNDIALS2)
16 
17 EXTERN_C_BEGIN
18   #include <cvode/cvode.h>              /* prototypes for CVODE fcts. */
19   #include <cvode/cvode_spgmr.h>        /* prototypes and constants for CVSPGMR solver */
20   #include <cvode/cvode_dense.h>        /* prototypes and constants for CVDense solver */
21   #include <nvector/nvector_parallel.h> /* definition N_Vector and macro NV_DATA_P  */
22   #include <nvector/nvector_serial.h>
23 EXTERN_C_END
24 
25 typedef struct {
26   Vec update; /* work vector where new solution is formed */
27   Vec ydot;   /* work vector the time derivative is stored */
28   Vec w1, w2; /* work space vectors for function evaluation */
29 
30   /* PETSc preconditioner objects used by SUNDIALS */
31   PetscInt                  cvode_type; /* the SUNDIALS method, BDF or ADAMS  */
32   TSSundialsGramSchmidtType gtype;
33   PetscReal                 linear_tol;
34   PetscReal                 mindt, maxdt;
35 
36   /* Variables used by Sundials */
37   MPI_Comm  comm_sundials;
38   PetscReal reltol;
39   PetscReal abstol; /* only for using SS flag in SUNDIALS */
40   N_Vector  y;      /* current solution */
41   void     *mem;
42   PetscBool monitorstep; /* flag for monitor internal steps; itask=V_ONE_STEP or itask=CV_NORMAL*/
43   PetscInt  maxl;        /* max dimension of the Krylov subspace to be used */
44   PetscInt  maxord;      /* max order of BDF / Adams method */
45   PetscBool use_dense;   /* Use a dense instead of iterative solve within SUNDIALS (serial only) */
46 } TS_Sundials;
47 #endif
48