xref: /petsc/include/petscis.h (revision ca44d042d6f86ecc01fa7a52a5213a5161f95f53)
1*ca44d042SBarry Smith /* $Id: petscis.h,v 1.52 2000/05/08 15:09:50 balay 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 */
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;
19*ca44d042SBarry Smith EXTERN int   ISCreateGeneral(MPI_Comm,int,const int[],IS *);
20*ca44d042SBarry Smith EXTERN int   ISCreateBlock(MPI_Comm,int,int,const int[],IS *);
21*ca44d042SBarry Smith EXTERN int   ISCreateStride(MPI_Comm,int,int,int,IS *);
224b0e389bSBarry Smith 
23*ca44d042SBarry Smith EXTERN int   ISDestroy(IS);
244b0e389bSBarry Smith 
25*ca44d042SBarry Smith EXTERN int   ISSetPermutation(IS);
26*ca44d042SBarry Smith EXTERN int   ISPermutation(IS,PetscTruth*);
27*ca44d042SBarry Smith EXTERN int   ISSetIdentity(IS);
28*ca44d042SBarry Smith EXTERN int   ISIdentity(IS,PetscTruth*);
2908480c60SBarry Smith 
30*ca44d042SBarry Smith EXTERN int   ISGetIndices(IS,int *[]);
31*ca44d042SBarry Smith EXTERN int   ISRestoreIndices(IS,int *[]);
32*ca44d042SBarry Smith EXTERN int   ISGetSize(IS,int *);
33*ca44d042SBarry Smith EXTERN int   ISInvertPermutation(IS,int,IS*);
34*ca44d042SBarry Smith EXTERN int   ISView(IS,Viewer);
35*ca44d042SBarry Smith EXTERN int   ISEqual(IS,IS,PetscTruth *);
36*ca44d042SBarry Smith EXTERN int   ISSort(IS);
37*ca44d042SBarry Smith EXTERN int   ISSorted(IS,PetscTruth *);
38*ca44d042SBarry Smith EXTERN int   ISDifference(IS,IS,IS*);
39*ca44d042SBarry Smith EXTERN int   ISSum(IS,IS,IS*);
40612dd529SBarry Smith 
41*ca44d042SBarry Smith EXTERN int   ISBlock(IS,PetscTruth*);
42*ca44d042SBarry Smith EXTERN int   ISBlockGetIndices(IS,int *[]);
43*ca44d042SBarry Smith EXTERN int   ISBlockRestoreIndices(IS,int *[]);
44*ca44d042SBarry Smith EXTERN int   ISBlockGetSize(IS,int *);
45*ca44d042SBarry Smith EXTERN int   ISBlockGetBlockSize(IS,int *);
46c16cb8f2SBarry Smith 
47*ca44d042SBarry Smith EXTERN int   ISStride(IS,PetscTruth*);
48*ca44d042SBarry Smith EXTERN int   ISStrideGetInfo(IS,int *,int*);
49c16cb8f2SBarry Smith 
50*ca44d042SBarry Smith EXTERN int   ISStrideToGeneral(IS);
5138f40f24SLois Curfman McInnes 
52*ca44d042SBarry Smith EXTERN int   ISDuplicate(IS,IS*);
53*ca44d042SBarry 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 
70*ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingCreate(MPI_Comm,int,const int[],ISLocalToGlobalMapping*);
71*ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingCreateIS(IS,ISLocalToGlobalMapping *);
72*ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingView(ISLocalToGlobalMapping,Viewer);
73*ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingDestroy(ISLocalToGlobalMapping);
74*ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingApply(ISLocalToGlobalMapping,int,const int[],int[]);
75*ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingApplyIS(ISLocalToGlobalMapping,IS,IS*);
76*ca44d042SBarry 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 
92*ca44d042SBarry Smith EXTERN int ISColoringCreate(MPI_Comm,int,const int[],ISColoring*);
93*ca44d042SBarry Smith EXTERN int ISColoringDestroy(ISColoring);
94*ca44d042SBarry Smith EXTERN int ISColoringView(ISColoring,Viewer);
95*ca44d042SBarry Smith EXTERN int ISColoringGetIS(ISColoring,int*,IS*[]);
96639f9d9dSBarry Smith 
97dbef8a1cSBarry Smith /* --------------------------------------------------------------------------*/
98dbef8a1cSBarry Smith 
99*ca44d042SBarry Smith EXTERN int ISPartitioningToNumbering(IS,IS*);
100*ca44d042SBarry Smith EXTERN int ISPartitioningCount(IS,int[]);
101dbef8a1cSBarry Smith 
102a2ce50c7SBarry Smith #endif
1037588ac45SBarry Smith 
1047588ac45SBarry Smith 
105639f9d9dSBarry Smith 
106639f9d9dSBarry Smith 
107