1 #if !defined(_packimpl_h) 2 #define _packimpl_h 3 4 #include <private/dmimpl.h> /*I "petscdm.h" I*/ 5 6 /* 7 rstart is where an array/subvector starts in the global parallel vector, so arrays 8 rstarts are meaningless (and set to the previous one) except on the processor where the array lives 9 */ 10 11 typedef enum {DMCOMPOSITE_ARRAY, DMCOMPOSITE_DM} DMCompositeLinkType; 12 13 struct DMCompositeLink { 14 DMCompositeLinkType type; 15 struct DMCompositeLink *next; 16 PetscInt n; /* number of owned */ 17 PetscInt rstart; /* rstart is relative to this process */ 18 PetscInt grstart; /* grstart is relative to all processes */ 19 PetscInt nlocal; 20 21 /* only used for DMCOMPOSITE_DM */ 22 PetscInt *grstarts; /* global row for first unknown of this DM on each process */ 23 DM dm; 24 25 /* only used for DMCOMPOSITE_ARRAY */ 26 PetscMPIInt rank; /* process where array unknowns live */ 27 }; 28 29 typedef struct { 30 PetscInt n,N,rstart; /* rstart is relative to all processors, n unknowns owned by this process, N is total unknowns */ 31 PetscInt nghost; /* number of all local entries include DMDA ghost points and any shared redundant arrays */ 32 PetscInt nDM,nredundant,nmine; /* how many DM's and seperate redundant arrays used to build DM(nmine is ones on this process) */ 33 PetscBool setup; /* after this is set, cannot add new links to the DM*/ 34 struct DMCompositeLink *next; 35 36 PetscErrorCode (*FormCoupleLocations)(DM,Mat,PetscInt*,PetscInt*,PetscInt,PetscInt,PetscInt,PetscInt); 37 } DM_Composite; 38 39 extern PetscErrorCode DMGetMatrix_Composite(DM,const MatType,Mat*); 40 41 #endif 42