1*38f40f24SLois Curfman McInnes /* $Id: is.h,v 1.44 1998/04/24 02:18:23 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 50*38f40f24SLois Curfman McInnes extern int ISStrideToGeneral(IS); 51*38f40f24SLois Curfman McInnes 52d4bb536fSBarry Smith extern int ISDuplicate(IS, IS*); 53d64ed03dSBarry 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 63d4bb536fSBarry 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; 6890f02eecSBarry Smith 69d4bb536fSBarry Smith extern int ISLocalToGlobalMappingCreate(MPI_Comm,int, int*, ISLocalToGlobalMapping*); 702bdab257SBarry Smith extern int ISLocalToGlobalMappingCreateIS(IS,ISLocalToGlobalMapping *); 71ea06a074SBarry Smith extern int ISLocalToGlobalMappingView(ISLocalToGlobalMapping,Viewer); 7290f02eecSBarry Smith extern int ISLocalToGlobalMappingDestroy(ISLocalToGlobalMapping); 73d4bb536fSBarry Smith extern int ISLocalToGlobalMappingApply(ISLocalToGlobalMapping,int,int*,int *); 7490f02eecSBarry Smith extern int ISLocalToGlobalMappingApplyIS(ISLocalToGlobalMapping,IS,IS*); 75d4bb536fSBarry Smith typedef enum {IS_GTOLM_MASK,IS_GTOLM_DROP} ISGlobalToLocalMappingType; 76d4bb536fSBarry Smith extern int ISGlobalToLocalMappingApply(ISLocalToGlobalMapping,ISGlobalToLocalMappingType, 77d4bb536fSBarry Smith int,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 92639f9d9dSBarry Smith extern int ISColoringDestroy(ISColoring); 93639f9d9dSBarry Smith extern int ISColoringView(ISColoring,Viewer); 94639f9d9dSBarry Smith extern int ISColoringCreate(MPI_Comm,int,int*,ISColoring*); 95639f9d9dSBarry Smith 96dbef8a1cSBarry Smith /* --------------------------------------------------------------------------*/ 97dbef8a1cSBarry Smith 98ca161407SBarry Smith extern int ISPartitioningToNumbering(IS,IS*); 9998a79cdbSBarry Smith extern int ISPartitioningCount(IS,int *); 100dbef8a1cSBarry Smith 101a2ce50c7SBarry Smith #endif 1027588ac45SBarry Smith 1037588ac45SBarry Smith 104639f9d9dSBarry Smith 105639f9d9dSBarry Smith 106