Actual source code: packimpl.h

  1: #if !defined(_packimpl_h)
  2: #define _packimpl_h

  4: #include <petscdmcomposite.h>    /*I "petscdmcomposite.h" I*/
  5: #include <private/dmimpl.h>      /*I      "petscdm.h"     I*/

  7: /*
  8:    rstart is where an array/subvector starts in the global parallel vector, so arrays
  9:    rstarts are meaningless (and set to the previous one) except on the processor where the array lives
 10: */

 12: typedef enum {DMCOMPOSITE_ARRAY, DMCOMPOSITE_DM} DMCompositeLinkType;

 14: struct DMCompositeLink {
 15:   DMCompositeLinkType    type;
 16:   struct DMCompositeLink *next;
 17:   PetscInt               n;             /* number of owned */
 18:   PetscInt               rstart;        /* rstart is relative to this process */
 19:   PetscInt               grstart;       /* grstart is relative to all processes */
 20:   PetscInt               nlocal;

 22:   /* only used for DMCOMPOSITE_DM */
 23:   PetscInt               *grstarts;     /* global row for first unknown of this DM on each process */
 24:   DM                     dm;

 26:   /* only used for DMCOMPOSITE_ARRAY */
 27:   PetscMPIInt            rank;          /* process where array unknowns live */
 28: };

 30: typedef struct {
 31:   PetscInt               n,N,rstart;           /* rstart is relative to all processors, n unknowns owned by this process, N is total unknowns */
 32:   PetscInt               nghost;               /* number of all local entries include DMDA ghost points and any shared redundant arrays */
 33:   PetscInt               nDM,nredundant,nmine; /* how many DM's and seperate redundant arrays used to build DM(nmine is ones on this process) */
 34:   PetscBool              setup;                /* after this is set, cannot add new links to the DM*/
 35:   struct DMCompositeLink *next;

 37:   PetscErrorCode (*FormCoupleLocations)(DM,Mat,PetscInt*,PetscInt*,PetscInt,PetscInt,PetscInt,PetscInt);
 38: } DM_Composite;


 42: #endif