1 /* $Id: petscts.h,v 1.47 2001/08/06 15:42:42 bsmith Exp $ */ 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 #define TS_SER_BEULER_BINARY "beuler_binary" 40 typedef char *TSSerializeType; 41 42 /*E 43 TSProblemType - Determines the type of problem this TS object is to be used to solve 44 45 Level: beginner 46 47 .seealso: TSCreate() 48 E*/ 49 typedef enum {TS_LINEAR,TS_NONLINEAR} TSProblemType; 50 51 /* Logging support */ 52 #if PETSC_USE_NEW_LOGGING 53 extern int TS_COOKIE; 54 enum {TS_Step, TS_PseudoComputeTimeStep, TS_MAX_EVENTS}; 55 #else 56 enum {Crap_TS_Step, Crap_TS_PseudoComputeTimeStep, TS_MAX_EVENTS}; 57 #endif 58 extern int TSEvents[TS_MAX_EVENTS]; 59 #define TSLogEventBegin(e,o1,o2,o3,o4) PetscLogEventBegin(TSEvents[e],o1,o2,o3,o4) 60 #define TSLogEventEnd(e,o1,o2,o3,o4) PetscLogEventEnd(TSEvents[e],o1,o2,o3,o4) 61 62 EXTERN int TSCreate(MPI_Comm,TSProblemType,TS*); 63 EXTERN int TSSetType(TS,TSType); 64 EXTERN int TSGetProblemType(TS,TSProblemType*); 65 EXTERN int TSDestroy(TS); 66 67 EXTERN int TSSetMonitor(TS,int(*)(TS,int,PetscReal,Vec,void*),void *,int (*)(void*)); 68 EXTERN int TSClearMonitor(TS); 69 EXTERN int TSGetType(TS,TSType*); 70 71 EXTERN int TSSetOptionsPrefix(TS,char *); 72 EXTERN int TSAppendOptionsPrefix(TS,char *); 73 EXTERN int TSGetOptionsPrefix(TS,char **); 74 EXTERN int TSSetFromOptions(TS); 75 EXTERN int TSSetUp(TS); 76 77 EXTERN int TSSetSolution(TS,Vec); 78 EXTERN int TSGetSolution(TS,Vec*); 79 80 EXTERN int TSSetDuration(TS,int,PetscReal); 81 82 EXTERN int TSDefaultMonitor(TS,int,PetscReal,Vec,void*); 83 EXTERN int TSVecViewMonitor(TS,int,PetscReal,Vec,void*); 84 EXTERN int TSStep(TS,int *,PetscReal*); 85 86 EXTERN int TSSetInitialTimeStep(TS,PetscReal,PetscReal); 87 EXTERN int TSGetTimeStep(TS,PetscReal*); 88 EXTERN int TSGetTime(TS,PetscReal*); 89 EXTERN int TSGetTimeStepNumber(TS,int*); 90 EXTERN int TSSetTimeStep(TS,PetscReal); 91 92 EXTERN int TSSetRHSFunction(TS,int (*)(TS,PetscReal,Vec,Vec,void*),void*); 93 EXTERN int TSSetRHSMatrix(TS,Mat,Mat,int (*)(TS,PetscReal,Mat*,Mat*,MatStructure*,void*),void*); 94 EXTERN int TSSetRHSJacobian(TS,Mat,Mat,int(*)(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*),void*); 95 EXTERN int TSSetRHSBoundaryConditions(TS,int (*)(TS,PetscReal,Vec,void*),void*); 96 97 EXTERN int TSDefaultComputeJacobianColor(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*); 98 EXTERN int TSDefaultComputeJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*); 99 100 EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**); 101 EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**); 102 103 extern int TSSetRhsBC(TS, int (*)(TS, Vec, void *)); 104 extern int TSSetSystemMatrixBC(TS, int (*)(TS, Mat, Mat, void *)); 105 extern int TSSetSolutionBC(TS, int (*)(TS, Vec, void *)); 106 extern int TSSetPreStep(TS, int (*)(TS)); 107 extern int TSSetUpdate(TS, int (*)(TS, double, double *)); 108 extern int TSSetPostStep(TS, int (*)(TS)); 109 extern int TSDefaultRhsBC(TS, Vec, void *); 110 extern int TSDefaultSystemMatrixBC(TS, Mat, Mat, void *); 111 extern int TSDefaultSolutionBC(TS, Vec, void *); 112 extern int TSDefaultPreStep(TS); 113 extern int TSDefaultUpdate(TS, double, double *); 114 extern int TSDefaultPostStep(TS); 115 extern int TSSetIdentity(TS, int (*)(TS, double, Mat *, void *)); 116 117 EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,PetscReal*,void*),void*); 118 EXTERN int TSPseudoDefaultTimeStep(TS,PetscReal*,void*); 119 EXTERN int TSPseudoComputeTimeStep(TS,PetscReal *); 120 121 EXTERN int TSPseudoSetVerifyTimeStep(TS,int(*)(TS,Vec,void*,PetscReal*,int*),void*); 122 EXTERN int TSPseudoDefaultVerifyTimeStep(TS,Vec,void*,PetscReal*,int*); 123 EXTERN int TSPseudoVerifyTimeStep(TS,Vec,PetscReal*,int*); 124 EXTERN int TSPseudoSetTimeStepIncrement(TS,PetscReal); 125 EXTERN int TSPseudoIncrementDtFromInitialDt(TS); 126 127 EXTERN int TSComputeRHSFunction(TS,PetscReal,Vec,Vec); 128 EXTERN int TSComputeRHSBoundaryConditions(TS,PetscReal,Vec); 129 EXTERN int TSComputeRHSJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*); 130 131 extern PetscFList TSList; 132 EXTERN int TSRegisterAll(char*); 133 EXTERN int TSRegisterDestroy(void); 134 extern PetscTruth TSRegisterAllCalled; 135 136 EXTERN int TSRegister(const char[], const char[], const char[], int (*)(TS)); 137 extern int TSSerializeRegister(const char [], const char [], const char [], int (*)(MPI_Comm, TS *, PetscViewer, PetscTruth)); 138 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 139 #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0) 140 #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,0) 141 #else 142 #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d) 143 #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,d) 144 #endif 145 146 extern PetscFList TSSerializeList; 147 extern int TSSerializeRegisterAll(const char []); 148 extern int TSSerializeRegisterDestroy(void); 149 extern int TSSerializeRegisterAllCalled; 150 extern int TSSerialize(MPI_Comm comm, TS *, PetscViewer, PetscTruth); 151 extern int TSSetSerializeType(TS, TSSerializeType); 152 153 EXTERN int TSGetSNES(TS,SNES*); 154 EXTERN int TSGetSLES(TS,SLES*); 155 156 EXTERN int TSView(TS,PetscViewer); 157 158 EXTERN int TSSetApplicationContext(TS,void *); 159 EXTERN int TSGetApplicationContext(TS,void **); 160 161 EXTERN int TSLGMonitorCreate(char *,char *,int,int,int,int,PetscDrawLG *); 162 EXTERN int TSLGMonitor(TS,int,PetscReal,Vec,void *); 163 EXTERN int TSLGMonitorDestroy(PetscDrawLG); 164 165 /* 166 PETSc interface to PVode 167 */ 168 #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS 169 typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType; 170 typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType; 171 EXTERN int TSPVodeSetType(TS,TSPVodeType); 172 EXTERN int TSPVodeGetPC(TS,PC*); 173 EXTERN int TSPVodeSetTolerance(TS,PetscReal,PetscReal); 174 EXTERN int TSPVodeGetIterations(TS,int *,int *); 175 EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType); 176 EXTERN int TSPVodeSetGMRESRestart(TS,int); 177 EXTERN int TSPVodeSetLinearTolerance(TS,PetscReal); 178 EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth); 179 180 #endif 181 182 183 184 185 186