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