xref: /petsc/include/petscts.h (revision 4db511f1d1b98f37717f3ecaf35cce8ecdb684f9)
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 #define TS_RUNGE_KUTTA     "runge-kutta"
36 typedef char *TSType;
37 
38 typedef char *TSSerializeType;
39 
40 EXTERN int TSRkqs(TS,PetscReal,PetscReal);
41 
42 
43 /*E
44     TSProblemType - Determines the type of problem this TS object is to be used to solve
45 
46    Level: beginner
47 
48 .seealso: TSCreate()
49 E*/
50 typedef enum {TS_LINEAR,TS_NONLINEAR} TSProblemType;
51 
52 /* Logging support */
53 extern int TS_COOKIE;
54 extern int TS_Step, TS_PseudoComputeTimeStep, TS_FunctionEval, TS_JacobianEval;
55 
56 EXTERN int TSInitializePackage(char *);
57 
58 EXTERN int TSCreate(MPI_Comm,TS*);
59 EXTERN int TSSerialize(MPI_Comm, TS *, PetscViewer, PetscTruth);
60 EXTERN int TSDestroy(TS);
61 
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);
66 
67 EXTERN int TSSetOptionsPrefix(TS,char *);
68 EXTERN int TSAppendOptionsPrefix(TS,char *);
69 EXTERN int TSGetOptionsPrefix(TS,char **);
70 EXTERN int TSSetFromOptions(TS);
71 EXTERN int TSSetUp(TS);
72 
73 EXTERN int TSSetSolution(TS,Vec);
74 EXTERN int TSGetSolution(TS,Vec*);
75 
76 EXTERN int TSSetDuration(TS,int,PetscReal);
77 EXTERN int TSGetDuration(TS,int*,PetscReal*);
78 
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*);
82 
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);
88 
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*);
93 
94 EXTERN int TSDefaultComputeJacobianColor(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*);
95 EXTERN int TSDefaultComputeJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*);
96 
97 EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**);
98 EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**);
99 
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 *));
113 
114 EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,PetscReal*,void*),void*);
115 EXTERN int TSPseudoDefaultTimeStep(TS,PetscReal*,void*);
116 EXTERN int TSPseudoComputeTimeStep(TS,PetscReal *);
117 
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);
123 
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*);
127 
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);
136 
137 /*MC
138   TSRegisterDynamic - Adds a creation method to the TS package.
139 
140   Synopsis:
141 
142   TSRegisterDynamic(char *name, char *path, char *func_name, int (*create_func)(TS))
143 
144   Not Collective
145 
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
151 
152   Notes:
153   TSRegisterDynamic() may be called multiple times to add several user-defined tses.
154 
155   If dynamic libraries are used, then the fourth input argument (create_func) is ignored.
156 
157   Sample usage:
158 .vb
159   TSRegisterDynamic("my_ts", "/home/username/my_lib/lib/libO/solaris/libmy.a", "MyTSCreate", MyTSCreate);
160 .ve
161 
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
171 
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
174 
175   Level: advanced
176 
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
185 
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
198 
199 EXTERN int TSGetSNES(TS,SNES*);
200 EXTERN int TSGetSLES(TS,SLES*);
201 
202 EXTERN int TSView(TS,PetscViewer);
203 EXTERN int TSViewFromOptions(TS,char *);
204 
205 EXTERN int TSSetApplicationContext(TS,void *);
206 EXTERN int TSGetApplicationContext(TS,void **);
207 
208 EXTERN int TSLGMonitorCreate(char *,char *,int,int,int,int,PetscDrawLG *);
209 EXTERN int TSLGMonitor(TS,int,PetscReal,Vec,void *);
210 EXTERN int TSLGMonitorDestroy(PetscDrawLG);
211 
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**);
227 
228 #endif
229 
230 
231 
232 
233 
234