Actual source code: petscts.h

  1: /* $Id: petscts.h,v 1.47 2001/08/06 15:42:42 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: /*E
 22:     TSType - String with the name of a PETSc TS method or the creation function
 23:        with an optional dynamic library name, for example
 24:        http://www.mcs.anl.gov/petsc/lib.a:mytscreate()

 26:    Level: beginner

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

 37: typedef char *TSSerializeType;

 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: /* Logging support */
 49: extern int TS_COOKIE;
 50: extern int TS_Step, TS_PseudoComputeTimeStep, TS_FunctionEval, TS_JacobianEval;

 52: EXTERN int TSInitializePackage(char *);

 54: EXTERN int TSCreate(MPI_Comm,TS*);
 55: EXTERN int TSSerialize(MPI_Comm, TS *, PetscViewer, PetscTruth);
 56: EXTERN int TSDestroy(TS);

 58: EXTERN int TSSetProblemType(TS,TSProblemType);
 59: EXTERN int TSGetProblemType(TS,TSProblemType*);
 60: EXTERN int TSSetMonitor(TS,int(*)(TS,int,PetscReal,Vec,void*),void *,int (*)(void*));
 61: EXTERN int TSClearMonitor(TS);

 63: EXTERN int TSSetOptionsPrefix(TS,char *);
 64: EXTERN int TSAppendOptionsPrefix(TS,char *);
 65: EXTERN int TSGetOptionsPrefix(TS,char **);
 66: EXTERN int TSSetFromOptions(TS);
 67: EXTERN int TSSetUp(TS);

 69: EXTERN int TSSetSolution(TS,Vec);
 70: EXTERN int TSGetSolution(TS,Vec*);

 72: EXTERN int TSSetDuration(TS,int,PetscReal);
 73: EXTERN int TSGetDuration(TS,int*,PetscReal*);

 75: EXTERN int TSDefaultMonitor(TS,int,PetscReal,Vec,void*);
 76: EXTERN int TSVecViewMonitor(TS,int,PetscReal,Vec,void*);
 77: EXTERN int TSStep(TS,int *,PetscReal*);

 79: EXTERN int TSSetInitialTimeStep(TS,PetscReal,PetscReal);
 80: EXTERN int TSGetTimeStep(TS,PetscReal*);
 81: EXTERN int TSGetTime(TS,PetscReal*);
 82: EXTERN int TSGetTimeStepNumber(TS,int*);
 83: EXTERN int TSSetTimeStep(TS,PetscReal);

 85: EXTERN int TSSetRHSFunction(TS,int (*)(TS,PetscReal,Vec,Vec,void*),void*);
 86: EXTERN int TSSetRHSMatrix(TS,Mat,Mat,int (*)(TS,PetscReal,Mat*,Mat*,MatStructure*,void*),void*);
 87: EXTERN int TSSetRHSJacobian(TS,Mat,Mat,int(*)(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*),void*);
 88: EXTERN int TSSetRHSBoundaryConditions(TS,int (*)(TS,PetscReal,Vec,void*),void*);

 90: EXTERN int TSDefaultComputeJacobianColor(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*);
 91: EXTERN int TSDefaultComputeJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*,void*);

 93: EXTERN int TSGetRHSMatrix(TS,Mat*,Mat*,void**);
 94: EXTERN int TSGetRHSJacobian(TS,Mat*,Mat*,void**);

 96: extern int TSSetRhsBC(TS, int (*)(TS, Vec, void *));
 97: extern int TSSetSystemMatrixBC(TS, int (*)(TS, Mat, Mat, void *));
 98: extern int TSSetSolutionBC(TS, int (*)(TS, Vec, void *));
 99: extern int TSSetPreStep(TS, int (*)(TS));
100: extern int TSSetUpdate(TS, int (*)(TS, PetscReal, PetscReal *));
101: extern int TSSetPostStep(TS, int (*)(TS));
102: extern int TSDefaultRhsBC(TS, Vec, void *);
103: extern int TSDefaultSystemMatrixBC(TS, Mat, Mat, void *);
104: extern int TSDefaultSolutionBC(TS, Vec, void *);
105: extern int TSDefaultPreStep(TS);
106: extern int TSDefaultUpdate(TS, PetscReal, PetscReal *);
107: extern int TSDefaultPostStep(TS);
108: extern int TSSetIdentity(TS, int (*)(TS, double, Mat *, void *));

110: EXTERN int TSPseudoSetTimeStep(TS,int(*)(TS,PetscReal*,void*),void*);
111: EXTERN int TSPseudoDefaultTimeStep(TS,PetscReal*,void*);
112: EXTERN int TSPseudoComputeTimeStep(TS,PetscReal *);

114: EXTERN int TSPseudoSetVerifyTimeStep(TS,int(*)(TS,Vec,void*,PetscReal*,int*),void*);
115: EXTERN int TSPseudoDefaultVerifyTimeStep(TS,Vec,void*,PetscReal*,int*);
116: EXTERN int TSPseudoVerifyTimeStep(TS,Vec,PetscReal*,int*);
117: EXTERN int TSPseudoSetTimeStepIncrement(TS,PetscReal);
118: EXTERN int TSPseudoIncrementDtFromInitialDt(TS);

120: EXTERN int TSComputeRHSFunction(TS,PetscReal,Vec,Vec);
121: EXTERN int TSComputeRHSBoundaryConditions(TS,PetscReal,Vec);
122: EXTERN int TSComputeRHSJacobian(TS,PetscReal,Vec,Mat*,Mat*,MatStructure*);

124: /* Dynamic creation and loading functions */
125: extern PetscFList TSList;
126: extern PetscTruth TSRegisterAllCalled;
127: EXTERN int TSGetType(TS,TSType*);
128: EXTERN int TSSetType(TS,TSType);
129: EXTERN int TSRegister(const char[], const char[], const char[], int (*)(TS));
130: EXTERN int TSRegisterAll(const char[]);
131: EXTERN int TSRegisterDestroy(void);
132: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
133: #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,0)
134: #else
135: #define TSRegisterDynamic(a,b,c,d) TSRegister(a,b,c,d)
136: #endif

138: extern PetscFList TSSerializeList;
139: extern PetscTruth TSSerializeRegisterAllCalled;
140: EXTERN int TSSetSerializeType(TS, TSSerializeType);
141: EXTERN int TSGetSerializeType(TS, TSSerializeType *);
142: EXTERN int TSSerializeRegister(const char [], const char [], const char [], int (*)(MPI_Comm, TS *, PetscViewer, PetscTruth));
143: EXTERN int TSSerializeRegisterAll(const char []);
144: EXTERN int TSSerializeRegisterDestroy(void);
145: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
146: #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,0)
147: #else
148: #define TSSerializeRegisterDynamic(a,b,c,d) TSSerializeRegister(a,b,c,d)
149: #endif

151: EXTERN int TSGetSNES(TS,SNES*);
152: EXTERN int TSGetSLES(TS,SLES*);

154: EXTERN int TSView(TS,PetscViewer);
155: EXTERN int TSViewFromOptions(TS,char *);

157: EXTERN int TSSetApplicationContext(TS,void *);
158: EXTERN int TSGetApplicationContext(TS,void **);

160: EXTERN int TSLGMonitorCreate(char *,char *,int,int,int,int,PetscDrawLG *);
161: EXTERN int TSLGMonitor(TS,int,PetscReal,Vec,void *);
162: EXTERN int TSLGMonitorDestroy(PetscDrawLG);

164: /*
165:        PETSc interface to PVode
166: */
167: #define PVODE_UNMODIFIED_GS PVODE_CLASSICAL_GS
168: typedef enum { PVODE_ADAMS,PVODE_BDF } TSPVodeType;
169: typedef enum { PVODE_MODIFIED_GS = 0,PVODE_CLASSICAL_GS = 1 } TSPVodeGramSchmidtType;
170: EXTERN int TSPVodeSetType(TS,TSPVodeType);
171: EXTERN int TSPVodeGetPC(TS,PC*);
172: EXTERN int TSPVodeSetTolerance(TS,PetscReal,PetscReal);
173: EXTERN int TSPVodeGetIterations(TS,int *,int *);
174: EXTERN int TSPVodeSetGramSchmidtType(TS,TSPVodeGramSchmidtType);
175: EXTERN int TSPVodeSetGMRESRestart(TS,int);
176: EXTERN int TSPVodeSetLinearTolerance(TS,PetscReal);
177: EXTERN int TSPVodeSetExactFinalTime(TS,PetscTruth);

179: #endif