1 /* $Id: petscts.h,v 1.44 2001/01/15 21:48:24 bsmith Exp bsmith $ */ 2 /* 3 User interface for the timestepping package. This is package 4 is for use in solving time-dependent PDEs. 5 */ 6 #if !defined(__PETSCTS_H) 7 #define __PETSCTS_H 8 #include "petscsnes.h" 9 10 /*S 11 TS - Abstract PETSc object that manages all time-steppers (ODE integrators) 12 13 Level: beginner 14 15 Concepts: ODE solvers 16 17 .seealso: TSCreate(), TSSetType(), TSType, SNES, SLES, KSP, PC 18 S*/ 19 typedef struct _p_TS* TS; 20 21 #define TS_COOKIE PETSC_COOKIE+18 22 23 /*E 24 TSType - String with the name of a PETSc TS method or the creation function 25 with an optional dynamic library name, for example 26 http://www.mcs.anl.gov/petsc/lib.a:mytscreate() 27 28 Level: beginner 29 30 .seealso: TSSetType(), TS 31 E*/ 32 #define TS_EULER "euler" 33 #define TS_BEULER "beuler" 34 #define TS_PSEUDO "pseudo" 35 #define TS_CRANK_NICHOLSON "crank-nicholson" 36 #define TS_PVODE "pvode" 37 typedef char *TSType; 38 39 /*E 40 TSProblemType - Determines the type of problem this TS object is to be used to solve 41 42 Level: beginner 43 44 .seealso: TSCreate() 45 E*/ 46 typedef enum {TS_LINEAR,TS_NONLINEAR} TSProblemType; 47 48 EXTERN int TSCreate(MPI_Comm,TSProblemType,TS*); 49 EXTERN int TSSetType(TS,TSType); 50 EXTERN int TSGetProblemType(TS,TSProblemType*); 51 EXTERN int TSDestroy(TS); 52 53 EXTERN int TSSetMonitor(TS,int(*)(TS,int,double,Vec,void*),void *,int (*)(void*)); 54 EXTERN int TSClearMonitor(TS); 55 EXTERN int TSGetType(TS,TSType*); 56 57 EXTERN int TSSetOptionsPrefix(TS,char *); 58 EXTERN int TSAppendOptionsPrefix(TS,char *); 59 EXTERN int TSGetOptionsPrefix(TS,char **); 60 EXTERN int TSSetFromOptions(TS); 61 EXTERN int TSSetUp(TS); 62 63 EXTERN int TSSetSolution(TS,Vec); 64 EXTERN int TSGetSolution(TS,Vec*); 65 66 EXTERN int TSSetDuration(TS,int,double); 67 68 EXTERN int TSDefaultMonitor(TS,int,double,Vec,void*); 69 EXTERN int TSStep(TS,int *,double*); 70 71 EXTERN int TSSetInitialTimeStep(TS,double,double); 72 EXTERN int TSGetTimeStep(TS,double*); 73 EXTERN int TSGetTime(TS,double*); 74 EXTERN int TSGetTimeStepNumber(TS,int*); 75 EXTERN int TSSetTimeStep(TS,double); 76 77 EXTERN int TSSetRHSFunction(TS,int (*)(TS,double,Vec,Vec,void*),void*); 78 EXTERN int TSSetRHSMatrix(TS,Mat,Mat,int (*)(TS,double,Mat*,Mat*,MatStructure*,void*),void*); 79 EXTERN int TSSetRHSJacobian(TS,Mat,Mat,int(*)(TS,double,Vec,Mat*,Mat*,MatStructure*,void*),void*); 80 EXTERN int TSSetRHSBoundaryConditions(TS,int (*)(TS,double,Vec,void*),void*); 81 82 EXTERN int TSDefaultComputeJacobianColor(TS,double,Vec,Mat*,Mat*,MatStructure*,void*); 83 EXTERN int TSDefaultComputeJacobian(TS,double,Vec,Mat*,Mat*,MatStructure*,void*); 84 85 EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**); 86 EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**); 87 88 EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,double*,void*),void*); 89 EXTERN int TSPseudoDefaultTimeStep(TS,double*,void*); 90 EXTERN int TSPseudoComputeTimeStep(TS,double *); 91 92 EXTERN int TSPseudoSetVerifyTimeStep(TS,int(*)(TS,Vec,void*,double*,int*),void*); 93 EXTERN int TSPseudoDefaultVerifyTimeStep(TS,Vec,void*,double*,int*); 94 EXTERN int TSPseudoVerifyTimeStep(TS,Vec,double*,int*); 95 EXTERN int TSPseudoSetTimeStepIncrement(TS,double); 96 EXTERN int TSPseudoIncrementDtFromInitialDt(TS); 97 98 EXTERN int TSComputeRHSFunction(TS,double,Vec,Vec); 99 EXTERN int TSComputeRHSBoundaryConditions(TS,double,Vec); 100 EXTERN int TSComputeRHSJacobian(TS,double,Vec,Mat*,Mat*,MatStructure*); 101 102 extern PetscFList TSList; 103 EXTERN int TSRegisterAll(char*); 104 EXTERN int TSRegisterDestroy(void); 105 extern PetscTruth TSRegisterAllCalled; 106 107 EXTERN int TSRegister(char*,char*,char*,int(*)(TS)); 108 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 109 #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0) 110 #else 111 #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d) 112 #endif 113 114 EXTERN int TSGetSNES(TS,SNES*); 115 EXTERN int TSGetSLES(TS,SLES*); 116 117 EXTERN int TSView(TS,PetscViewer); 118 119 EXTERN int TSSetApplicationContext(TS,void *); 120 EXTERN int TSGetApplicationContext(TS,void **); 121 122 EXTERN int TSLGMonitorCreate(char *,char *,int,int,int,int,PetscDrawLG *); 123 EXTERN int TSLGMonitor(TS,int,double,Vec,void *); 124 EXTERN int TSLGMonitorDestroy(PetscDrawLG); 125 126 /* 127 PETSc interface to PVode 128 */ 129 #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS 130 typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType; 131 typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType; 132 EXTERN int TSPVodeSetType(TS,TSPVodeType); 133 EXTERN int TSPVodeGetPC(TS,PC*); 134 EXTERN int TSPVodeSetTolerance(TS,double,double); 135 EXTERN int TSPVodeGetIterations(TS,int *,int *); 136 EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType); 137 EXTERN int TSPVodeSetGMRESRestart(TS,int); 138 EXTERN int TSPVodeSetLinearTolerance(TS,double); 139 EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth); 140 141 #endif 142 143 144 145 146 147