1*19dc493eSBarry Smith /* $Id: petscts.h,v 1.46 2001/04/10 19:37:08 bsmith Exp bsmith $ */ 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 216d84be18SBarry Smith #define TS_COOKIE PETSC_COOKIE+18 22818ad0c1SBarry Smith 23435da068SBarry Smith /*E 24435da068SBarry Smith TSType - String with the name of a PETSc TS method or the creation function 25435da068SBarry Smith with an optional dynamic library name, for example 26435da068SBarry Smith http://www.mcs.anl.gov/petsc/lib.a:mytscreate() 27435da068SBarry Smith 28435da068SBarry Smith Level: beginner 29435da068SBarry Smith 30435da068SBarry Smith .seealso: TSSetType(), TS 31435da068SBarry Smith E*/ 3282bf6240SBarry Smith #define TS_EULER "euler" 3382bf6240SBarry Smith #define TS_BEULER "beuler" 3482bf6240SBarry Smith #define TS_PSEUDO "pseudo" 3567d5d79cSLois Curfman McInnes #define TS_CRANK_NICHOLSON "crank-nicholson" 3682bf6240SBarry Smith #define TS_PVODE "pvode" 3782bf6240SBarry Smith typedef char *TSType; 3882bf6240SBarry Smith 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 48ca44d042SBarry Smith EXTERN int TSCreate(MPI_Comm,TSProblemType,TS*); 49ca44d042SBarry Smith EXTERN int TSSetType(TS,TSType); 50ca44d042SBarry Smith EXTERN int TSGetProblemType(TS,TSProblemType*); 51ca44d042SBarry Smith EXTERN int TSDestroy(TS); 52818ad0c1SBarry Smith 53*19dc493eSBarry Smith EXTERN int TSSetMonitor(TS,int(*)(TS,int,PetscReal,Vec,void*),void *,int (*)(void*)); 54ca44d042SBarry Smith EXTERN int TSClearMonitor(TS); 55ca44d042SBarry Smith EXTERN int TSGetType(TS,TSType*); 56818ad0c1SBarry Smith 57ca44d042SBarry Smith EXTERN int TSSetOptionsPrefix(TS,char *); 58ca44d042SBarry Smith EXTERN int TSAppendOptionsPrefix(TS,char *); 59ca44d042SBarry Smith EXTERN int TSGetOptionsPrefix(TS,char **); 60ca44d042SBarry Smith EXTERN int TSSetFromOptions(TS); 61ca44d042SBarry Smith EXTERN int TSSetUp(TS); 62818ad0c1SBarry Smith 63ca44d042SBarry Smith EXTERN int TSSetSolution(TS,Vec); 64ca44d042SBarry Smith EXTERN int TSGetSolution(TS,Vec*); 65818ad0c1SBarry Smith 66*19dc493eSBarry Smith EXTERN int TSSetDuration(TS,int,PetscReal); 67818ad0c1SBarry Smith 68*19dc493eSBarry Smith EXTERN int TSDefaultMonitor(TS,int,PetscReal,Vec,void*); 69*19dc493eSBarry Smith EXTERN int TSVecViewMonitor(TS,int,PetscReal,Vec,void*); 70*19dc493eSBarry Smith EXTERN int TSStep(TS,int *,PetscReal*); 71818ad0c1SBarry Smith 72*19dc493eSBarry Smith EXTERN int TSSetInitialTimeStep(TS,PetscReal,PetscReal); 73*19dc493eSBarry Smith EXTERN int TSGetTimeStep(TS,PetscReal*); 74*19dc493eSBarry Smith EXTERN int TSGetTime(TS,PetscReal*); 75ca44d042SBarry Smith EXTERN int TSGetTimeStepNumber(TS,int*); 76*19dc493eSBarry Smith EXTERN int TSSetTimeStep(TS,PetscReal); 77818ad0c1SBarry Smith 78*19dc493eSBarry Smith EXTERN int TSSetRHSFunction(TS,int (*)(TS,PetscReal,Vec,Vec,void*),void*); 79*19dc493eSBarry Smith EXTERN int TSSetRHSMatrix(TS,Mat,Mat,int (*)(TS,PetscReal,Mat*,Mat*,MatStructure*,void*),void*); 80*19dc493eSBarry Smith EXTERN int TSSetRHSJacobian(TS,Mat,Mat,int(*)(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*),void*); 81*19dc493eSBarry Smith EXTERN int TSSetRHSBoundaryConditions(TS,int (*)(TS,PetscReal,Vec,void*),void*); 82818ad0c1SBarry Smith 83*19dc493eSBarry Smith EXTERN int TSDefaultComputeJacobianColor(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*); 84*19dc493eSBarry Smith EXTERN int TSDefaultComputeJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*); 85e34be4c2SBarry Smith 86ca44d042SBarry Smith EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**); 87ca44d042SBarry Smith EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**); 88d4bb536fSBarry Smith 89*19dc493eSBarry Smith EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,PetscReal*,void*),void*); 90*19dc493eSBarry Smith EXTERN int TSPseudoDefaultTimeStep(TS,PetscReal*,void*); 91*19dc493eSBarry Smith EXTERN int TSPseudoComputeTimeStep(TS,PetscReal *); 92d8345c25SBarry Smith 93*19dc493eSBarry Smith EXTERN int TSPseudoSetVerifyTimeStep(TS,int(*)(TS,Vec,void*,PetscReal*,int*),void*); 94*19dc493eSBarry Smith EXTERN int TSPseudoDefaultVerifyTimeStep(TS,Vec,void*,PetscReal*,int*); 95*19dc493eSBarry Smith EXTERN int TSPseudoVerifyTimeStep(TS,Vec,PetscReal*,int*); 96*19dc493eSBarry Smith EXTERN int TSPseudoSetTimeStepIncrement(TS,PetscReal); 97ca44d042SBarry Smith EXTERN int TSPseudoIncrementDtFromInitialDt(TS); 9821c89e3eSBarry Smith 99*19dc493eSBarry Smith EXTERN int TSComputeRHSFunction(TS,PetscReal,Vec,Vec); 100*19dc493eSBarry Smith EXTERN int TSComputeRHSBoundaryConditions(TS,PetscReal,Vec); 101*19dc493eSBarry Smith EXTERN int TSComputeRHSJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*); 102818ad0c1SBarry Smith 103b0a32e0cSBarry Smith extern PetscFList TSList; 104ca44d042SBarry Smith EXTERN int TSRegisterAll(char*); 105ca44d042SBarry Smith EXTERN int TSRegisterDestroy(void); 1062bad1931SBarry Smith extern PetscTruth TSRegisterAllCalled; 107818ad0c1SBarry Smith 108ca44d042SBarry Smith EXTERN int TSRegister(char*,char*,char*,int(*)(TS)); 109aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 110f1af5d2fSBarry Smith #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0) 1116df38c32SLois Curfman McInnes #else 112f1af5d2fSBarry Smith #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d) 1136df38c32SLois Curfman McInnes #endif 1146df38c32SLois Curfman McInnes 115ca44d042SBarry Smith EXTERN int TSGetSNES(TS,SNES*); 116ca44d042SBarry Smith EXTERN int TSGetSLES(TS,SLES*); 117818ad0c1SBarry Smith 118b0a32e0cSBarry Smith EXTERN int TSView(TS,PetscViewer); 11921c89e3eSBarry Smith 120ca44d042SBarry Smith EXTERN int TSSetApplicationContext(TS,void *); 121ca44d042SBarry Smith EXTERN int TSGetApplicationContext(TS,void **); 12221c89e3eSBarry Smith 123b0a32e0cSBarry Smith EXTERN int TSLGMonitorCreate(char *,char *,int,int,int,int,PetscDrawLG *); 124*19dc493eSBarry Smith EXTERN int TSLGMonitor(TS,int,PetscReal,Vec,void *); 125b0a32e0cSBarry Smith EXTERN int TSLGMonitorDestroy(PetscDrawLG); 1263914022bSBarry Smith 12783e2fdc7SBarry Smith /* 12883e2fdc7SBarry Smith PETSc interface to PVode 12983e2fdc7SBarry Smith */ 130330e16abSSatish Balay #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS 131453b9e1bSBarry Smith typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType; 132330e16abSSatish Balay typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType; 133ca44d042SBarry Smith EXTERN int TSPVodeSetType(TS,TSPVodeType); 134ca44d042SBarry Smith EXTERN int TSPVodeGetPC(TS,PC*); 135*19dc493eSBarry Smith EXTERN int TSPVodeSetTolerance(TS,PetscReal,PetscReal); 136ca44d042SBarry Smith EXTERN int TSPVodeGetIterations(TS,int *,int *); 137ca44d042SBarry Smith EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType); 138ca44d042SBarry Smith EXTERN int TSPVodeSetGMRESRestart(TS,int); 139*19dc493eSBarry Smith EXTERN int TSPVodeSetLinearTolerance(TS,PetscReal); 140ca44d042SBarry Smith EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth); 14183e2fdc7SBarry Smith 142818ad0c1SBarry Smith #endif 143818ad0c1SBarry Smith 14421c89e3eSBarry Smith 14521c89e3eSBarry Smith 14621c89e3eSBarry Smith 14721c89e3eSBarry Smith 148