Actual source code: petsc-isimpl.h
petsc-3.4.2 2013-07-02

      1: /*
      2:     Index sets for scatter-gather type operations in vectors
      3: and matrices.

      5: */

      7: #if !defined(_IS_H)
      8: #define _IS_H

     10: #include <petscis.h>
     11: #include <petsc-private/petscimpl.h>

     13: struct _ISOps {
     14:   PetscErrorCode (*getsize)(IS,PetscInt*);
     15:   PetscErrorCode (*getlocalsize)(IS,PetscInt*);
     16:   PetscErrorCode (*getindices)(IS,const PetscInt*[]);
     17:   PetscErrorCode (*restoreindices)(IS,const PetscInt*[]);
     18:   PetscErrorCode (*invertpermutation)(IS,PetscInt,IS*);
     19:   PetscErrorCode (*sort)(IS);
     20:   PetscErrorCode (*sorted)(IS,PetscBool*);
     21:   PetscErrorCode (*duplicate)(IS,IS*);
     22:   PetscErrorCode (*destroy)(IS);
     23:   PetscErrorCode (*view)(IS,PetscViewer);
     24:   PetscErrorCode (*identity)(IS,PetscBool*);
     25:   PetscErrorCode (*copy)(IS,IS);
     26:   PetscErrorCode (*togeneral)(IS);
     27:   PetscErrorCode (*oncomm)(IS,MPI_Comm,PetscCopyMode,IS*);
     28:   PetscErrorCode (*setblocksize)(IS,PetscInt);
     29:   PetscErrorCode (*contiguous)(IS,PetscInt,PetscInt,PetscInt*,PetscBool*);
     30: };

     32: struct _p_IS {
     33:   PETSCHEADER(struct _ISOps);
     34:   PetscBool    isperm;          /* if is a permutation */
     35:   PetscInt     max,min;         /* range of possible values */
     36:   PetscInt     bs;              /* block size */
     37:   void         *data;
     38:   PetscBool    isidentity;
     39:   PetscInt     *total, *nonlocal;   /* local representation of ALL indices across the comm as well as the nonlocal part. */
     40:   PetscInt     local_offset;        /* offset to the local part within the total index set */
     41:   IS           complement;          /* IS wrapping nonlocal indices. */
     42: };

     44: struct _p_ISLocalToGlobalMapping{
     45:   PETSCHEADER(int);
     46:   PetscInt n;                  /* number of local indices */
     47:   PetscInt *indices;           /* global index of each local index */
     48:   PetscInt globalstart;        /* first global referenced in indices */
     49:   PetscInt globalend;          /* last + 1 global referenced in indices */
     50:   PetscInt *globals;           /* local index for each global index between start and end */
     51: };

     53: /* ----------------------------------------------------------------------------*/
     54: typedef struct _n_PetscUniformSection *PetscUniformSection;
     55: struct _n_PetscUniformSection {
     56:   MPI_Comm comm;
     57:   PetscInt pStart, pEnd; /* The chart: all points are contained in [pStart, pEnd) */
     58:   PetscInt numDof;       /* Describes layout of storage, point --> (constant # of values, (p - pStart)*constant # of values) */
     59: };

     61: struct _p_PetscSection {
     62:   PETSCHEADER(int);
     63:   struct _n_PetscUniformSection atlasLayout;  /* Layout for the atlas */
     64:   PetscInt                     *atlasDof;     /* Describes layout of storage, point --> # of values */
     65:   PetscInt                     *atlasOff;     /* Describes layout of storage, point --> offset into storage */
     66:   PetscInt                      maxDof;       /* Maximum dof on any point */
     67:   PetscSection                  bc;           /* Describes constraints, point --> # local dofs which are constrained */
     68:   PetscInt                     *bcIndices;    /* Local indices for constrained dofs */
     69:   PetscBool                     setup;

     71:   PetscInt                      numFields;    /* The number of fields making up the degrees of freedom */
     72:   const char                  **fieldNames;   /* The field names */
     73:   PetscInt                     *numFieldComponents; /* The number of components in each field */
     74:   PetscSection                 *field;        /* A section describing the layout and constraints for each field */
     75: };

     78: #endif