Actual source code: petscmg.h
1: /* $Id: petscmg.h,v 1.21 2001/04/04 21:07:36 bsmith Exp $ */
2: /*
3: Structure used for Multigrid preconditioners
4: */
7: #include petscksp.h
8: PETSC_EXTERN_CXX_BEGIN
10: /*E
11: MGType - Determines the type of multigrid method that is run.
13: Level: beginner
15: Values:
16: + MGMULTIPLICATIVE (default) - traditional V or W cycle as determined by MGSetCycles()
17: . MGADDITIVE - the additive multigrid preconditioner where all levels are
18: smoothed before updating the residual
19: . MGFULL - same as multiplicative except one also performs grid sequencing,
20: that is starts on the coarsest grid, performs a cycle, interpolates
21: to the next, performs a cycle etc
22: - MGKASKADE - like full multigrid except one never goes back to a coarser level
23: from a finer
25: .seealso: MGSetType()
27: E*/
28: typedef enum { MGMULTIPLICATIVE,MGADDITIVE,MGFULL,MGKASKADE } MGType;
29: #define MGCASCADE MGKASKADE;
31: #define MG_V_CYCLE 1
32: #define MG_W_CYCLE 2
34: EXTERN int MGSetType(PC,MGType);
35: EXTERN int MGCheck(PC);
36: EXTERN int MGSetLevels(PC,int,MPI_Comm*);
37: EXTERN int MGGetLevels(PC,int*);
39: EXTERN int MGSetNumberSmoothUp(PC,int);
40: EXTERN int MGSetNumberSmoothDown(PC,int);
41: EXTERN int MGSetCycles(PC,int);
42: EXTERN int MGSetCyclesOnLevel(PC,int,int);
44: EXTERN int MGGetSmoother(PC,int,KSP*);
45: EXTERN int MGGetSmootherDown(PC,int,KSP*);
46: EXTERN int MGGetSmootherUp(PC,int,KSP*);
47: EXTERN int MGGetCoarseSolve(PC,KSP*);
49: EXTERN int MGSetRhs(PC,int,Vec);
50: EXTERN int MGSetX(PC,int,Vec);
51: EXTERN int MGSetR(PC,int,Vec);
53: EXTERN int MGSetRestriction(PC,int,Mat);
54: EXTERN int MGSetInterpolate(PC,int,Mat);
55: EXTERN int MGSetResidual(PC,int,int (*)(Mat,Vec,Vec,Vec),Mat);
56: EXTERN int MGDefaultResidual(Mat,Vec,Vec,Vec);
59: PETSC_EXTERN_CXX_END
60: #endif