Actual source code: petscts.h

  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: */
 8:  #include petscsnes.h
  9: PETSC_EXTERN_CXX_BEGIN

 11: /*S
 12:      TS - Abstract PETSc object that manages all time-steppers (ODE integrators)

 14:    Level: beginner

 16:   Concepts: ODE solvers

 18: .seealso:  TSCreate(), TSSetType(), TSType, SNES, KSP, PC
 19: S*/
 20: typedef struct _p_TS* TS;

 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()

 27:    Level: beginner

 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: #define TSType char*

 39: /*E
 40:     TSProblemType - Determines the type of problem this TS object is to be used to solve

 42:    Level: beginner

 44: .seealso: TSCreate()
 45: E*/
 46: typedef enum {TS_LINEAR,TS_NONLINEAR} TSProblemType;

 48: /* Logging support */
 49: extern int TS_COOKIE;
 50: extern int TS_Step, TS_PseudoComputeTimeStep, TS_FunctionEval, TS_JacobianEval;

 52: EXTERN int TSInitializePackage(const char[]);

 54: EXTERN int TSCreate(MPI_Comm,TS*);
 55: EXTERN int TSDestroy(TS);

 57: EXTERN int TSSetProblemType(TS,TSProblemType);
 58: EXTERN int TSGetProblemType(TS,TSProblemType*);
 59: EXTERN int TSSetMonitor(TS,int(*)(TS,int,PetscReal,Vec,void*),void *,int (*)(void*));
 60: EXTERN int TSClearMonitor(TS);

 62: EXTERN int TSSetOptionsPrefix(TS,const char[]);
 63: EXTERN int TSAppendOptionsPrefix(TS,const char[]);
 64: EXTERN int TSGetOptionsPrefix(TS,char *[]);
 65: EXTERN int TSSetFromOptions(TS);
 66: EXTERN int TSSetUp(TS);

 68: EXTERN int TSSetSolution(TS,Vec);
 69: EXTERN int TSGetSolution(TS,Vec*);

 71: EXTERN int TSSetDuration(TS,int,PetscReal);
 72: EXTERN int TSGetDuration(TS,int*,PetscReal*);

 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*);

 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);

 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*);

 89: EXTERN int TSDefaultComputeJacobianColor(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*);
 90: EXTERN int TSDefaultComputeJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*);

 92: EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**);
 93: EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**);

 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 *));

109: EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,PetscReal*,void*),void*);
110: EXTERN int TSPseudoDefaultTimeStep(TS,PetscReal*,void*);
111: EXTERN int TSPseudoComputeTimeStep(TS,PetscReal *);

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);

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*);

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,const TSType);
128: EXTERN int TSRegister(const char[], const char[], const char[], int (*)(TS));
129: EXTERN int TSRegisterAll(const char[]);
130: EXTERN int TSRegisterDestroy(void);

132: /*MC
133:   TSRegisterDynamic - Adds a creation method to the TS package.

135:   Synopsis:

137:   TSRegisterDynamic(char *name, char *path, char *func_name, int (*create_func)(TS))

139:   Not Collective

141:   Input Parameters:
142: + name        - The name of a new user-defined creation routine
143: . path        - The path (either absolute or relative) of the library containing this routine
144: . func_name   - The name of the creation routine
145: - create_func - The creation routine itself

147:   Notes:
148:   TSRegisterDynamic() may be called multiple times to add several user-defined tses.

150:   If dynamic libraries are used, then the fourth input argument (create_func) is ignored.

152:   Sample usage:
153: .vb
154:   TSRegisterDynamic("my_ts", "/home/username/my_lib/lib/libO/solaris/libmy.a", "MyTSCreate", MyTSCreate);
155: .ve

157:   Then, your ts type can be chosen with the procedural interface via
158: .vb
159:     TSCreate(MPI_Comm, TS *);
160:     TSSetType(vec, "my_ts")
161: .ve
162:   or at runtime via the option
163: .vb
164:     -ts_type my_ts
165: .ve

167:   Notes: $PETSC_ARCH and $BOPT occuring in pathname will be replaced with appropriate values.
168:         If your function is not being put into a shared library then use TSRegister() instead

170:   Level: advanced

172: .keywords: TS, register
173: .seealso: TSRegisterAll(), TSRegisterDestroy()
174: M*/
175: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
176: #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0)
177: #else
178: #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d)
179: #endif

181: EXTERN int TSGetSNES(TS,SNES*);
182: EXTERN int TSGetKSP(TS,KSP*);

184: EXTERN int TSView(TS,PetscViewer);
185: EXTERN int TSViewFromOptions(TS,const char[]);

187: EXTERN int TSSetApplicationContext(TS,void *);
188: EXTERN int TSGetApplicationContext(TS,void **);

190: EXTERN int TSLGMonitorCreate(const char[],const char[],int,int,int,int,PetscDrawLG *);
191: EXTERN int TSLGMonitor(TS,int,PetscReal,Vec,void *);
192: EXTERN int TSLGMonitorDestroy(PetscDrawLG);

194: /*
195:        PETSc interface to PVode
196: */
197: #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS
198: typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType;
199: typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType;
200: EXTERN int TSPVodeSetType(TS,TSPVodeType);
201: EXTERN int TSPVodeGetPC(TS,PC*);
202: EXTERN int TSPVodeSetTolerance(TS,PetscReal,PetscReal);
203: EXTERN int TSPVodeGetIterations(TS,int *,int *);
204: EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType);
205: EXTERN int TSPVodeSetGMRESRestart(TS,int);
206: EXTERN int TSPVodeSetLinearTolerance(TS,PetscReal);
207: EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth);
208: EXTERN int TSPVodeGetParameters(TS,int *,long int*[],double*[]);

210: EXTERN int TSRKSetTolerance(TS,PetscReal);

212: PETSC_EXTERN_CXX_END
213: #endif