1230e2716SBarry Smith /* 230127c82SLois Curfman McInnes An application ordering is mapping between an application-centric 330127c82SLois Curfman McInnes ordering (the ordering that is "natural" for the application) and 47588ac45SBarry Smith the parallel ordering that PETSc uses. 57588ac45SBarry Smith */ 60a835dfdSSatish Balay #if !defined(__PETSCAO_H) 70a835dfdSSatish Balay #define __PETSCAO_H 80a835dfdSSatish Balay #include "petscis.h" 90a835dfdSSatish Balay #include "petscmat.h" 10e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN 117588ac45SBarry Smith 124ebda54eSMatthew Knepley typedef enum {AO_BASIC=0, AO_ADVANCED, AO_MAPPING, AO_NEW} AOType; 137588ac45SBarry Smith 14b9617806SBarry Smith /*S 15b9617806SBarry Smith AO - Abstract PETSc object that manages mapping between different global numbering 16b9617806SBarry Smith 17b9617806SBarry Smith Level: intermediate 18b9617806SBarry Smith 19b9617806SBarry Smith Concepts: global numbering 20b9617806SBarry Smith 21b9617806SBarry Smith .seealso: AOCreateBasic(), AOCreateBasicIS(), AOPetscToApplication(), AOView() 22b9617806SBarry Smith S*/ 231ac94ccfSSatish Balay typedef struct _p_AO* AO; 247588ac45SBarry Smith 258ba1e511SMatthew Knepley /* Logging support */ 26*6849ba73SBarry Smith extern PetscCookie AO_COOKIE, AODATA_COOKIE; 27*6849ba73SBarry Smith extern PetscEvent AO_PetscToApplication, AO_ApplicationToPetsc; 288ba1e511SMatthew Knepley 29dfbe8321SBarry Smith EXTERN PetscErrorCode DMInitializePackage(const char[]); 308ba1e511SMatthew Knepley 31dfbe8321SBarry Smith EXTERN PetscErrorCode AOCreateBasic(MPI_Comm,int,const int[],const int[],AO*); 32dfbe8321SBarry Smith EXTERN PetscErrorCode AOCreateBasicIS(IS,IS,AO*); 337588ac45SBarry Smith 34dfbe8321SBarry Smith EXTERN PetscErrorCode AOCreateMapping(MPI_Comm,int,const int[],const int[],AO*); 35dfbe8321SBarry Smith EXTERN PetscErrorCode AOCreateMappingIS(IS,IS,AO*); 364ebda54eSMatthew Knepley 37dfbe8321SBarry Smith EXTERN PetscErrorCode AOView(AO,PetscViewer); 38dfbe8321SBarry Smith EXTERN PetscErrorCode AODestroy(AO); 394ebda54eSMatthew Knepley 40*6849ba73SBarry Smith EXTERN PetscErrorCode AORegister_Private(const char [], const char [], const char [], PetscErrorCode (*)(AO)); 414ebda54eSMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 424ebda54eSMatthew Knepley #define AORegister(a,b,c,d) AORegister_Private(a,b,c,0) 434ebda54eSMatthew Knepley #else 444ebda54eSMatthew Knepley #define AORegister(a,b,c,d) AORegister_Private(a,b,c,d) 454ebda54eSMatthew Knepley #endif 464ebda54eSMatthew Knepley 47dfbe8321SBarry Smith EXTERN PetscErrorCode AOPetscToApplication(AO,int,int[]); 48dfbe8321SBarry Smith EXTERN PetscErrorCode AOApplicationToPetsc(AO,int,int[]); 49dfbe8321SBarry Smith EXTERN PetscErrorCode AOPetscToApplicationIS(AO,IS); 50dfbe8321SBarry Smith EXTERN PetscErrorCode AOApplicationToPetscIS(AO,IS); 517588ac45SBarry Smith 52dfbe8321SBarry Smith EXTERN PetscErrorCode AOPetscToApplicationPermuteInt(AO, int, int[]); 53dfbe8321SBarry Smith EXTERN PetscErrorCode AOApplicationToPetscPermuteInt(AO, int, int[]); 54dfbe8321SBarry Smith EXTERN PetscErrorCode AOPetscToApplicationPermuteReal(AO, int, double[]); 55dfbe8321SBarry Smith EXTERN PetscErrorCode AOApplicationToPetscPermuteReal(AO, int, double[]); 564ebda54eSMatthew Knepley 57dfbe8321SBarry Smith EXTERN PetscErrorCode AOMappingHasApplicationIndex(AO, int, PetscTruth *); 58dfbe8321SBarry Smith EXTERN PetscErrorCode AOMappingHasPetscIndex(AO, int, PetscTruth *); 597588ac45SBarry Smith 60376ee591SBarry Smith /* ----------------------------------------------------*/ 61376ee591SBarry Smith 620752156aSBarry Smith typedef enum {AODATA_BASIC=0,AODATA_ADVANCED=1} AODataType; 63376ee591SBarry Smith 64b9617806SBarry Smith /*S 65b9617806SBarry Smith AOData - Abstract PETSc object that manages complex parallel data structures intended to 66b9617806SBarry Smith hold grid information, etc 67b9617806SBarry Smith 68b9617806SBarry Smith Level: advanced 69b9617806SBarry Smith 70b9617806SBarry Smith .seealso: AODataCreateBasic() 71b9617806SBarry Smith S*/ 720752156aSBarry Smith typedef struct _p_AOData* AOData; 730752156aSBarry Smith 74dfbe8321SBarry Smith EXTERN PetscErrorCode AODataCreateBasic(MPI_Comm,AOData *); 75dfbe8321SBarry Smith EXTERN PetscErrorCode AODataView(AOData,PetscViewer); 76dfbe8321SBarry Smith EXTERN PetscErrorCode AODataDestroy(AOData); 77dfbe8321SBarry Smith EXTERN PetscErrorCode AODataLoadBasic(PetscViewer,AOData *); 78dfbe8321SBarry Smith EXTERN PetscErrorCode AODataGetInfo(AOData,int*,char ***); 7931b6eecaSBarry Smith 80dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyAdd(AOData,const char[],int,int); 81dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyRemove(AOData,const char[]); 82b2487710SBarry Smith 83dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeySetLocalToGlobalMapping(AOData,const char[],ISLocalToGlobalMapping); 84dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyGetLocalToGlobalMapping(AOData,const char[],ISLocalToGlobalMapping*); 85dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyRemap(AOData,const char[],AO); 8631b6eecaSBarry Smith 87dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyExists(AOData,const char[],PetscTruth*); 88dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyGetInfo(AOData,const char[],int *,int*,int*,char***); 89dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyGetOwnershipRange(AOData,const char[],int *,int*); 90ea06a074SBarry Smith 91dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyGetNeighbors(AOData,const char[],int,int*,IS *); 92dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyGetNeighborsIS(AOData,const char[],IS,IS *); 93dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyGetAdjacency(AOData,const char[],Mat*); 94ea06a074SBarry Smith 95dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyGetActive(AOData,const char[],const char[],int,int *,int,IS*); 96dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyGetActiveIS(AOData,const char[],const char[],IS,int,IS*); 97dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyGetActiveLocal(AOData,const char[],const char[],int,int *,int,IS*); 98dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyGetActiveLocalIS(AOData,const char[],const char[],IS,int,IS*); 9935c17c5bSBarry Smith 100dfbe8321SBarry Smith EXTERN PetscErrorCode AODataKeyPartition(AOData,const char[]); 101ea06a074SBarry Smith 102dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentAdd(AOData,const char[],const char[],int,int,int *,void *,PetscDataType); 103dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentRemove(AOData,const char[],const char[]); 104dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentAddIS(AOData,const char[],const char[],int,IS,void *,PetscDataType); 10531b6eecaSBarry Smith 106dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentExists(AOData,const char[],const char[],PetscTruth*); 107dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentGetInfo(AOData,const char[],const char[],int *,PetscDataType*); 10831b6eecaSBarry Smith 109dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentGet(AOData,const char[],const char[],int,int*,void **); 110dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentRestore(AOData,const char[],const char[],int,int*,void **); 111dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentGetIS(AOData,const char[],const char[],IS,void **); 112dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentRestoreIS(AOData,const char[],const char[],IS,void **); 11331b6eecaSBarry Smith 114dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentGetLocal(AOData,const char[],const char[],int,int*,void **); 115dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentRestoreLocal(AOData,const char[],const char[],int,int*,void **); 116dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentGetLocalIS(AOData,const char[],const char[],IS,void **); 117dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentRestoreLocalIS(AOData,const char[],const char[],IS,void **); 1182bdab257SBarry Smith 119dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentGetReduced(AOData,const char[],const char[],int,int*,IS *); 120dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentGetReducedIS(AOData,const char[],const char[],IS,IS *); 121dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentGetExtrema(AOData,const char[],const char[],void *,void *); 122e852ff30SBarry Smith 123dfbe8321SBarry Smith EXTERN PetscErrorCode AODataSegmentPartition(AOData,const char[],const char[]); 1242bdab257SBarry Smith 125dfbe8321SBarry Smith EXTERN PetscErrorCode AODataPartitionAndSetupLocal(AOData,const char[],const char[],IS*,IS*,ISLocalToGlobalMapping*); 126dfbe8321SBarry Smith EXTERN PetscErrorCode AODataAliasAdd(AOData,const char[],const char[]); 1271ec7a0b9SBarry Smith 1281ec7a0b9SBarry Smith 1291ec7a0b9SBarry Smith typedef struct _p_AOData2dGrid *AOData2dGrid; 130dfbe8321SBarry Smith EXTERN PetscErrorCode AOData2dGridAddNode(AOData2dGrid, PetscReal, PetscReal, int *); 131dfbe8321SBarry Smith EXTERN PetscErrorCode AOData2dGridInput(AOData2dGrid,PetscDraw); 132dfbe8321SBarry Smith EXTERN PetscErrorCode AOData2dGridFlipCells(AOData2dGrid); 133dfbe8321SBarry Smith EXTERN PetscErrorCode AOData2dGridComputeNeighbors(AOData2dGrid); 134dfbe8321SBarry Smith EXTERN PetscErrorCode AOData2dGridComputeVertexBoundary(AOData2dGrid); 135dfbe8321SBarry Smith EXTERN PetscErrorCode AOData2dGridDraw(AOData2dGrid,PetscDraw); 136dfbe8321SBarry Smith EXTERN PetscErrorCode AOData2dGridDestroy(AOData2dGrid); 137dfbe8321SBarry Smith EXTERN PetscErrorCode AOData2dGridCreate(AOData2dGrid*); 138dfbe8321SBarry Smith EXTERN PetscErrorCode AOData2dGridToAOData(AOData2dGrid,AOData*); 1391ec7a0b9SBarry Smith 140e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 1417588ac45SBarry Smith #endif 142