1*435da068SBarry Smith /* $Id: petscts.h,v 1.44 2001/01/15 21:48:24 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 10*435da068SBarry Smith /*S 11*435da068SBarry Smith TS - Abstract PETSc object that manages all time-steppers (ODE integrators) 12*435da068SBarry Smith 13*435da068SBarry Smith Level: beginner 14*435da068SBarry Smith 15*435da068SBarry Smith Concepts: ODE solvers 16*435da068SBarry Smith 17*435da068SBarry Smith .seealso: TSCreate(), TSSetType(), TSType, SNES, SLES, KSP, PC 18*435da068SBarry Smith S*/ 19f09e8eb9SSatish Balay typedef struct _p_TS* TS; 20*435da068SBarry Smith 216d84be18SBarry Smith #define TS_COOKIE PETSC_COOKIE+18 22818ad0c1SBarry Smith 23*435da068SBarry Smith /*E 24*435da068SBarry Smith TSType - String with the name of a PETSc TS method or the creation function 25*435da068SBarry Smith with an optional dynamic library name, for example 26*435da068SBarry Smith http://www.mcs.anl.gov/petsc/lib.a:mytscreate() 27*435da068SBarry Smith 28*435da068SBarry Smith Level: beginner 29*435da068SBarry Smith 30*435da068SBarry Smith .seealso: TSSetType(), TS 31*435da068SBarry 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 39*435da068SBarry Smith /*E 40*435da068SBarry Smith TSProblemType - Determines the type of problem this TS object is to be used to solve 41*435da068SBarry Smith 42*435da068SBarry Smith Level: beginner 43*435da068SBarry Smith 44*435da068SBarry Smith .seealso: TSCreate() 45*435da068SBarry 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 53ca44d042SBarry Smith EXTERN int TSSetMonitor(TS,int(*)(TS,int,double,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 66ca44d042SBarry Smith EXTERN int TSSetDuration(TS,int,double); 67818ad0c1SBarry Smith 68ca44d042SBarry Smith EXTERN int TSDefaultMonitor(TS,int,double,Vec,void*); 69ca44d042SBarry Smith EXTERN int TSStep(TS,int *,double*); 70818ad0c1SBarry Smith 71ca44d042SBarry Smith EXTERN int TSSetInitialTimeStep(TS,double,double); 72ca44d042SBarry Smith EXTERN int TSGetTimeStep(TS,double*); 73ca44d042SBarry Smith EXTERN int TSGetTime(TS,double*); 74ca44d042SBarry Smith EXTERN int TSGetTimeStepNumber(TS,int*); 75ca44d042SBarry Smith EXTERN int TSSetTimeStep(TS,double); 76818ad0c1SBarry Smith 77ca44d042SBarry Smith EXTERN int TSSetRHSFunction(TS,int (*)(TS,double,Vec,Vec,void*),void*); 78ca44d042SBarry Smith EXTERN int TSSetRHSMatrix(TS,Mat,Mat,int (*)(TS,double,Mat*,Mat*,MatStructure*,void*),void*); 79ca44d042SBarry Smith EXTERN int TSSetRHSJacobian(TS,Mat,Mat,int(*)(TS,double,Vec,Mat*,Mat*,MatStructure*,void*),void*); 80ca44d042SBarry Smith EXTERN int TSSetRHSBoundaryConditions(TS,int (*)(TS,double,Vec,void*),void*); 81818ad0c1SBarry Smith 82ca44d042SBarry Smith EXTERN int TSDefaultComputeJacobianColor(TS,double,Vec,Mat*,Mat*,MatStructure*,void*); 83ca44d042SBarry Smith EXTERN int TSDefaultComputeJacobian(TS,double,Vec,Mat*,Mat*,MatStructure*,void*); 84e34be4c2SBarry Smith 85ca44d042SBarry Smith EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**); 86ca44d042SBarry Smith EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**); 87d4bb536fSBarry Smith 88ca44d042SBarry Smith EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,double*,void*),void*); 89ca44d042SBarry Smith EXTERN int TSPseudoDefaultTimeStep(TS,double*,void*); 90ca44d042SBarry Smith EXTERN int TSPseudoComputeTimeStep(TS,double *); 91d8345c25SBarry Smith 92ca44d042SBarry Smith EXTERN int TSPseudoSetVerifyTimeStep(TS,int(*)(TS,Vec,void*,double*,int*),void*); 93ca44d042SBarry Smith EXTERN int TSPseudoDefaultVerifyTimeStep(TS,Vec,void*,double*,int*); 94ca44d042SBarry Smith EXTERN int TSPseudoVerifyTimeStep(TS,Vec,double*,int*); 95ca44d042SBarry Smith EXTERN int TSPseudoSetTimeStepIncrement(TS,double); 96ca44d042SBarry Smith EXTERN int TSPseudoIncrementDtFromInitialDt(TS); 9721c89e3eSBarry Smith 98ca44d042SBarry Smith EXTERN int TSComputeRHSFunction(TS,double,Vec,Vec); 99ca44d042SBarry Smith EXTERN int TSComputeRHSBoundaryConditions(TS,double,Vec); 100ca44d042SBarry Smith EXTERN int TSComputeRHSJacobian(TS,double,Vec,Mat*,Mat*,MatStructure*); 101818ad0c1SBarry Smith 102b0a32e0cSBarry Smith extern PetscFList TSList; 103ca44d042SBarry Smith EXTERN int TSRegisterAll(char*); 104ca44d042SBarry Smith EXTERN int TSRegisterDestroy(void); 1052bad1931SBarry Smith extern PetscTruth TSRegisterAllCalled; 106818ad0c1SBarry Smith 107ca44d042SBarry Smith EXTERN int TSRegister(char*,char*,char*,int(*)(TS)); 108aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 109f1af5d2fSBarry Smith #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0) 1106df38c32SLois Curfman McInnes #else 111f1af5d2fSBarry Smith #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d) 1126df38c32SLois Curfman McInnes #endif 1136df38c32SLois Curfman McInnes 114ca44d042SBarry Smith EXTERN int TSGetSNES(TS,SNES*); 115ca44d042SBarry Smith EXTERN int TSGetSLES(TS,SLES*); 116818ad0c1SBarry Smith 117b0a32e0cSBarry Smith EXTERN int TSView(TS,PetscViewer); 11821c89e3eSBarry Smith 119ca44d042SBarry Smith EXTERN int TSSetApplicationContext(TS,void *); 120ca44d042SBarry Smith EXTERN int TSGetApplicationContext(TS,void **); 12121c89e3eSBarry Smith 122b0a32e0cSBarry Smith EXTERN int TSLGMonitorCreate(char *,char *,int,int,int,int,PetscDrawLG *); 123ca44d042SBarry Smith EXTERN int TSLGMonitor(TS,int,double,Vec,void *); 124b0a32e0cSBarry Smith EXTERN int TSLGMonitorDestroy(PetscDrawLG); 1253914022bSBarry Smith 12683e2fdc7SBarry Smith /* 12783e2fdc7SBarry Smith PETSc interface to PVode 12883e2fdc7SBarry Smith */ 129330e16abSSatish Balay #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS 130453b9e1bSBarry Smith typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType; 131330e16abSSatish Balay typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType; 132ca44d042SBarry Smith EXTERN int TSPVodeSetType(TS,TSPVodeType); 133ca44d042SBarry Smith EXTERN int TSPVodeGetPC(TS,PC*); 134ca44d042SBarry Smith EXTERN int TSPVodeSetTolerance(TS,double,double); 135ca44d042SBarry Smith EXTERN int TSPVodeGetIterations(TS,int *,int *); 136ca44d042SBarry Smith EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType); 137ca44d042SBarry Smith EXTERN int TSPVodeSetGMRESRestart(TS,int); 138ca44d042SBarry Smith EXTERN int TSPVodeSetLinearTolerance(TS,double); 139ca44d042SBarry Smith EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth); 14083e2fdc7SBarry Smith 141818ad0c1SBarry Smith #endif 142818ad0c1SBarry Smith 14321c89e3eSBarry Smith 14421c89e3eSBarry Smith 14521c89e3eSBarry Smith 14621c89e3eSBarry Smith 147