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 /*E 22 TSType - String with the name of a PETSc TS method or the creation function 23 with an optional dynamic library name, for example 24 http://www.mcs.anl.gov/petsc/lib.a:mytscreate() 25 26 Level: beginner 27 28 .seealso: TSSetType(), TS 29 E*/ 30 #define TS_EULER "euler" 31 #define TS_BEULER "beuler" 32 #define TS_PSEUDO "pseudo" 33 #define TS_CRANK_NICHOLSON "crank-nicholson" 34 #define TS_PVODE "pvode" 35 typedef char *TSType; 36 37 typedef char *TSSerializeType; 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 /* Logging support */ 49 extern int TS_COOKIE; 50 extern int TS_Step, TS_PseudoComputeTimeStep, TS_FunctionEval, TS_JacobianEval; 51 52 EXTERN int TSInitializePackage(char *); 53 54 EXTERN int TSCreate(MPI_Comm,TS*); 55 EXTERN int TSSerialize(MPI_Comm, TS *, PetscViewer, PetscTruth); 56 EXTERN int TSDestroy(TS); 57 58 EXTERN int TSSetProblemType(TS,TSProblemType); 59 EXTERN int TSGetProblemType(TS,TSProblemType*); 60 EXTERN int TSSetMonitor(TS,int(*)(TS,int,PetscReal,Vec,void*),void *,int (*)(void*)); 61 EXTERN int TSClearMonitor(TS); 62 63 EXTERN int TSSetOptionsPrefix(TS,char *); 64 EXTERN int TSAppendOptionsPrefix(TS,char *); 65 EXTERN int TSGetOptionsPrefix(TS,char **); 66 EXTERN int TSSetFromOptions(TS); 67 EXTERN int TSSetUp(TS); 68 69 EXTERN int TSSetSolution(TS,Vec); 70 EXTERN int TSGetSolution(TS,Vec*); 71 72 EXTERN int TSSetDuration(TS,int,PetscReal); 73 74 EXTERN int TSDefaultMonitor(TS,int,PetscReal,Vec,void*); 75 EXTERN int TSVecViewMonitor(TS,int,PetscReal,Vec,void*); 76 EXTERN int TSStep(TS,int *,PetscReal*); 77 78 EXTERN int TSSetInitialTimeStep(TS,PetscReal,PetscReal); 79 EXTERN int TSGetTimeStep(TS,PetscReal*); 80 EXTERN int TSGetTime(TS,PetscReal*); 81 EXTERN int TSGetTimeStepNumber(TS,int*); 82 EXTERN int TSSetTimeStep(TS,PetscReal); 83 84 EXTERN int TSSetRHSFunction(TS,int (*)(TS,PetscReal,Vec,Vec,void*),void*); 85 EXTERN int TSSetRHSMatrix(TS,Mat,Mat,int (*)(TS,PetscReal,Mat*,Mat*,MatStructure*,void*),void*); 86 EXTERN int TSSetRHSJacobian(TS,Mat,Mat,int(*)(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*),void*); 87 EXTERN int TSSetRHSBoundaryConditions(TS,int (*)(TS,PetscReal,Vec,void*),void*); 88 89 EXTERN int TSDefaultComputeJacobianColor(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*); 90 EXTERN int TSDefaultComputeJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*); 91 92 EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**); 93 EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**); 94 95 extern int TSSetRhsBC(TS, int (*)(TS, Vec, void *)); 96 extern int TSSetSystemMatrixBC(TS, int (*)(TS, Mat, Mat, void *)); 97 extern int TSSetSolutionBC(TS, int (*)(TS, Vec, void *)); 98 extern int TSSetPreStep(TS, int (*)(TS)); 99 extern int TSSetUpdate(TS, int (*)(TS, PetscReal, PetscReal *)); 100 extern int TSSetPostStep(TS, int (*)(TS)); 101 extern int TSDefaultRhsBC(TS, Vec, void *); 102 extern int TSDefaultSystemMatrixBC(TS, Mat, Mat, void *); 103 extern int TSDefaultSolutionBC(TS, Vec, void *); 104 extern int TSDefaultPreStep(TS); 105 extern int TSDefaultUpdate(TS, PetscReal, PetscReal *); 106 extern int TSDefaultPostStep(TS); 107 extern int TSSetIdentity(TS, int (*)(TS, double, Mat *, void *)); 108 109 EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,PetscReal*,void*),void*); 110 EXTERN int TSPseudoDefaultTimeStep(TS,PetscReal*,void*); 111 EXTERN int TSPseudoComputeTimeStep(TS,PetscReal *); 112 113 EXTERN int TSPseudoSetVerifyTimeStep(TS,int(*)(TS,Vec,void*,PetscReal*,int*),void*); 114 EXTERN int TSPseudoDefaultVerifyTimeStep(TS,Vec,void*,PetscReal*,int*); 115 EXTERN int TSPseudoVerifyTimeStep(TS,Vec,PetscReal*,int*); 116 EXTERN int TSPseudoSetTimeStepIncrement(TS,PetscReal); 117 EXTERN int TSPseudoIncrementDtFromInitialDt(TS); 118 119 EXTERN int TSComputeRHSFunction(TS,PetscReal,Vec,Vec); 120 EXTERN int TSComputeRHSBoundaryConditions(TS,PetscReal,Vec); 121 EXTERN int TSComputeRHSJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*); 122 123 /* Dynamic creation and loading functions */ 124 extern PetscFList TSList; 125 extern PetscTruth TSRegisterAllCalled; 126 EXTERN int TSGetType(TS,TSType*); 127 EXTERN int TSSetType(TS,TSType); 128 EXTERN int TSRegister(const char[], const char[], const char[], int (*)(TS)); 129 EXTERN int TSRegisterAll(const char[]); 130 EXTERN int TSRegisterDestroy(void); 131 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 132 #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0) 133 #else 134 #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d) 135 #endif 136 137 extern PetscFList TSSerializeList; 138 extern PetscTruth TSSerializeRegisterAllCalled; 139 EXTERN int TSSetSerializeType(TS, TSSerializeType); 140 EXTERN int TSGetSerializeType(TS, TSSerializeType *); 141 EXTERN int TSSerializeRegister(const char [], const char [], const char [], int (*)(MPI_Comm, TS *, PetscViewer, PetscTruth)); 142 EXTERN int TSSerializeRegisterAll(const char []); 143 EXTERN int TSSerializeRegisterDestroy(void); 144 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 145 #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,0) 146 #else 147 #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,d) 148 #endif 149 150 EXTERN int TSGetSNES(TS,SNES*); 151 EXTERN int TSGetSLES(TS,SLES*); 152 153 EXTERN int TSView(TS,PetscViewer); 154 EXTERN int TSViewFromOptions(TS,char *); 155 156 EXTERN int TSSetApplicationContext(TS,void *); 157 EXTERN int TSGetApplicationContext(TS,void **); 158 159 EXTERN int TSLGMonitorCreate(char *,char *,int,int,int,int,PetscDrawLG *); 160 EXTERN int TSLGMonitor(TS,int,PetscReal,Vec,void *); 161 EXTERN int TSLGMonitorDestroy(PetscDrawLG); 162 163 /* 164 PETSc interface to PVode 165 */ 166 #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS 167 typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType; 168 typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType; 169 EXTERN int TSPVodeSetType(TS,TSPVodeType); 170 EXTERN int TSPVodeGetPC(TS,PC*); 171 EXTERN int TSPVodeSetTolerance(TS,PetscReal,PetscReal); 172 EXTERN int TSPVodeGetIterations(TS,int *,int *); 173 EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType); 174 EXTERN int TSPVodeSetGMRESRestart(TS,int); 175 EXTERN int TSPVodeSetLinearTolerance(TS,PetscReal); 176 EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth); 177 178 #endif 179 180 181 182 183 184