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 PETSC_EXTERN_CXX_BEGIN 10 11 /*S 12 TS - Abstract PETSc object that manages all time-steppers (ODE integrators) 13 14 Level: beginner 15 16 Concepts: ODE solvers 17 18 .seealso: TSCreate(), TSSetType(), TSType, SNES, KSP, PC 19 S*/ 20 typedef struct _p_TS* TS; 21 22 /*E 23 TSType - String with the name of a PETSc TS method or the creation function 24 with an optional dynamic library name, for example 25 http://www.mcs.anl.gov/petsc/lib.a:mytscreate() 26 27 Level: beginner 28 29 .seealso: TSSetType(), TS 30 E*/ 31 #define TS_EULER "euler" 32 #define TS_BEULER "beuler" 33 #define TS_PSEUDO "pseudo" 34 #define TS_CRANK_NICHOLSON "crank-nicholson" 35 #define TS_PVODE "pvode" 36 #define TS_RUNGE_KUTTA "runge-kutta" 37 typedef char *TSType; 38 39 typedef char *TSSerializeType; 40 41 /*E 42 TSProblemType - Determines the type of problem this TS object is to be used to solve 43 44 Level: beginner 45 46 .seealso: TSCreate() 47 E*/ 48 typedef enum {TS_LINEAR,TS_NONLINEAR} TSProblemType; 49 50 /* Logging support */ 51 extern int TS_COOKIE; 52 extern int TS_Step, TS_PseudoComputeTimeStep, TS_FunctionEval, TS_JacobianEval; 53 54 EXTERN int TSInitializePackage(const char[]); 55 56 EXTERN int TSCreate(MPI_Comm,TS*); 57 EXTERN int TSSerialize(MPI_Comm, TS *, PetscViewer, PetscTruth); 58 EXTERN int TSDestroy(TS); 59 60 EXTERN int TSSetProblemType(TS,TSProblemType); 61 EXTERN int TSGetProblemType(TS,TSProblemType*); 62 EXTERN int TSSetMonitor(TS,int(*)(TS,int,PetscReal,Vec,void*),void *,int (*)(void*)); 63 EXTERN int TSClearMonitor(TS); 64 65 EXTERN int TSSetOptionsPrefix(TS,const char[]); 66 EXTERN int TSAppendOptionsPrefix(TS,const char[]); 67 EXTERN int TSGetOptionsPrefix(TS,char *[]); 68 EXTERN int TSSetFromOptions(TS); 69 EXTERN int TSSetUp(TS); 70 71 EXTERN int TSSetSolution(TS,Vec); 72 EXTERN int TSGetSolution(TS,Vec*); 73 74 EXTERN int TSSetDuration(TS,int,PetscReal); 75 EXTERN int TSGetDuration(TS,int*,PetscReal*); 76 77 EXTERN int TSDefaultMonitor(TS,int,PetscReal,Vec,void*); 78 EXTERN int TSVecViewMonitor(TS,int,PetscReal,Vec,void*); 79 EXTERN int TSStep(TS,int *,PetscReal*); 80 81 EXTERN int TSSetInitialTimeStep(TS,PetscReal,PetscReal); 82 EXTERN int TSGetTimeStep(TS,PetscReal*); 83 EXTERN int TSGetTime(TS,PetscReal*); 84 EXTERN int TSGetTimeStepNumber(TS,int*); 85 EXTERN int TSSetTimeStep(TS,PetscReal); 86 87 EXTERN int TSSetRHSFunction(TS,int (*)(TS,PetscReal,Vec,Vec,void*),void*); 88 EXTERN int TSSetRHSMatrix(TS,Mat,Mat,int (*)(TS,PetscReal,Mat*,Mat*,MatStructure*,void*),void*); 89 EXTERN int TSSetRHSJacobian(TS,Mat,Mat,int(*)(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*),void*); 90 EXTERN int TSSetRHSBoundaryConditions(TS,int (*)(TS,PetscReal,Vec,void*),void*); 91 92 EXTERN int TSDefaultComputeJacobianColor(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*); 93 EXTERN int TSDefaultComputeJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*); 94 95 EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**); 96 EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**); 97 98 extern int TSSetRhsBC(TS, int (*)(TS, Vec, void *)); 99 extern int TSSetSystemMatrixBC(TS, int (*)(TS, Mat, Mat, void *)); 100 extern int TSSetSolutionBC(TS, int (*)(TS, Vec, void *)); 101 extern int TSSetPreStep(TS, int (*)(TS)); 102 extern int TSSetUpdate(TS, int (*)(TS, PetscReal, PetscReal *)); 103 extern int TSSetPostStep(TS, int (*)(TS)); 104 extern int TSDefaultRhsBC(TS, Vec, void *); 105 extern int TSDefaultSystemMatrixBC(TS, Mat, Mat, void *); 106 extern int TSDefaultSolutionBC(TS, Vec, void *); 107 extern int TSDefaultPreStep(TS); 108 extern int TSDefaultUpdate(TS, PetscReal, PetscReal *); 109 extern int TSDefaultPostStep(TS); 110 extern int TSSetIdentity(TS, int (*)(TS, double, Mat *, void *)); 111 112 EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,PetscReal*,void*),void*); 113 EXTERN int TSPseudoDefaultTimeStep(TS,PetscReal*,void*); 114 EXTERN int TSPseudoComputeTimeStep(TS,PetscReal *); 115 116 EXTERN int TSPseudoSetVerifyTimeStep(TS,int(*)(TS,Vec,void*,PetscReal*,int*),void*); 117 EXTERN int TSPseudoDefaultVerifyTimeStep(TS,Vec,void*,PetscReal*,int*); 118 EXTERN int TSPseudoVerifyTimeStep(TS,Vec,PetscReal*,int*); 119 EXTERN int TSPseudoSetTimeStepIncrement(TS,PetscReal); 120 EXTERN int TSPseudoIncrementDtFromInitialDt(TS); 121 122 EXTERN int TSComputeRHSFunction(TS,PetscReal,Vec,Vec); 123 EXTERN int TSComputeRHSBoundaryConditions(TS,PetscReal,Vec); 124 EXTERN int TSComputeRHSJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*); 125 126 /* Dynamic creation and loading functions */ 127 extern PetscFList TSList; 128 extern PetscTruth TSRegisterAllCalled; 129 EXTERN int TSGetType(TS,TSType*); 130 EXTERN int TSSetType(TS,TSType); 131 EXTERN int TSRegister(const char[], const char[], const char[], int (*)(TS)); 132 EXTERN int TSRegisterAll(const char[]); 133 EXTERN int TSRegisterDestroy(void); 134 135 /*MC 136 TSRegisterDynamic - Adds a creation method to the TS package. 137 138 Synopsis: 139 140 TSRegisterDynamic(char *name, char *path, char *func_name, int (*create_func)(TS)) 141 142 Not Collective 143 144 Input Parameters: 145 + name - The name of a new user-defined creation routine 146 . path - The path (either absolute or relative) of the library containing this routine 147 . func_name - The name of the creation routine 148 - create_func - The creation routine itself 149 150 Notes: 151 TSRegisterDynamic() may be called multiple times to add several user-defined tses. 152 153 If dynamic libraries are used, then the fourth input argument (create_func) is ignored. 154 155 Sample usage: 156 .vb 157 TSRegisterDynamic("my_ts", "/home/username/my_lib/lib/libO/solaris/libmy.a", "MyTSCreate", MyTSCreate); 158 .ve 159 160 Then, your ts type can be chosen with the procedural interface via 161 .vb 162 TSCreate(MPI_Comm, TS *); 163 TSSetType(vec, "my_ts") 164 .ve 165 or at runtime via the option 166 .vb 167 -ts_type my_ts 168 .ve 169 170 Notes: $PETSC_ARCH and $BOPT occuring in pathname will be replaced with appropriate values. 171 If your function is not being put into a shared library then use TSRegister() instead 172 173 Level: advanced 174 175 .keywords: TS, register 176 .seealso: TSRegisterAll(), TSRegisterDestroy() 177 M*/ 178 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 179 #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0) 180 #else 181 #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d) 182 #endif 183 184 extern PetscFList TSSerializeList; 185 extern PetscTruth TSSerializeRegisterAllCalled; 186 EXTERN int TSSetSerializeType(TS, TSSerializeType); 187 EXTERN int TSGetSerializeType(TS, TSSerializeType *); 188 EXTERN int TSSerializeRegister(const char [], const char [], const char [], int (*)(MPI_Comm, TS *, PetscViewer, PetscTruth)); 189 EXTERN int TSSerializeRegisterAll(const char []); 190 EXTERN int TSSerializeRegisterDestroy(void); 191 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 192 #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,0) 193 #else 194 #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,d) 195 #endif 196 197 EXTERN int TSGetSNES(TS,SNES*); 198 EXTERN int TSGetKSP(TS,KSP*); 199 200 EXTERN int TSView(TS,PetscViewer); 201 EXTERN int TSViewFromOptions(TS,const char[]); 202 203 EXTERN int TSSetApplicationContext(TS,void *); 204 EXTERN int TSGetApplicationContext(TS,void **); 205 206 EXTERN int TSLGMonitorCreate(const char[],const char[],int,int,int,int,PetscDrawLG *); 207 EXTERN int TSLGMonitor(TS,int,PetscReal,Vec,void *); 208 EXTERN int TSLGMonitorDestroy(PetscDrawLG); 209 210 /* 211 PETSc interface to PVode 212 */ 213 #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS 214 typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType; 215 typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType; 216 EXTERN int TSPVodeSetType(TS,TSPVodeType); 217 EXTERN int TSPVodeGetPC(TS,PC*); 218 EXTERN int TSPVodeSetTolerance(TS,PetscReal,PetscReal); 219 EXTERN int TSPVodeGetIterations(TS,int *,int *); 220 EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType); 221 EXTERN int TSPVodeSetGMRESRestart(TS,int); 222 EXTERN int TSPVodeSetLinearTolerance(TS,PetscReal); 223 EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth); 224 EXTERN int TSPVodeGetParameters(TS,int *,long int*[],double*[]); 225 226 EXTERN int TSRKSetTolerance(TS,PetscReal); 227 228 PETSC_EXTERN_CXX_END 229 #endif 230