xref: /petsc/include/petscis.h (revision 05e11b22cf0df0a3cc749c321a2cf60a02b408ab)
1*05e11b22SBarry Smith /* $Id: petscis.h,v 1.54 2000/05/24 22:17:59 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;
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 *);
33*05e11b22SBarry Smith EXTERN int   ISGetLocalSize(IS,int *);
34ca44d042SBarry Smith EXTERN int   ISInvertPermutation(IS,int,IS*);
35ca44d042SBarry Smith EXTERN int   ISView(IS,Viewer);
36ca44d042SBarry Smith EXTERN int   ISEqual(IS,IS,PetscTruth *);
37ca44d042SBarry Smith EXTERN int   ISSort(IS);
38ca44d042SBarry Smith EXTERN int   ISSorted(IS,PetscTruth *);
39ca44d042SBarry Smith EXTERN int   ISDifference(IS,IS,IS*);
40ca44d042SBarry Smith EXTERN int   ISSum(IS,IS,IS*);
41612dd529SBarry Smith 
42ca44d042SBarry Smith EXTERN int   ISBlock(IS,PetscTruth*);
43ca44d042SBarry Smith EXTERN int   ISBlockGetIndices(IS,int *[]);
44ca44d042SBarry Smith EXTERN int   ISBlockRestoreIndices(IS,int *[]);
45ca44d042SBarry Smith EXTERN int   ISBlockGetSize(IS,int *);
46ca44d042SBarry Smith EXTERN int   ISBlockGetBlockSize(IS,int *);
47c16cb8f2SBarry Smith 
48ca44d042SBarry Smith EXTERN int   ISStride(IS,PetscTruth*);
49ca44d042SBarry Smith EXTERN int   ISStrideGetInfo(IS,int *,int*);
50c16cb8f2SBarry Smith 
51ca44d042SBarry Smith EXTERN int   ISStrideToGeneral(IS);
5238f40f24SLois Curfman McInnes 
53ca44d042SBarry Smith EXTERN int   ISDuplicate(IS,IS*);
54ca44d042SBarry Smith EXTERN int   ISAllGather(IS,IS*);
55d64ed03dSBarry Smith 
5656cd22aeSBarry Smith /* --------------------------------------------------------------------------*/
5756cd22aeSBarry Smith 
58639f9d9dSBarry Smith /*
5990f02eecSBarry Smith    ISLocalToGlobalMappings are mappings from an arbitrary
6090f02eecSBarry Smith   local ordering from 0 to n-1 to a global PETSc ordering
61d4bb536fSBarry Smith   used by a vector or matrix.
62d4bb536fSBarry Smith 
63d4bb536fSBarry Smith    Note: mapping from Local to Global is scalable; but Global
64eec0b4cfSBarry Smith   to Local may not be if the range of global values represented locally
65d4bb536fSBarry Smith   is very large.
6690f02eecSBarry Smith */
67d4bb536fSBarry Smith #define IS_LTOGM_COOKIE PETSC_COOKIE+12
68f09e8eb9SSatish Balay typedef struct _p_ISLocalToGlobalMapping* ISLocalToGlobalMapping;
69987e4450SSatish Balay typedef enum {IS_GTOLM_MASK,IS_GTOLM_DROP} ISGlobalToLocalMappingType;
7090f02eecSBarry Smith 
71ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingCreate(MPI_Comm,int,const int[],ISLocalToGlobalMapping*);
72ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingCreateIS(IS,ISLocalToGlobalMapping *);
73ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingView(ISLocalToGlobalMapping,Viewer);
74ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingDestroy(ISLocalToGlobalMapping);
75ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingApply(ISLocalToGlobalMapping,int,const int[],int[]);
76ca44d042SBarry Smith EXTERN int ISLocalToGlobalMappingApplyIS(ISLocalToGlobalMapping,IS,IS*);
77ca44d042SBarry Smith EXTERN int ISGlobalToLocalMappingApply(ISLocalToGlobalMapping,ISGlobalToLocalMappingType,
78987e4450SSatish Balay                                        int,const int[],int*,int[]);
7990f02eecSBarry Smith 
8056cd22aeSBarry Smith /* --------------------------------------------------------------------------*/
8156cd22aeSBarry Smith 
8290f02eecSBarry Smith /*
83639f9d9dSBarry Smith      ISColorings are sets of IS's that define a coloring
84639f9d9dSBarry Smith    of the underlying indices
85639f9d9dSBarry Smith */
86f09e8eb9SSatish Balay struct _p_ISColoring {
87639f9d9dSBarry Smith   int      n;
88639f9d9dSBarry Smith   IS       *is;
89639f9d9dSBarry Smith   MPI_Comm comm;
90639f9d9dSBarry Smith };
91f09e8eb9SSatish Balay typedef struct _p_ISColoring* ISColoring;
92639f9d9dSBarry Smith 
93ca44d042SBarry Smith EXTERN int ISColoringCreate(MPI_Comm,int,const int[],ISColoring*);
94ca44d042SBarry Smith EXTERN int ISColoringDestroy(ISColoring);
95ca44d042SBarry Smith EXTERN int ISColoringView(ISColoring,Viewer);
96ca44d042SBarry Smith EXTERN int ISColoringGetIS(ISColoring,int*,IS*[]);
9722327b12SSatish Balay EXTERN int ISColoringRestoreIS(ISColoring,IS*[]);
98639f9d9dSBarry Smith 
99dbef8a1cSBarry Smith /* --------------------------------------------------------------------------*/
100dbef8a1cSBarry Smith 
101ca44d042SBarry Smith EXTERN int ISPartitioningToNumbering(IS,IS*);
102ca44d042SBarry Smith EXTERN int ISPartitioningCount(IS,int[]);
103dbef8a1cSBarry Smith 
104a2ce50c7SBarry Smith #endif
1057588ac45SBarry Smith 
1067588ac45SBarry Smith 
107639f9d9dSBarry Smith 
108639f9d9dSBarry Smith 
109