Actual source code: pcasmimpl.h

      1: #pragma once

      3: #include <petscdm.h>
      4: #include <petsc/private/pcimpl.h>
      5: typedef struct {
      6:   PetscInt        n, n_local, n_local_true;
      7:   PetscInt        overlap;       /* overlap requested by user */
      8:   KSP            *ksp;           /* linear solvers for each block */
      9:   VecScatter      restriction;   /* mapping from global to overlapping (process) subdomain*/
     10:   VecScatter     *lrestriction;  /* mapping from subregion to overlapping (process) subdomain */
     11:   VecScatter     *lprolongation; /* mapping from non-overlapping subregion to overlapping (process) subdomain; used for restrict additive version of algorithms */
     12:   Vec             lx, ly;        /* work vectors */
     13:   Vec            *x, *y;         /* work vectors */
     14:   IS              lis;           /* index set that defines each overlapping multiplicative (process) subdomain */
     15:   IS             *is;            /* index set that defines each overlapping subdomain */
     16:   IS             *is_local;      /* index set that defines each non-overlapping subdomain, may be NULL */
     17:   Mat            *mat, *pmat;    /* mat is not currently used */
     18:   PCASMType       type;          /* use reduced interpolation, restriction or both */
     19:   PetscBool       type_set;      /* if user set this value (so won't change it for symmetric problems) */
     20:   PetscBool       sort_indices;  /* flag to sort subdomain indices */
     21:   PetscBool       dm_subdomains; /* whether DM is allowed to define subdomains */
     22:   PCCompositeType loctype;       /* the type of composition for local solves */
     23:   MatType         sub_mat_type;  /* the type of Mat used for subdomain solves (can be MATSAME or NULL) */
     24:   /* For multiplicative solve */
     25:   Mat *lmats; /* submatrices for overlapping multiplicative (process) subdomain */
     26: } PC_ASM;