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;