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*2f2e5d10SKris Buschelman extern PetscCookie PETSCDM_DLLEXPORT AO_COOKIE, AODATA_COOKIE; 276849ba73SBarry Smith extern PetscEvent AO_PetscToApplication, AO_ApplicationToPetsc; 288ba1e511SMatthew Knepley 29*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMInitializePackage(const char[]); 308ba1e511SMatthew Knepley 31*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOCreateBasic(MPI_Comm,PetscInt,const PetscInt[],const PetscInt[],AO*); 32*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOCreateBasicIS(IS,IS,AO*); 337588ac45SBarry Smith 34*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOCreateMapping(MPI_Comm,PetscInt,const PetscInt[],const PetscInt[],AO*); 35*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOCreateMappingIS(IS,IS,AO*); 364ebda54eSMatthew Knepley 37*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOView(AO,PetscViewer); 38*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODestroy(AO); 394ebda54eSMatthew Knepley 40*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT 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 47*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOPetscToApplication(AO,PetscInt,PetscInt[]); 48*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOApplicationToPetsc(AO,PetscInt,PetscInt[]); 49*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOPetscToApplicationIS(AO,IS); 50*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOApplicationToPetscIS(AO,IS); 517588ac45SBarry Smith 52*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOPetscToApplicationPermuteInt(AO, PetscInt, PetscInt[]); 53*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOApplicationToPetscPermuteInt(AO, PetscInt, PetscInt[]); 54*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOPetscToApplicationPermuteReal(AO, PetscInt, PetscReal[]); 55*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOApplicationToPetscPermuteReal(AO, PetscInt, PetscReal[]); 564ebda54eSMatthew Knepley 57*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOMappingHasApplicationIndex(AO, PetscInt, PetscTruth *); 58*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOMappingHasPetscIndex(AO, PetscInt, 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 74*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataCreateBasic(MPI_Comm,AOData *); 75*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataView(AOData,PetscViewer); 76*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataDestroy(AOData); 77*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataLoadBasic(PetscViewer,AOData *); 78*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataGetInfo(AOData,PetscInt*,char ***); 7931b6eecaSBarry Smith 80*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyAdd(AOData,const char[],PetscInt,PetscInt); 81*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyRemove(AOData,const char[]); 82b2487710SBarry Smith 83*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeySetLocalToGlobalMapping(AOData,const char[],ISLocalToGlobalMapping); 84*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetLocalToGlobalMapping(AOData,const char[],ISLocalToGlobalMapping*); 85*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyRemap(AOData,const char[],AO); 8631b6eecaSBarry Smith 87*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyExists(AOData,const char[],PetscTruth*); 88*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetInfo(AOData,const char[],PetscInt *,PetscInt*,PetscInt*,char***); 89*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetOwnershipRange(AOData,const char[],PetscInt *,PetscInt*); 90ea06a074SBarry Smith 91*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetNeighbors(AOData,const char[],PetscInt,PetscInt*,IS *); 92*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetNeighborsIS(AOData,const char[],IS,IS *); 93*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetAdjacency(AOData,const char[],Mat*); 94ea06a074SBarry Smith 95*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetActive(AOData,const char[],const char[],PetscInt,PetscInt *,PetscInt,IS*); 96*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetActiveIS(AOData,const char[],const char[],IS,PetscInt,IS*); 97*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetActiveLocal(AOData,const char[],const char[],PetscInt,PetscInt *,PetscInt,IS*); 98*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetActiveLocalIS(AOData,const char[],const char[],IS,PetscInt,IS*); 9935c17c5bSBarry Smith 100*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyPartition(AOData,const char[]); 101ea06a074SBarry Smith 102*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentAdd(AOData,const char[],const char[],PetscInt,PetscInt,PetscInt *,void *,PetscDataType); 103*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentRemove(AOData,const char[],const char[]); 104*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentAddIS(AOData,const char[],const char[],PetscInt,IS,void *,PetscDataType); 10531b6eecaSBarry Smith 106*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentExists(AOData,const char[],const char[],PetscTruth*); 107*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetInfo(AOData,const char[],const char[],PetscInt *,PetscDataType*); 10831b6eecaSBarry Smith 109*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGet(AOData,const char[],const char[],PetscInt,PetscInt*,void **); 110*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentRestore(AOData,const char[],const char[],PetscInt,PetscInt*,void **); 111*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetIS(AOData,const char[],const char[],IS,void **); 112*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentRestoreIS(AOData,const char[],const char[],IS,void **); 11331b6eecaSBarry Smith 114*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetLocal(AOData,const char[],const char[],PetscInt,PetscInt*,void **); 115*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentRestoreLocal(AOData,const char[],const char[],PetscInt,PetscInt*,void **); 116*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetLocalIS(AOData,const char[],const char[],IS,void **); 117*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentRestoreLocalIS(AOData,const char[],const char[],IS,void **); 1182bdab257SBarry Smith 119*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetReduced(AOData,const char[],const char[],PetscInt,PetscInt*,IS *); 120*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetReducedIS(AOData,const char[],const char[],IS,IS *); 121*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetExtrema(AOData,const char[],const char[],void *,void *); 122e852ff30SBarry Smith 123*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentPartition(AOData,const char[],const char[]); 1242bdab257SBarry Smith 125*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataPartitionAndSetupLocal(AOData,const char[],const char[],IS*,IS*,ISLocalToGlobalMapping*); 126*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataAliasAdd(AOData,const char[],const char[]); 1271ec7a0b9SBarry Smith 1281ec7a0b9SBarry Smith 1291ec7a0b9SBarry Smith typedef struct _p_AOData2dGrid *AOData2dGrid; 130*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridAddNode(AOData2dGrid, PetscReal, PetscReal, PetscInt *); 131*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridInput(AOData2dGrid,PetscDraw); 132*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridFlipCells(AOData2dGrid); 133*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridComputeNeighbors(AOData2dGrid); 134*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridComputeVertexBoundary(AOData2dGrid); 135*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridDraw(AOData2dGrid,PetscDraw); 136*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridDestroy(AOData2dGrid); 137*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridCreate(AOData2dGrid*); 138*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridToAOData(AOData2dGrid,AOData*); 1391ec7a0b9SBarry Smith 140e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 1417588ac45SBarry Smith #endif 142