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