xref: /petsc/include/petscis.h (revision 22327b122a9a8f2b3431743a80dcc760806290d4)
1*22327b12SSatish Balay /* $Id: petscis.h,v 1.53 2000/05/10 16:44:25 bsmith Exp balay $ */
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 */
70a835dfdSSatish Balay #if !defined(__PETSCIS_H)
80a835dfdSSatish Balay #define __PETSCIS_H
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;
19ca44d042SBarry Smith EXTERN int   ISCreateGeneral(MPI_Comm,int,const int[],IS *);
20ca44d042SBarry Smith EXTERN int   ISCreateBlock(MPI_Comm,int,int,const int[],IS *);
21ca44d042SBarry Smith EXTERN int   ISCreateStride(MPI_Comm,int,int,int,IS *);
224b0e389bSBarry Smith 
23ca44d042SBarry Smith EXTERN int   ISDestroy(IS);
244b0e389bSBarry Smith 
25ca44d042SBarry Smith EXTERN int   ISSetPermutation(IS);
26ca44d042SBarry Smith EXTERN int   ISPermutation(IS,PetscTruth*);
27ca44d042SBarry Smith EXTERN int   ISSetIdentity(IS);
28ca44d042SBarry Smith EXTERN int   ISIdentity(IS,PetscTruth*);
2908480c60SBarry Smith 
30ca44d042SBarry Smith EXTERN int   ISGetIndices(IS,int *[]);
31ca44d042SBarry Smith EXTERN int   ISRestoreIndices(IS,int *[]);
32ca44d042SBarry Smith EXTERN int   ISGetSize(IS,int *);
33ca44d042SBarry Smith EXTERN int   ISInvertPermutation(IS,int,IS*);
34ca44d042SBarry Smith EXTERN int   ISView(IS,Viewer);
35ca44d042SBarry Smith EXTERN int   ISEqual(IS,IS,PetscTruth *);
36ca44d042SBarry Smith EXTERN int   ISSort(IS);
37ca44d042SBarry Smith EXTERN int   ISSorted(IS,PetscTruth *);
38ca44d042SBarry Smith EXTERN int   ISDifference(IS,IS,IS*);
39ca44d042SBarry Smith EXTERN int   ISSum(IS,IS,IS*);
40612dd529SBarry Smith 
41ca44d042SBarry Smith EXTERN int   ISBlock(IS,PetscTruth*);
42ca44d042SBarry Smith EXTERN int   ISBlockGetIndices(IS,int *[]);
43ca44d042SBarry Smith EXTERN int   ISBlockRestoreIndices(IS,int *[]);
44ca44d042SBarry Smith EXTERN int   ISBlockGetSize(IS,int *);
45ca44d042SBarry Smith EXTERN int   ISBlockGetBlockSize(IS,int *);
46c16cb8f2SBarry Smith 
47ca44d042SBarry Smith EXTERN int   ISStride(IS,PetscTruth*);
48ca44d042SBarry Smith EXTERN int   ISStrideGetInfo(IS,int *,int*);
49c16cb8f2SBarry Smith 
50ca44d042SBarry Smith EXTERN int   ISStrideToGeneral(IS);
5138f40f24SLois Curfman McInnes 
52ca44d042SBarry Smith EXTERN int   ISDuplicate(IS,IS*);
53ca44d042SBarry Smith EXTERN int   ISAllGather(IS,IS*);
54d64ed03dSBarry Smith 
5556cd22aeSBarry Smith /* --------------------------------------------------------------------------*/
5656cd22aeSBarry Smith 
57639f9d9dSBarry Smith /*
5890f02eecSBarry Smith    ISLocalToGlobalMappings are mappings from an arbitrary
5990f02eecSBarry Smith   local ordering from 0 to n-1 to a global PETSc ordering
60d4bb536fSBarry Smith   used by a vector or matrix.
61d4bb536fSBarry Smith 
62d4bb536fSBarry Smith    Note: mapping from Local to Global is scalable; but Global
63eec0b4cfSBarry Smith   to Local may not be if the range of global values represented locally
64d4bb536fSBarry Smith   is very large.
6590f02eecSBarry Smith */
66d4bb536fSBarry Smith #define IS_LTOGM_COOKIE PETSC_COOKIE+12
67f09e8eb9SSatish Balay typedef struct _p_ISLocalToGlobalMapping* ISLocalToGlobalMapping;
68987e4450SSatish Balay typedef enum {IS_GTOLM_MASK,IS_GTOLM_DROP} ISGlobalToLocalMappingType;
6990f02eecSBarry Smith 
70ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingCreate(MPI_Comm,int,const int[],ISLocalToGlobalMapping*);
71ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingCreateIS(IS,ISLocalToGlobalMapping *);
72ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingView(ISLocalToGlobalMapping,Viewer);
73ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingDestroy(ISLocalToGlobalMapping);
74ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingApply(ISLocalToGlobalMapping,int,const int[],int[]);
75ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingApplyIS(ISLocalToGlobalMapping,IS,IS*);
76ca44d042SBarry Smith EXTERN int ISGlobalToLocalMappingApply(ISLocalToGlobalMapping,ISGlobalToLocalMappingType,
77987e4450SSatish Balay                                        int,const int[],int*,int[]);
7890f02eecSBarry Smith 
7956cd22aeSBarry Smith /* --------------------------------------------------------------------------*/
8056cd22aeSBarry Smith 
8190f02eecSBarry Smith /*
82639f9d9dSBarry Smith      ISColorings are sets of IS's that define a coloring
83639f9d9dSBarry Smith    of the underlying indices
84639f9d9dSBarry Smith */
85f09e8eb9SSatish Balay struct _p_ISColoring {
86639f9d9dSBarry Smith   int      n;
87639f9d9dSBarry Smith   IS       *is;
88639f9d9dSBarry Smith   MPI_Comm comm;
89639f9d9dSBarry Smith };
90f09e8eb9SSatish Balay typedef struct _p_ISColoring* ISColoring;
91639f9d9dSBarry Smith 
92ca44d042SBarry Smith EXTERN int ISColoringCreate(MPI_Comm,int,const int[],ISColoring*);
93ca44d042SBarry Smith EXTERN int ISColoringDestroy(ISColoring);
94ca44d042SBarry Smith EXTERN int ISColoringView(ISColoring,Viewer);
95ca44d042SBarry Smith EXTERN int ISColoringGetIS(ISColoring,int*,IS*[]);
96*22327b12SSatish Balay EXTERN int ISColoringRestoreIS(ISColoring,IS*[]);
97639f9d9dSBarry Smith 
98dbef8a1cSBarry Smith /* --------------------------------------------------------------------------*/
99dbef8a1cSBarry Smith 
100ca44d042SBarry Smith EXTERN int ISPartitioningToNumbering(IS,IS*);
101ca44d042SBarry Smith EXTERN int ISPartitioningCount(IS,int[]);
102dbef8a1cSBarry Smith 
103a2ce50c7SBarry Smith #endif
1047588ac45SBarry Smith 
1057588ac45SBarry Smith 
106639f9d9dSBarry Smith 
107639f9d9dSBarry Smith 
108