xref: /petsc/include/petscis.h (revision d64ed03d54a2fae6c0c58880c522fae65f427572)
1*d64ed03dSBarry Smith /* $Id: is.h,v 1.40 1997/10/10 04:08:45 bsmith Exp bsmith $ */
22eac72dbSBarry Smith 
32eac72dbSBarry Smith /*
4f8256253SLois Curfman McInnes    An index set is a generalization of a subset of integers.  Index sets
5f8256253SLois Curfman McInnes    are used for defining scatters and gathers.
62eac72dbSBarry Smith */
72eac72dbSBarry Smith #if !defined(__IS_PACKAGE)
82eac72dbSBarry Smith #define __IS_PACKAGE
92eac72dbSBarry Smith #include "petsc.h"
102eac72dbSBarry Smith 
119e25ed09SBarry Smith #define IS_COOKIE PETSC_COOKIE+2
12f0479e8cSBarry Smith 
13f09e8eb9SSatish Balay typedef struct _p_IS* IS;
142eac72dbSBarry Smith 
15639f9d9dSBarry Smith /*
16639f9d9dSBarry Smith     Default index set data structures that PETSc provides.
17639f9d9dSBarry Smith */
18639f9d9dSBarry Smith typedef enum {IS_GENERAL=0, IS_STRIDE=1, IS_BLOCK = 2} ISType;
19537820f0SBarry Smith extern int   ISCreateGeneral(MPI_Comm,int,int *,IS *);
20537820f0SBarry Smith extern int   ISCreateBlock(MPI_Comm,int,int,int *,IS *);
21537820f0SBarry Smith extern int   ISCreateStride(MPI_Comm,int,int,int,IS *);
224b0e389bSBarry Smith 
234b0e389bSBarry Smith extern int   ISDestroy(IS);
244b0e389bSBarry Smith 
25aabeff55SBarry Smith extern int   ISSetPermutation(IS);
2677c4ece6SBarry Smith extern int   ISPermutation(IS,PetscTruth*);
2708480c60SBarry Smith extern int   ISSetIdentity(IS);
2877c4ece6SBarry Smith extern int   ISIdentity(IS,PetscTruth*);
2908480c60SBarry Smith 
30aabeff55SBarry Smith extern int   ISGetIndices(IS,int **);
31aabeff55SBarry Smith extern int   ISRestoreIndices(IS,int **);
32aabeff55SBarry Smith extern int   ISGetSize(IS,int *);
33aabeff55SBarry Smith extern int   ISInvertPermutation(IS,IS*);
34aabeff55SBarry Smith extern int   ISView(IS,Viewer);
3577c4ece6SBarry Smith extern int   ISEqual(IS, IS, PetscTruth *);
360f453280SSatish Balay extern int   ISSort(IS);
3777c4ece6SBarry Smith extern int   ISSorted(IS, PetscTruth *);
38ca71c51bSBarry Smith extern int   ISDifference(IS,IS,IS*);
392bdab257SBarry Smith extern int   ISSum(IS,IS,IS*);
40612dd529SBarry Smith 
41537820f0SBarry Smith extern int   ISBlock(IS,PetscTruth*);
42c16cb8f2SBarry Smith extern int   ISBlockGetIndices(IS,int **);
43c16cb8f2SBarry Smith extern int   ISBlockRestoreIndices(IS,int **);
44537820f0SBarry Smith extern int   ISBlockGetSize(IS,int *);
45537820f0SBarry Smith extern int   ISBlockGetBlockSize(IS,int *);
46c16cb8f2SBarry Smith 
47537820f0SBarry Smith extern int   ISStride(IS,PetscTruth*);
48c16cb8f2SBarry Smith extern int   ISStrideGetInfo(IS,int *,int*);
49c16cb8f2SBarry Smith 
50d4bb536fSBarry Smith extern int   ISDuplicate(IS, IS*);
51*d64ed03dSBarry Smith extern int   ISAllGather(IS, IS*);
52*d64ed03dSBarry Smith 
5356cd22aeSBarry Smith /* --------------------------------------------------------------------------*/
5456cd22aeSBarry Smith 
55639f9d9dSBarry Smith /*
5690f02eecSBarry Smith    ISLocalToGlobalMappings are mappings from an arbitrary
5790f02eecSBarry Smith   local ordering from 0 to n-1 to a global PETSc ordering
58d4bb536fSBarry Smith   used by a vector or matrix.
59d4bb536fSBarry Smith 
60d4bb536fSBarry Smith    Note: mapping from Local to Global is scalable; but Global
61d4bb536fSBarry Smith   to local may not be if the range of global values represented locally
62d4bb536fSBarry Smith   is very large.
6390f02eecSBarry Smith */
64d4bb536fSBarry Smith #define IS_LTOGM_COOKIE PETSC_COOKIE+12
65f09e8eb9SSatish Balay typedef struct _p_ISLocalToGlobalMapping* ISLocalToGlobalMapping;
6690f02eecSBarry Smith 
67d4bb536fSBarry Smith extern int ISLocalToGlobalMappingCreate(MPI_Comm,int, int*, ISLocalToGlobalMapping*);
682bdab257SBarry Smith extern int ISLocalToGlobalMappingCreateIS(IS,ISLocalToGlobalMapping *);
6990f02eecSBarry Smith extern int ISLocalToGlobalMappingDestroy(ISLocalToGlobalMapping);
70d4bb536fSBarry Smith extern int ISLocalToGlobalMappingApply(ISLocalToGlobalMapping,int,int*,int *);
7190f02eecSBarry Smith extern int ISLocalToGlobalMappingApplyIS(ISLocalToGlobalMapping,IS,IS*);
72d4bb536fSBarry Smith typedef enum {IS_GTOLM_MASK,IS_GTOLM_DROP} ISGlobalToLocalMappingType;
73d4bb536fSBarry Smith extern int ISGlobalToLocalMappingApply(ISLocalToGlobalMapping,ISGlobalToLocalMappingType,
74d4bb536fSBarry Smith                                        int,int *,int*,int *);
7590f02eecSBarry Smith 
7656cd22aeSBarry Smith /* --------------------------------------------------------------------------*/
7756cd22aeSBarry Smith 
7890f02eecSBarry Smith /*
79639f9d9dSBarry Smith      ISColorings are sets of IS's that define a coloring
80639f9d9dSBarry Smith    of the underlying indices
81639f9d9dSBarry Smith */
82f09e8eb9SSatish Balay struct _p_ISColoring {
83639f9d9dSBarry Smith   int      n;
84639f9d9dSBarry Smith   IS       *is;
85639f9d9dSBarry Smith   MPI_Comm comm;
86639f9d9dSBarry Smith };
87f09e8eb9SSatish Balay typedef struct _p_ISColoring* ISColoring;
88639f9d9dSBarry Smith 
89639f9d9dSBarry Smith extern int ISColoringDestroy(ISColoring);
90639f9d9dSBarry Smith extern int ISColoringView(ISColoring,Viewer);
91639f9d9dSBarry Smith extern int ISColoringCreate(MPI_Comm,int,int*,ISColoring*);
92639f9d9dSBarry Smith 
93dbef8a1cSBarry Smith /* --------------------------------------------------------------------------*/
94dbef8a1cSBarry Smith 
95dbef8a1cSBarry Smith /*
96dbef8a1cSBarry Smith      ISPartitioning are sets of IS's that define a partioning
97dbef8a1cSBarry Smith    of the underlying indices. This is the same as a ISColoring.
98dbef8a1cSBarry Smith */
99dbef8a1cSBarry Smith #define ISPartitioning        ISColoring
1000752156aSBarry Smith #define ISPartitioningView    ISColoringView
1010752156aSBarry Smith #define ISPartitioningCreate  ISColoringCreate
1020752156aSBarry Smith #define ISPartitioningDestroy ISColoringDestroy
1030752156aSBarry Smith extern int ISPartitioningToLocalIS(ISPartitioning,IS*);
104dbef8a1cSBarry Smith 
105a2ce50c7SBarry Smith #endif
1067588ac45SBarry Smith 
1077588ac45SBarry Smith 
108639f9d9dSBarry Smith 
109639f9d9dSBarry Smith 
110