xref: /petsc/include/petscts.h (revision bdad233f16b1da2fc2320f4673f853efec1db8b6)
173f4d377SMatthew Knepley /* $Id: petscts.h,v 1.47 2001/08/06 15:42:42 bsmith Exp $ */
2818ad0c1SBarry Smith /*
3f64a0f93SLois Curfman McInnes    User interface for the timestepping package. This is package
4f64a0f93SLois Curfman McInnes    is for use in solving time-dependent PDEs.
5818ad0c1SBarry Smith */
60a835dfdSSatish Balay #if !defined(__PETSCTS_H)
70a835dfdSSatish Balay #define __PETSCTS_H
80a835dfdSSatish Balay #include "petscsnes.h"
9818ad0c1SBarry Smith 
10435da068SBarry Smith /*S
11435da068SBarry Smith      TS - Abstract PETSc object that manages all time-steppers (ODE integrators)
12435da068SBarry Smith 
13435da068SBarry Smith    Level: beginner
14435da068SBarry Smith 
15435da068SBarry Smith   Concepts: ODE solvers
16435da068SBarry Smith 
17435da068SBarry Smith .seealso:  TSCreate(), TSSetType(), TSType, SNES, SLES, KSP, PC
18435da068SBarry Smith S*/
19f09e8eb9SSatish Balay typedef struct _p_TS* TS;
20435da068SBarry Smith 
21435da068SBarry Smith /*E
22435da068SBarry Smith     TSType - String with the name of a PETSc TS method or the creation function
23435da068SBarry Smith        with an optional dynamic library name, for example
24435da068SBarry Smith        http://www.mcs.anl.gov/petsc/lib.a:mytscreate()
25435da068SBarry Smith 
26435da068SBarry Smith    Level: beginner
27435da068SBarry Smith 
28435da068SBarry Smith .seealso: TSSetType(), TS
29435da068SBarry Smith E*/
3082bf6240SBarry Smith #define TS_EULER           "euler"
3182bf6240SBarry Smith #define TS_BEULER          "beuler"
3282bf6240SBarry Smith #define TS_PSEUDO          "pseudo"
3367d5d79cSLois Curfman McInnes #define TS_CRANK_NICHOLSON "crank-nicholson"
3482bf6240SBarry Smith #define TS_PVODE           "pvode"
3582bf6240SBarry Smith typedef char *TSType;
3682bf6240SBarry Smith 
37000e7ae3SMatthew Knepley typedef char *TSSerializeType;
38000e7ae3SMatthew Knepley 
39435da068SBarry Smith /*E
40435da068SBarry Smith     TSProblemType - Determines the type of problem this TS object is to be used to solve
41435da068SBarry Smith 
42435da068SBarry Smith    Level: beginner
43435da068SBarry Smith 
44435da068SBarry Smith .seealso: TSCreate()
45435da068SBarry Smith E*/
4619bcc07fSBarry Smith typedef enum {TS_LINEAR,TS_NONLINEAR} TSProblemType;
47818ad0c1SBarry Smith 
48000e7ae3SMatthew Knepley /* Logging support */
49000e7ae3SMatthew Knepley extern int TS_COOKIE;
50d5ba7fb7SMatthew Knepley extern int TS_Step, TS_PseudoComputeTimeStep, TS_FunctionEval, TS_JacobianEval;
51000e7ae3SMatthew Knepley 
528ba1e511SMatthew Knepley EXTERN int TSInitializePackage(char *);
538ba1e511SMatthew Knepley 
54ca44d042SBarry Smith EXTERN int TSCreate(MPI_Comm,TSProblemType,TS*);
55*bdad233fSMatthew Knepley EXTERN int TSSerialize(MPI_Comm, TS *, PetscViewer, PetscTruth);
56ca44d042SBarry Smith EXTERN int TSDestroy(TS);
57818ad0c1SBarry Smith 
58*bdad233fSMatthew Knepley EXTERN int TSSetProblemType(TS,TSProblemType);
59*bdad233fSMatthew Knepley EXTERN int TSGetProblemType(TS,TSProblemType*);
6019dc493eSBarry Smith EXTERN int TSSetMonitor(TS,int(*)(TS,int,PetscReal,Vec,void*),void *,int (*)(void*));
61ca44d042SBarry Smith EXTERN int TSClearMonitor(TS);
62818ad0c1SBarry Smith 
63ca44d042SBarry Smith EXTERN int TSSetOptionsPrefix(TS,char *);
64ca44d042SBarry Smith EXTERN int TSAppendOptionsPrefix(TS,char *);
65ca44d042SBarry Smith EXTERN int TSGetOptionsPrefix(TS,char **);
66ca44d042SBarry Smith EXTERN int TSSetFromOptions(TS);
67ca44d042SBarry Smith EXTERN int TSSetUp(TS);
68818ad0c1SBarry Smith 
69ca44d042SBarry Smith EXTERN int TSSetSolution(TS,Vec);
70ca44d042SBarry Smith EXTERN int TSGetSolution(TS,Vec*);
71818ad0c1SBarry Smith 
7219dc493eSBarry Smith EXTERN int TSSetDuration(TS,int,PetscReal);
73818ad0c1SBarry Smith 
7419dc493eSBarry Smith EXTERN int TSDefaultMonitor(TS,int,PetscReal,Vec,void*);
7519dc493eSBarry Smith EXTERN int TSVecViewMonitor(TS,int,PetscReal,Vec,void*);
7619dc493eSBarry Smith EXTERN int TSStep(TS,int *,PetscReal*);
77818ad0c1SBarry Smith 
7819dc493eSBarry Smith EXTERN int TSSetInitialTimeStep(TS,PetscReal,PetscReal);
7919dc493eSBarry Smith EXTERN int TSGetTimeStep(TS,PetscReal*);
8019dc493eSBarry Smith EXTERN int TSGetTime(TS,PetscReal*);
81ca44d042SBarry Smith EXTERN int TSGetTimeStepNumber(TS,int*);
8219dc493eSBarry Smith EXTERN int TSSetTimeStep(TS,PetscReal);
83818ad0c1SBarry Smith 
8419dc493eSBarry Smith EXTERN int TSSetRHSFunction(TS,int (*)(TS,PetscReal,Vec,Vec,void*),void*);
8519dc493eSBarry Smith EXTERN int TSSetRHSMatrix(TS,Mat,Mat,int (*)(TS,PetscReal,Mat*,Mat*,MatStructure*,void*),void*);
8619dc493eSBarry Smith EXTERN int TSSetRHSJacobian(TS,Mat,Mat,int(*)(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*),void*);
8719dc493eSBarry Smith EXTERN int TSSetRHSBoundaryConditions(TS,int (*)(TS,PetscReal,Vec,void*),void*);
88818ad0c1SBarry Smith 
8919dc493eSBarry Smith EXTERN int TSDefaultComputeJacobianColor(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*);
9019dc493eSBarry Smith EXTERN int TSDefaultComputeJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*);
91e34be4c2SBarry Smith 
92ca44d042SBarry Smith EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**);
93ca44d042SBarry Smith EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**);
94d4bb536fSBarry Smith 
95000e7ae3SMatthew Knepley extern int TSSetRhsBC(TS, int (*)(TS, Vec, void *));
96000e7ae3SMatthew Knepley extern int TSSetSystemMatrixBC(TS, int (*)(TS, Mat, Mat, void *));
97000e7ae3SMatthew Knepley extern int TSSetSolutionBC(TS, int (*)(TS, Vec, void *));
98000e7ae3SMatthew Knepley extern int TSSetPreStep(TS, int (*)(TS));
99000e7ae3SMatthew Knepley extern int TSSetUpdate(TS, int (*)(TS, double, double *));
100000e7ae3SMatthew Knepley extern int TSSetPostStep(TS, int (*)(TS));
101000e7ae3SMatthew Knepley extern int TSDefaultRhsBC(TS, Vec, void *);
102000e7ae3SMatthew Knepley extern int TSDefaultSystemMatrixBC(TS, Mat, Mat, void *);
103000e7ae3SMatthew Knepley extern int TSDefaultSolutionBC(TS, Vec, void *);
104000e7ae3SMatthew Knepley extern int TSDefaultPreStep(TS);
105000e7ae3SMatthew Knepley extern int TSDefaultUpdate(TS, double, double *);
106000e7ae3SMatthew Knepley extern int TSDefaultPostStep(TS);
107000e7ae3SMatthew Knepley extern int TSSetIdentity(TS, int (*)(TS, double, Mat *, void *));
108000e7ae3SMatthew Knepley 
10919dc493eSBarry Smith EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,PetscReal*,void*),void*);
11019dc493eSBarry Smith EXTERN int TSPseudoDefaultTimeStep(TS,PetscReal*,void*);
11119dc493eSBarry Smith EXTERN int TSPseudoComputeTimeStep(TS,PetscReal *);
112d8345c25SBarry Smith 
11319dc493eSBarry Smith EXTERN int TSPseudoSetVerifyTimeStep(TS,int(*)(TS,Vec,void*,PetscReal*,int*),void*);
11419dc493eSBarry Smith EXTERN int TSPseudoDefaultVerifyTimeStep(TS,Vec,void*,PetscReal*,int*);
11519dc493eSBarry Smith EXTERN int TSPseudoVerifyTimeStep(TS,Vec,PetscReal*,int*);
11619dc493eSBarry Smith EXTERN int TSPseudoSetTimeStepIncrement(TS,PetscReal);
117ca44d042SBarry Smith EXTERN int TSPseudoIncrementDtFromInitialDt(TS);
11821c89e3eSBarry Smith 
11919dc493eSBarry Smith EXTERN int TSComputeRHSFunction(TS,PetscReal,Vec,Vec);
12019dc493eSBarry Smith EXTERN int TSComputeRHSBoundaryConditions(TS,PetscReal,Vec);
12119dc493eSBarry Smith EXTERN int TSComputeRHSJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*);
122818ad0c1SBarry Smith 
123*bdad233fSMatthew Knepley /* Dynamic creation and loading functions */
124b0a32e0cSBarry Smith extern PetscFList TSList;
1252bad1931SBarry Smith extern PetscTruth TSRegisterAllCalled;
126*bdad233fSMatthew Knepley EXTERN int TSGetType(TS,TSType*);
127*bdad233fSMatthew Knepley EXTERN int TSSetType(TS,TSType);
128000e7ae3SMatthew Knepley EXTERN int TSRegister(const char[], const char[], const char[], int (*)(TS));
129*bdad233fSMatthew Knepley EXTERN int TSRegisterAll(const char[]);
130*bdad233fSMatthew Knepley EXTERN int TSRegisterDestroy(void);
131aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
132f1af5d2fSBarry Smith #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0)
1336df38c32SLois Curfman McInnes #else
134f1af5d2fSBarry Smith #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d)
1356df38c32SLois Curfman McInnes #endif
1366df38c32SLois Curfman McInnes 
137000e7ae3SMatthew Knepley extern PetscFList TSSerializeList;
138*bdad233fSMatthew Knepley extern PetscTruth TSSerializeRegisterAllCalled;
139*bdad233fSMatthew Knepley EXTERN int TSSetSerializeType(TS, TSSerializeType);
140*bdad233fSMatthew Knepley EXTERN int TSGetSerializeType(TS, TSSerializeType *);
141*bdad233fSMatthew Knepley EXTERN int TSSerializeRegister(const char [], const char [], const char [], int (*)(MPI_Comm, TS *, PetscViewer, PetscTruth));
142*bdad233fSMatthew Knepley EXTERN int TSSerializeRegisterAll(const char []);
143*bdad233fSMatthew Knepley EXTERN int TSSerializeRegisterDestroy(void);
144*bdad233fSMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
145*bdad233fSMatthew Knepley #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,0)
146*bdad233fSMatthew Knepley #else
147*bdad233fSMatthew Knepley #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,d)
148*bdad233fSMatthew Knepley #endif
149000e7ae3SMatthew Knepley 
150ca44d042SBarry Smith EXTERN int TSGetSNES(TS,SNES*);
151ca44d042SBarry Smith EXTERN int TSGetSLES(TS,SLES*);
152818ad0c1SBarry Smith 
153b0a32e0cSBarry Smith EXTERN int TSView(TS,PetscViewer);
154*bdad233fSMatthew Knepley EXTERN int TSViewFromOptions(TS,char *);
15521c89e3eSBarry Smith 
156ca44d042SBarry Smith EXTERN int TSSetApplicationContext(TS,void *);
157ca44d042SBarry Smith EXTERN int TSGetApplicationContext(TS,void **);
15821c89e3eSBarry Smith 
159b0a32e0cSBarry Smith EXTERN int TSLGMonitorCreate(char *,char *,int,int,int,int,PetscDrawLG *);
16019dc493eSBarry Smith EXTERN int TSLGMonitor(TS,int,PetscReal,Vec,void *);
161b0a32e0cSBarry Smith EXTERN int TSLGMonitorDestroy(PetscDrawLG);
1623914022bSBarry Smith 
16383e2fdc7SBarry Smith /*
16483e2fdc7SBarry Smith        PETSc interface to PVode
16583e2fdc7SBarry Smith */
166330e16abSSatish Balay #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS
167453b9e1bSBarry Smith typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType;
168330e16abSSatish Balay typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType;
169ca44d042SBarry Smith EXTERN int TSPVodeSetType(TS,TSPVodeType);
170ca44d042SBarry Smith EXTERN int TSPVodeGetPC(TS,PC*);
17119dc493eSBarry Smith EXTERN int TSPVodeSetTolerance(TS,PetscReal,PetscReal);
172ca44d042SBarry Smith EXTERN int TSPVodeGetIterations(TS,int *,int *);
173ca44d042SBarry Smith EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType);
174ca44d042SBarry Smith EXTERN int TSPVodeSetGMRESRestart(TS,int);
17519dc493eSBarry Smith EXTERN int TSPVodeSetLinearTolerance(TS,PetscReal);
176ca44d042SBarry Smith EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth);
17783e2fdc7SBarry Smith 
178818ad0c1SBarry Smith #endif
179818ad0c1SBarry Smith 
18021c89e3eSBarry Smith 
18121c89e3eSBarry Smith 
18221c89e3eSBarry Smith 
18321c89e3eSBarry Smith 
184