1 #pragma once 2 3 #include <petsc/private/snesimpl.h> 4 #include <petsc/private/linesearchimpl.h> 5 #include <petscdm.h> 6 7 typedef struct { 8 /* flags for knowing the global place of this FAS object */ 9 PetscInt level; /* level = 0 coarsest level */ 10 PetscInt levels; /* if level + 1 = levels; we're the last turtle */ 11 12 /* smoothing objects */ 13 SNES smoothu; /* the SNES for presmoothing */ 14 SNES smoothd; /* the SNES for postsmoothing */ 15 16 /* coarse grid correction objects */ 17 SNES next; /* the SNES instance for the next coarser level in the hierarchy */ 18 SNES fine; /* the finest SNES instance; used as a reference for prefixes */ 19 SNES previous; /* the SNES instance for the next finer level in the hierarchy */ 20 Mat interpolate; /* interpolation */ 21 Mat inject; /* injection operator (unscaled) */ 22 Mat restrct; /* restriction operator */ 23 Vec rscale; /* the pointwise scaling of the restriction operator */ 24 25 /* method parameters */ 26 PetscInt n_cycles; /* number of cycles on this level */ 27 SNESFASType fastype; /* FAS type */ 28 PetscInt max_up_it; /* number of pre-smooths */ 29 PetscInt max_down_it; /* number of post-smooth cycles */ 30 PetscBool usedmfornumberoflevels; /* uses a DM to generate a number of the levels */ 31 PetscBool full_downsweep; /* smooth on the initial full downsweep */ 32 PetscBool full_total; /* use total residual restriction and total solution interpolation on the initial downsweep and upsweep */ 33 PetscBool continuation; /* sets the setup to default to continuation */ 34 PetscInt full_stage; /* stage of the full cycle -- 0 is the upswing, 1 is the downsweep and final V-cycle */ 35 36 /* Galerkin FAS state */ 37 PetscBool galerkin; /* use Galerkin formation of the coarse problem */ 38 Vec Xg; /* Galerkin solution projection */ 39 Vec Fg; /* Galerkin function projection */ 40 41 /* if logging times for each level */ 42 PetscLogEvent eventsmoothsetup; /* level setup */ 43 PetscLogEvent eventsmoothsolve; /* level smoother solves */ 44 PetscLogEvent eventresidual; /* level residual evaluation */ 45 PetscLogEvent eventinterprestrict; /* level interpolation and restriction */ 46 } SNES_FAS; 47 48 PETSC_INTERN PetscErrorCode SNESFASCycleCreateSmoother_Private(SNES, SNES *); 49