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