Actual source code: petscts.h

  1: /* $Id: petscts.h,v 1.46 2001/04/10 19:37:08 bsmith Exp $ */
  2: /*
  3:    User interface for the timestepping package. This is package
  4:    is for use in solving time-dependent PDEs.
  5: */
  8: #include "petscsnes.h"

 10: /*S
 11:      TS - Abstract PETSc object that manages all time-steppers (ODE integrators)

 13:    Level: beginner

 15:   Concepts: ODE solvers

 17: .seealso:  TSCreate(), TSSetType(), TSType, SNES, SLES, KSP, PC
 18: S*/
 19: typedef struct _p_TS* TS;

 21: #define TS_COOKIE PETSC_COOKIE+18

 23: /*E
 24:     TSType - String with the name of a PETSc TS method or the creation function
 25:        with an optional dynamic library name, for example
 26:        http://www.mcs.anl.gov/petsc/lib.a:mytscreate()

 28:    Level: beginner

 30: .seealso: TSSetType(), TS
 31: E*/
 32: #define TS_EULER           "euler"
 33: #define TS_BEULER          "beuler"
 34: #define TS_PSEUDO          "pseudo"
 35: #define TS_CRANK_NICHOLSON "crank-nicholson"
 36: #define TS_PVODE           "pvode"
 37: typedef char *TSType;

 39: /*E
 40:     TSProblemType - Determines the type of problem this TS object is to be used to solve

 42:    Level: beginner

 44: .seealso: TSCreate()
 45: E*/
 46: typedef enum {TS_LINEAR,TS_NONLINEAR} TSProblemType;

 48: EXTERN int TSCreate(MPI_Comm,TSProblemType,TS*);
 49: EXTERN int TSSetType(TS,TSType);
 50: EXTERN int TSGetProblemType(TS,TSProblemType*);
 51: EXTERN int TSDestroy(TS);

 53: EXTERN int TSSetMonitor(TS,int(*)(TS,int,double,Vec,void*),void *,int (*)(void*));
 54: EXTERN int TSClearMonitor(TS);
 55: EXTERN int TSGetType(TS,TSType*);

 57: EXTERN int TSSetOptionsPrefix(TS,char *);
 58: EXTERN int TSAppendOptionsPrefix(TS,char *);
 59: EXTERN int TSGetOptionsPrefix(TS,char **);
 60: EXTERN int TSSetFromOptions(TS);
 61: EXTERN int TSSetUp(TS);

 63: EXTERN int TSSetSolution(TS,Vec);
 64: EXTERN int TSGetSolution(TS,Vec*);

 66: EXTERN int TSSetDuration(TS,int,double);

 68: EXTERN int TSDefaultMonitor(TS,int,double,Vec,void*);
 69: EXTERN int TSVecViewMonitor(TS,int,double,Vec,void*);
 70: EXTERN int TSStep(TS,int *,double*);

 72: EXTERN int TSSetInitialTimeStep(TS,double,double);
 73: EXTERN int TSGetTimeStep(TS,double*);
 74: EXTERN int TSGetTime(TS,double*);
 75: EXTERN int TSGetTimeStepNumber(TS,int*);
 76: EXTERN int TSSetTimeStep(TS,double);

 78: EXTERN int TSSetRHSFunction(TS,int (*)(TS,double,Vec,Vec,void*),void*);
 79: EXTERN int TSSetRHSMatrix(TS,Mat,Mat,int (*)(TS,double,Mat*,Mat*,MatStructure*,void*),void*);
 80: EXTERN int TSSetRHSJacobian(TS,Mat,Mat,int(*)(TS,double,Vec,Mat*,Mat*,MatStructure*,void*),void*);
 81: EXTERN int TSSetRHSBoundaryConditions(TS,int (*)(TS,double,Vec,void*),void*);

 83: EXTERN int TSDefaultComputeJacobianColor(TS,double,Vec,Mat*,Mat*,MatStructure*,void*);
 84: EXTERN int TSDefaultComputeJacobian(TS,double,Vec,Mat*,Mat*,MatStructure*,void*);

 86: EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**);
 87: EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**);

 89: EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,double*,void*),void*);
 90: EXTERN int TSPseudoDefaultTimeStep(TS,double*,void*);
 91: EXTERN int TSPseudoComputeTimeStep(TS,double *);

 93: EXTERN int TSPseudoSetVerifyTimeStep(TS,int(*)(TS,Vec,void*,double*,int*),void*);
 94: EXTERN int TSPseudoDefaultVerifyTimeStep(TS,Vec,void*,double*,int*);
 95: EXTERN int TSPseudoVerifyTimeStep(TS,Vec,double*,int*);
 96: EXTERN int TSPseudoSetTimeStepIncrement(TS,double);
 97: EXTERN int TSPseudoIncrementDtFromInitialDt(TS);

 99: EXTERN int TSComputeRHSFunction(TS,double,Vec,Vec);
100: EXTERN int TSComputeRHSBoundaryConditions(TS,double,Vec);
101: EXTERN int TSComputeRHSJacobian(TS,double,Vec,Mat*,Mat*,MatStructure*);

103: extern PetscFList      TSList;
104: EXTERN int        TSRegisterAll(char*);
105: EXTERN int        TSRegisterDestroy(void);
106: extern PetscTruth TSRegisterAllCalled;

108: EXTERN int TSRegister(char*,char*,char*,int(*)(TS));
109: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
110: #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0)
111: #else
112: #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d)
113: #endif

115: EXTERN int TSGetSNES(TS,SNES*);
116: EXTERN int TSGetSLES(TS,SLES*);

118: EXTERN int TSView(TS,PetscViewer);

120: EXTERN int TSSetApplicationContext(TS,void *);
121: EXTERN int TSGetApplicationContext(TS,void **);

123: EXTERN int TSLGMonitorCreate(char *,char *,int,int,int,int,PetscDrawLG *);
124: EXTERN int TSLGMonitor(TS,int,double,Vec,void *);
125: EXTERN int TSLGMonitorDestroy(PetscDrawLG);

127: /*
128:        PETSc interface to PVode
129: */
130: #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS
131: typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType;
132: typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType;
133: EXTERN int TSPVodeSetType(TS,TSPVodeType);
134: EXTERN int TSPVodeGetPC(TS,PC*);
135: EXTERN int TSPVodeSetTolerance(TS,double,double);
136: EXTERN int TSPVodeGetIterations(TS,int *,int *);
137: EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType);
138: EXTERN int TSPVodeSetGMRESRestart(TS,int);
139: EXTERN int TSPVodeSetLinearTolerance(TS,double);
140: EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth);

142: #endif