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