1421d9b32SPeter Brune #ifndef _SNES_FASIMPLS 2421d9b32SPeter Brune #define _SNES_FASIMPLS 3421d9b32SPeter Brune 4*b45d2f2cSJed Brown #include <petsc-private/snesimpl.h> 5*b45d2f2cSJed Brown #include <petsc-private/linesearchimpl.h> 6*b45d2f2cSJed Brown #include <petsc-private/dmimpl.h> 707144faaSPeter Brune #include <petscsnesfas.h> 8421d9b32SPeter Brune 9421d9b32SPeter Brune typedef struct { 10421d9b32SPeter Brune 11421d9b32SPeter Brune /* flags for knowing the global place of this FAS object */ 12421d9b32SPeter Brune PetscInt level; /* level = 0 coarsest level */ 13421d9b32SPeter Brune PetscInt levels; /* if level + 1 = levels; we're the last turtle */ 14421d9b32SPeter Brune 15646217ecSPeter Brune PetscViewer monitor; /* debuggging output for FAS */ 16421d9b32SPeter Brune 17421d9b32SPeter Brune /* smoothing objects */ 18ee78dd50SPeter Brune SNES upsmooth; /* the SNES for presmoothing */ 19ee78dd50SPeter Brune SNES downsmooth; /* the SNES for postsmoothing */ 20421d9b32SPeter Brune 21f1c6b773SPeter Brune SNESLineSearch linesearch_smooth; /* the line search for default upsmoothing */ 2222c1e704SPeter Brune 23421d9b32SPeter Brune /* coarse grid correction objects */ 246273346dSPeter Brune SNES next; /* the SNES instance for the next coarser level in the hierarchy */ 256273346dSPeter Brune SNES previous; /* the SNES instance for the next finer level in the hierarchy */ 26421d9b32SPeter Brune Mat interpolate; /* interpolation */ 27efe1f98aSPeter Brune Mat inject; /* injection operator (unscaled) */ 28421d9b32SPeter Brune Mat restrct; /* restriction operator */ 29421d9b32SPeter Brune Vec rscale; /* the pointwise scaling of the restriction operator */ 30421d9b32SPeter Brune 31ee78dd50SPeter Brune /* method parameters */ 32ee78dd50SPeter Brune PetscInt n_cycles; /* number of cycles on this level */ 3307144faaSPeter Brune SNESFASType fastype; /* FAS type */ 34ee78dd50SPeter Brune PetscInt max_up_it; /* number of pre-smooths */ 35ee78dd50SPeter Brune PetscInt max_down_it; /* number of post-smooth cycles */ 36d1adcc6fSPeter Brune PetscBool usedmfornumberoflevels; /* uses a DM to generate a number of the levels */ 376273346dSPeter Brune 386273346dSPeter Brune /* Galerkin FAS state */ 396273346dSPeter Brune PetscBool galerkin; /* use Galerkin formation of the coarse problem */ 406273346dSPeter Brune Vec Xg; /* Galerkin solution projection */ 416273346dSPeter Brune Vec Fg; /* Galerkin function projection */ 426273346dSPeter Brune 43421d9b32SPeter Brune } SNES_FAS; 44421d9b32SPeter Brune 45421d9b32SPeter Brune #endif 46