Actual source code: mgimpl.h

  1: /*
  2:       Data structure used for Multigrid preconditioner.
  3: */
 6:  #include private/pcimpl.h
 7:  #include petscmg.h
 8:  #include petscksp.h

 10: /*
 11:      Each level has its own copy of this data.
 12:      Level (0) is always the coarsest level and Level (levels-1) is the finest.
 13: */
 14: typedef struct {
 15:   PetscInt       cycles;                       /* Type of cycle to run: 1 V 2 W */
 16:   PetscInt       level;                        /* level = 0 coarsest level */
 17:   PetscInt       levels;                       /* number of active levels used */
 18:   PetscTruth     galerkin;                     /* use Galerkin process to compute coarser matrices */
 19:   PetscTruth     galerkinused;                 /* destroy the Mat created by the Galerkin process */
 20:   Vec            b;                            /* Right hand side */
 21:   Vec            x;                            /* Solution */
 22:   Vec            r;                            /* Residual */
 23:   PetscErrorCode (*residual)(Mat,Vec,Vec,Vec);
 24:   Mat            A;                            /* matrix used in forming residual*/
 25:   KSP            smoothd;                      /* pre smoother */
 26:   KSP            smoothu;                      /* post smoother */
 27:   Mat            interpolate;
 28:   Mat            restrct;                      /* restrict is a reserved word on the Cray!!!*/
 29: } PC_MG_Levels;

 31: /*
 32:     This data structure is shared by all the levels.
 33: */
 34: typedef struct {
 35:   PCMGType      am;                           /* Multiplicative, additive or full */
 36:   PetscInt      cyclesperpcapply;             /* Number of cycles to use in each PCApply(), multiplicative only*/
 37:   PetscInt      maxlevels;                    /* total number of levels allocated */

 39:   PetscInt      nlevels;
 40:   PC_MG_Levels  **levels;
 41:   PetscInt      default_smoothu;              /* number of smooths per level if not over-ridden */
 42:   PetscInt      default_smoothd;              /*  with calls to KSPSetTolerances() */
 43:   PetscReal     rtol,abstol,dtol,ttol;        /* tolerances for when running with PCApplyRichardson_MG */
 44:   PetscLogEvent eventsmoothsetup;             /* if logging times for each level */
 45:   PetscLogEvent eventsmoothsolve;
 46:   PetscLogEvent eventresidual;
 47:   PetscLogEvent eventinterprestrict;
 48:   void          *innerctx;                   /* optional data for preconditioner, like PCEXOTIC that inherits off of PCMG */
 49: } PC_MG;


 56: #endif