xref: /petsc/include/petscts.h (revision 2fc52814d27bf1f4e71021c1c3ebb532b583ed60)
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 #define TSType char*
38 
39 #define TSSerializeType char*
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,const 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