1: #if !defined(_dmakktimpl_h)
2: #define _dmakktimpl_h 4: #include <petscdmakkt.h>
5: #define DMAKKT_DECOMPOSITION_NAME_LEN 1024 6: typedef struct {
7: Mat Aff; /* Mat encoding the underlying fine geometry. */
8: DM dm; /* Optional DM encapsulating the KKT system matrix and (optionally) its decomposition. */
9: char dname[DMAKKT_DECOMPOSITION_NAME_LEN+1]; /* Optional name of the decomposition defining the split into primal and dual variables. */
10: char* names[2]; /* Optional names of the decomposition parts. */
11: DM dmf[2]; /* DMs of the primal-dual split; dual subDM is optional. */
12: IS isf[2]; /* ISs of the primal-dual split; either is optional, but at least one must be set -- the other is then the complement. */
13: PetscBool transposeP;/* Whether the primal prolongator needs to be transpose to be a prolongator (i.e., to map from coarse to fine). */
14: DM cdm; /* If this DM has been coarsened, cache the result for use in DMCreateInterpolation() */
15: Mat Pfc; /* Prolongator for the combined system. */
16: PetscBool duplicate_mat;
17: PetscBool detect_saddle_point;
18: } DM_AKKT;
21: #endif