xref: /petsc/include/petscts.h (revision e9fa29b77eaf32efadba30e98aa12b45e655e5d0)
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"
9*e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN
10818ad0c1SBarry Smith 
11435da068SBarry Smith /*S
12435da068SBarry Smith      TS - Abstract PETSc object that manages all time-steppers (ODE integrators)
13435da068SBarry Smith 
14435da068SBarry Smith    Level: beginner
15435da068SBarry Smith 
16435da068SBarry Smith   Concepts: ODE solvers
17435da068SBarry Smith 
18435da068SBarry Smith .seealso:  TSCreate(), TSSetType(), TSType, SNES, SLES, KSP, PC
19435da068SBarry Smith S*/
20f09e8eb9SSatish Balay typedef struct _p_TS* TS;
21435da068SBarry Smith 
22435da068SBarry Smith /*E
23435da068SBarry Smith     TSType - String with the name of a PETSc TS method or the creation function
24435da068SBarry Smith        with an optional dynamic library name, for example
25435da068SBarry Smith        http://www.mcs.anl.gov/petsc/lib.a:mytscreate()
26435da068SBarry Smith 
27435da068SBarry Smith    Level: beginner
28435da068SBarry Smith 
29435da068SBarry Smith .seealso: TSSetType(), TS
30435da068SBarry Smith E*/
3182bf6240SBarry Smith #define TS_EULER           "euler"
3282bf6240SBarry Smith #define TS_BEULER          "beuler"
3382bf6240SBarry Smith #define TS_PSEUDO          "pseudo"
3467d5d79cSLois Curfman McInnes #define TS_CRANK_NICHOLSON "crank-nicholson"
3582bf6240SBarry Smith #define TS_PVODE           "pvode"
36e4dd521cSBarry Smith #define TS_RUNGE_KUTTA     "runge-kutta"
3782bf6240SBarry Smith typedef char *TSType;
3882bf6240SBarry Smith 
39000e7ae3SMatthew Knepley typedef char *TSSerializeType;
40000e7ae3SMatthew Knepley 
41435da068SBarry Smith /*E
42435da068SBarry Smith     TSProblemType - Determines the type of problem this TS object is to be used to solve
43435da068SBarry Smith 
44435da068SBarry Smith    Level: beginner
45435da068SBarry Smith 
46435da068SBarry Smith .seealso: TSCreate()
47435da068SBarry Smith E*/
4819bcc07fSBarry Smith typedef enum {TS_LINEAR,TS_NONLINEAR} TSProblemType;
49818ad0c1SBarry Smith 
50000e7ae3SMatthew Knepley /* Logging support */
51000e7ae3SMatthew Knepley extern int TS_COOKIE;
52d5ba7fb7SMatthew Knepley extern int TS_Step, TS_PseudoComputeTimeStep, TS_FunctionEval, TS_JacobianEval;
53000e7ae3SMatthew Knepley 
541836bdbcSSatish Balay EXTERN int TSInitializePackage(const char[]);
558ba1e511SMatthew Knepley 
56c98f2c1aSMatthew Knepley EXTERN int TSCreate(MPI_Comm,TS*);
57bdad233fSMatthew Knepley EXTERN int TSSerialize(MPI_Comm, TS *, PetscViewer, PetscTruth);
58ca44d042SBarry Smith EXTERN int TSDestroy(TS);
59818ad0c1SBarry Smith 
60bdad233fSMatthew Knepley EXTERN int TSSetProblemType(TS,TSProblemType);
61bdad233fSMatthew Knepley EXTERN int TSGetProblemType(TS,TSProblemType*);
6219dc493eSBarry Smith EXTERN int TSSetMonitor(TS,int(*)(TS,int,PetscReal,Vec,void*),void *,int (*)(void*));
63ca44d042SBarry Smith EXTERN int TSClearMonitor(TS);
64818ad0c1SBarry Smith 
651836bdbcSSatish Balay EXTERN int TSSetOptionsPrefix(TS,const char[]);
661836bdbcSSatish Balay EXTERN int TSAppendOptionsPrefix(TS,const char[]);
671836bdbcSSatish Balay EXTERN int TSGetOptionsPrefix(TS,char *[]);
68ca44d042SBarry Smith EXTERN int TSSetFromOptions(TS);
69ca44d042SBarry Smith EXTERN int TSSetUp(TS);
70818ad0c1SBarry Smith 
71ca44d042SBarry Smith EXTERN int TSSetSolution(TS,Vec);
72ca44d042SBarry Smith EXTERN int TSGetSolution(TS,Vec*);
73818ad0c1SBarry Smith 
7419dc493eSBarry Smith EXTERN int TSSetDuration(TS,int,PetscReal);
759bb98634SSatish Balay EXTERN int TSGetDuration(TS,int*,PetscReal*);
76818ad0c1SBarry Smith 
7719dc493eSBarry Smith EXTERN int TSDefaultMonitor(TS,int,PetscReal,Vec,void*);
7819dc493eSBarry Smith EXTERN int TSVecViewMonitor(TS,int,PetscReal,Vec,void*);
7919dc493eSBarry Smith EXTERN int TSStep(TS,int *,PetscReal*);
80818ad0c1SBarry Smith 
8119dc493eSBarry Smith EXTERN int TSSetInitialTimeStep(TS,PetscReal,PetscReal);
8219dc493eSBarry Smith EXTERN int TSGetTimeStep(TS,PetscReal*);
8319dc493eSBarry Smith EXTERN int TSGetTime(TS,PetscReal*);
84ca44d042SBarry Smith EXTERN int TSGetTimeStepNumber(TS,int*);
8519dc493eSBarry Smith EXTERN int TSSetTimeStep(TS,PetscReal);
86818ad0c1SBarry Smith 
8719dc493eSBarry Smith EXTERN int TSSetRHSFunction(TS,int (*)(TS,PetscReal,Vec,Vec,void*),void*);
8819dc493eSBarry Smith EXTERN int TSSetRHSMatrix(TS,Mat,Mat,int (*)(TS,PetscReal,Mat*,Mat*,MatStructure*,void*),void*);
8919dc493eSBarry Smith EXTERN int TSSetRHSJacobian(TS,Mat,Mat,int(*)(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*),void*);
9019dc493eSBarry Smith EXTERN int TSSetRHSBoundaryConditions(TS,int (*)(TS,PetscReal,Vec,void*),void*);
91818ad0c1SBarry Smith 
9219dc493eSBarry Smith EXTERN int TSDefaultComputeJacobianColor(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*);
9319dc493eSBarry Smith EXTERN int TSDefaultComputeJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*);
94e34be4c2SBarry Smith 
95ca44d042SBarry Smith EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**);
96ca44d042SBarry Smith EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**);
97d4bb536fSBarry Smith 
98000e7ae3SMatthew Knepley extern int TSSetRhsBC(TS, int (*)(TS, Vec, void *));
99000e7ae3SMatthew Knepley extern int TSSetSystemMatrixBC(TS, int (*)(TS, Mat, Mat, void *));
100000e7ae3SMatthew Knepley extern int TSSetSolutionBC(TS, int (*)(TS, Vec, void *));
101000e7ae3SMatthew Knepley extern int TSSetPreStep(TS, int (*)(TS));
10250151309SSatish Balay extern int TSSetUpdate(TS, int (*)(TS, PetscReal, PetscReal *));
103000e7ae3SMatthew Knepley extern int TSSetPostStep(TS, int (*)(TS));
104000e7ae3SMatthew Knepley extern int TSDefaultRhsBC(TS, Vec, void *);
105000e7ae3SMatthew Knepley extern int TSDefaultSystemMatrixBC(TS, Mat, Mat, void *);
106000e7ae3SMatthew Knepley extern int TSDefaultSolutionBC(TS, Vec, void *);
107000e7ae3SMatthew Knepley extern int TSDefaultPreStep(TS);
10850151309SSatish Balay extern int TSDefaultUpdate(TS, PetscReal, PetscReal *);
109000e7ae3SMatthew Knepley extern int TSDefaultPostStep(TS);
110000e7ae3SMatthew Knepley extern int TSSetIdentity(TS, int (*)(TS, double, Mat *, void *));
111000e7ae3SMatthew Knepley 
11219dc493eSBarry Smith EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,PetscReal*,void*),void*);
11319dc493eSBarry Smith EXTERN int TSPseudoDefaultTimeStep(TS,PetscReal*,void*);
11419dc493eSBarry Smith EXTERN int TSPseudoComputeTimeStep(TS,PetscReal *);
115d8345c25SBarry Smith 
11619dc493eSBarry Smith EXTERN int TSPseudoSetVerifyTimeStep(TS,int(*)(TS,Vec,void*,PetscReal*,int*),void*);
11719dc493eSBarry Smith EXTERN int TSPseudoDefaultVerifyTimeStep(TS,Vec,void*,PetscReal*,int*);
11819dc493eSBarry Smith EXTERN int TSPseudoVerifyTimeStep(TS,Vec,PetscReal*,int*);
11919dc493eSBarry Smith EXTERN int TSPseudoSetTimeStepIncrement(TS,PetscReal);
120ca44d042SBarry Smith EXTERN int TSPseudoIncrementDtFromInitialDt(TS);
12121c89e3eSBarry Smith 
12219dc493eSBarry Smith EXTERN int TSComputeRHSFunction(TS,PetscReal,Vec,Vec);
12319dc493eSBarry Smith EXTERN int TSComputeRHSBoundaryConditions(TS,PetscReal,Vec);
12419dc493eSBarry Smith EXTERN int TSComputeRHSJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*);
125818ad0c1SBarry Smith 
126bdad233fSMatthew Knepley /* Dynamic creation and loading functions */
127b0a32e0cSBarry Smith extern PetscFList TSList;
1282bad1931SBarry Smith extern PetscTruth TSRegisterAllCalled;
129bdad233fSMatthew Knepley EXTERN int TSGetType(TS,TSType*);
130bdad233fSMatthew Knepley EXTERN int TSSetType(TS,TSType);
131000e7ae3SMatthew Knepley EXTERN int TSRegister(const char[], const char[], const char[], int (*)(TS));
132bdad233fSMatthew Knepley EXTERN int TSRegisterAll(const char[]);
133bdad233fSMatthew Knepley EXTERN int TSRegisterDestroy(void);
13430de9b25SBarry Smith 
13530de9b25SBarry Smith /*MC
13630de9b25SBarry Smith   TSRegisterDynamic - Adds a creation method to the TS package.
13730de9b25SBarry Smith 
13830de9b25SBarry Smith   Synopsis:
13930de9b25SBarry Smith 
14030de9b25SBarry Smith   TSRegisterDynamic(char *name, char *path, char *func_name, int (*create_func)(TS))
14130de9b25SBarry Smith 
14230de9b25SBarry Smith   Not Collective
14330de9b25SBarry Smith 
14430de9b25SBarry Smith   Input Parameters:
14530de9b25SBarry Smith + name        - The name of a new user-defined creation routine
14630de9b25SBarry Smith . path        - The path (either absolute or relative) of the library containing this routine
14730de9b25SBarry Smith . func_name   - The name of the creation routine
14830de9b25SBarry Smith - create_func - The creation routine itself
14930de9b25SBarry Smith 
15030de9b25SBarry Smith   Notes:
15130de9b25SBarry Smith   TSRegisterDynamic() may be called multiple times to add several user-defined tses.
15230de9b25SBarry Smith 
15330de9b25SBarry Smith   If dynamic libraries are used, then the fourth input argument (create_func) is ignored.
15430de9b25SBarry Smith 
15530de9b25SBarry Smith   Sample usage:
15630de9b25SBarry Smith .vb
15730de9b25SBarry Smith   TSRegisterDynamic("my_ts", "/home/username/my_lib/lib/libO/solaris/libmy.a", "MyTSCreate", MyTSCreate);
15830de9b25SBarry Smith .ve
15930de9b25SBarry Smith 
16030de9b25SBarry Smith   Then, your ts type can be chosen with the procedural interface via
16130de9b25SBarry Smith .vb
16230de9b25SBarry Smith     TSCreate(MPI_Comm, TS *);
16330de9b25SBarry Smith     TSSetType(vec, "my_ts")
16430de9b25SBarry Smith .ve
16530de9b25SBarry Smith   or at runtime via the option
16630de9b25SBarry Smith .vb
16730de9b25SBarry Smith     -ts_type my_ts
16830de9b25SBarry Smith .ve
16930de9b25SBarry Smith 
17030de9b25SBarry Smith   Notes: $PETSC_ARCH and $BOPT occuring in pathname will be replaced with appropriate values.
17130de9b25SBarry Smith         If your function is not being put into a shared library then use TSRegister() instead
17230de9b25SBarry Smith 
17330de9b25SBarry Smith   Level: advanced
17430de9b25SBarry Smith 
17530de9b25SBarry Smith .keywords: TS, register
17630de9b25SBarry Smith .seealso: TSRegisterAll(), TSRegisterDestroy()
17730de9b25SBarry Smith M*/
178aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
179f1af5d2fSBarry Smith #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0)
1806df38c32SLois Curfman McInnes #else
181f1af5d2fSBarry Smith #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d)
1826df38c32SLois Curfman McInnes #endif
1836df38c32SLois Curfman McInnes 
184000e7ae3SMatthew Knepley extern PetscFList TSSerializeList;
185bdad233fSMatthew Knepley extern PetscTruth TSSerializeRegisterAllCalled;
186bdad233fSMatthew Knepley EXTERN int TSSetSerializeType(TS, TSSerializeType);
187bdad233fSMatthew Knepley EXTERN int TSGetSerializeType(TS, TSSerializeType *);
188bdad233fSMatthew Knepley EXTERN int TSSerializeRegister(const char [], const char [], const char [], int (*)(MPI_Comm, TS *, PetscViewer, PetscTruth));
189bdad233fSMatthew Knepley EXTERN int TSSerializeRegisterAll(const char []);
190bdad233fSMatthew Knepley EXTERN int TSSerializeRegisterDestroy(void);
191bdad233fSMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
192bdad233fSMatthew Knepley #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,0)
193bdad233fSMatthew Knepley #else
194bdad233fSMatthew Knepley #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,d)
195bdad233fSMatthew Knepley #endif
196000e7ae3SMatthew Knepley 
197ca44d042SBarry Smith EXTERN int TSGetSNES(TS,SNES*);
198ca44d042SBarry Smith EXTERN int TSGetSLES(TS,SLES*);
199818ad0c1SBarry Smith 
200b0a32e0cSBarry Smith EXTERN int TSView(TS,PetscViewer);
2011836bdbcSSatish Balay EXTERN int TSViewFromOptions(TS,const char[]);
20221c89e3eSBarry Smith 
203ca44d042SBarry Smith EXTERN int TSSetApplicationContext(TS,void *);
204ca44d042SBarry Smith EXTERN int TSGetApplicationContext(TS,void **);
20521c89e3eSBarry Smith 
2061836bdbcSSatish Balay EXTERN int TSLGMonitorCreate(const char[],const char[],int,int,int,int,PetscDrawLG *);
20719dc493eSBarry Smith EXTERN int TSLGMonitor(TS,int,PetscReal,Vec,void *);
208b0a32e0cSBarry Smith EXTERN int TSLGMonitorDestroy(PetscDrawLG);
2093914022bSBarry Smith 
21083e2fdc7SBarry Smith /*
21183e2fdc7SBarry Smith        PETSc interface to PVode
21283e2fdc7SBarry Smith */
213330e16abSSatish Balay #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS
214453b9e1bSBarry Smith typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType;
215330e16abSSatish Balay typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType;
216ca44d042SBarry Smith EXTERN int TSPVodeSetType(TS,TSPVodeType);
217ca44d042SBarry Smith EXTERN int TSPVodeGetPC(TS,PC*);
21819dc493eSBarry Smith EXTERN int TSPVodeSetTolerance(TS,PetscReal,PetscReal);
219ca44d042SBarry Smith EXTERN int TSPVodeGetIterations(TS,int *,int *);
220ca44d042SBarry Smith EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType);
221ca44d042SBarry Smith EXTERN int TSPVodeSetGMRESRestart(TS,int);
22219dc493eSBarry Smith EXTERN int TSPVodeSetLinearTolerance(TS,PetscReal);
223ca44d042SBarry Smith EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth);
2241836bdbcSSatish Balay EXTERN int TSPVodeGetParameters(TS,int *,long int*[],double*[]);
22583e2fdc7SBarry Smith 
226*e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END
227818ad0c1SBarry Smith #endif
228