173f4d377SMatthew Knepley /* $Id: petscao.h,v 1.27 2001/08/07 21:31:33 bsmith Exp $ */ 27588ac45SBarry Smith 3230e2716SBarry Smith /* 430127c82SLois Curfman McInnes An application ordering is mapping between an application-centric 530127c82SLois Curfman McInnes ordering (the ordering that is "natural" for the application) and 67588ac45SBarry Smith the parallel ordering that PETSc uses. 77588ac45SBarry Smith */ 80a835dfdSSatish Balay #if !defined(__PETSCAO_H) 90a835dfdSSatish Balay #define __PETSCAO_H 100a835dfdSSatish Balay #include "petscis.h" 110a835dfdSSatish Balay #include "petscmat.h" 12*e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN 137588ac45SBarry Smith 144ebda54eSMatthew Knepley typedef enum {AO_BASIC=0, AO_ADVANCED, AO_MAPPING, AO_NEW} AOType; 157588ac45SBarry Smith 16b9617806SBarry Smith /*S 17b9617806SBarry Smith AO - Abstract PETSc object that manages mapping between different global numbering 18b9617806SBarry Smith 19b9617806SBarry Smith Level: intermediate 20b9617806SBarry Smith 21b9617806SBarry Smith Concepts: global numbering 22b9617806SBarry Smith 23b9617806SBarry Smith .seealso: AOCreateBasic(), AOCreateBasicIS(), AOPetscToApplication(), AOView() 24b9617806SBarry Smith S*/ 251ac94ccfSSatish Balay typedef struct _p_AO* AO; 267588ac45SBarry Smith 274ebda54eSMatthew Knepley #define AO_SER_BASIC_BINARY "basic_binary" 284ebda54eSMatthew Knepley #define AO_SER_MAPPING_BINARY "mapping_binary" 294ebda54eSMatthew Knepley typedef char *AOSerializeType; 304ebda54eSMatthew Knepley 318ba1e511SMatthew Knepley /* Logging support */ 328ba1e511SMatthew Knepley extern int AO_COOKIE; 338ba1e511SMatthew Knepley extern int AODATA_COOKIE; 348ba1e511SMatthew Knepley enum {AO_PetscToApplication, AO_ApplicationToPetsc, AO_MAX_EVENTS}; 358ba1e511SMatthew Knepley extern int AOEvents[AO_MAX_EVENTS]; 368ba1e511SMatthew Knepley #define AOLogEventBegin(e,o1,o2,o3,o4) PetscLogEventBegin(AOEvents[e],o1,o2,o3,o4) 378ba1e511SMatthew Knepley #define AOLogEventEnd(e,o1,o2,o3,o4) PetscLogEventEnd(AOEvents[e],o1,o2,o3,o4) 388ba1e511SMatthew Knepley 398ba1e511SMatthew Knepley EXTERN int DMInitializePackage(char *); 408ba1e511SMatthew Knepley 41707b6823SBarry Smith EXTERN int AOCreateBasic(MPI_Comm,int,const int[],const int[],AO*); 42ca44d042SBarry Smith EXTERN int AOCreateBasicIS(IS,IS,AO*); 437588ac45SBarry Smith 44707b6823SBarry Smith EXTERN int AOCreateMapping(MPI_Comm,int,const int[],const int[],AO*); 454ebda54eSMatthew Knepley EXTERN int AOCreateMappingIS(IS,IS,AO*); 464ebda54eSMatthew Knepley 474ebda54eSMatthew Knepley EXTERN int AOView(AO,PetscViewer); 484ebda54eSMatthew Knepley EXTERN int AODestroy(AO); 494ebda54eSMatthew Knepley 504ebda54eSMatthew Knepley EXTERN PetscFList AOSerializeList; 514ebda54eSMatthew Knepley EXTERN int AOSerializeRegisterAll(const char []); 5265804fbbSSatish Balay EXTERN int AOSerializeRegisterDestroy(void); 534ebda54eSMatthew Knepley EXTERN int AOSerializeRegisterAllCalled; 544ebda54eSMatthew Knepley EXTERN int AOSerialize(MPI_Comm, AO *, PetscViewer, PetscTruth); 554ebda54eSMatthew Knepley EXTERN int AOSetSerializeType(AO, AOSerializeType); 564ebda54eSMatthew Knepley 574ebda54eSMatthew Knepley EXTERN int AORegister_Private(const char [], const char [], const char [], int (*)(AO)); 584ebda54eSMatthew Knepley EXTERN int AOSerializeRegister_Private(const char [], const char [], const char [], int (*)(MPI_Comm, AO *, PetscViewer, PetscTruth)); 594ebda54eSMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 604ebda54eSMatthew Knepley #define AORegister(a,b,c,d) AORegister_Private(a,b,c,0) 614ebda54eSMatthew Knepley #define AOSerializeRegister(a,b,c,d) AOSerializeRegister_Private(a,b,c,0) 624ebda54eSMatthew Knepley #else 634ebda54eSMatthew Knepley #define AORegister(a,b,c,d) AORegister_Private(a,b,c,d) 644ebda54eSMatthew Knepley #define AOSerializeRegister(a,b,c,d) AOSerializeRegister_Private(a,b,c,d) 654ebda54eSMatthew Knepley #endif 664ebda54eSMatthew Knepley 67707b6823SBarry Smith EXTERN int AOPetscToApplication(AO,int,int[]); 68707b6823SBarry Smith EXTERN int AOApplicationToPetsc(AO,int,int[]); 69ca44d042SBarry Smith EXTERN int AOPetscToApplicationIS(AO,IS); 70ca44d042SBarry Smith EXTERN int AOApplicationToPetscIS(AO,IS); 717588ac45SBarry Smith 72707b6823SBarry Smith EXTERN int AOPetscToApplicationPermuteInt(AO, int, int[]); 73707b6823SBarry Smith EXTERN int AOApplicationToPetscPermuteInt(AO, int, int[]); 74707b6823SBarry Smith EXTERN int AOPetscToApplicationPermuteReal(AO, int, double[]); 75707b6823SBarry Smith EXTERN int AOApplicationToPetscPermuteReal(AO, int, double[]); 764ebda54eSMatthew Knepley 774ebda54eSMatthew Knepley EXTERN int AOMappingHasApplicationIndex(AO, int, PetscTruth *); 784ebda54eSMatthew Knepley EXTERN int AOMappingHasPetscIndex(AO, int, PetscTruth *); 797588ac45SBarry Smith 80376ee591SBarry Smith /* ----------------------------------------------------*/ 81376ee591SBarry Smith 820752156aSBarry Smith typedef enum {AODATA_BASIC=0,AODATA_ADVANCED=1} AODataType; 83376ee591SBarry Smith 84b9617806SBarry Smith /*S 85b9617806SBarry Smith AOData - Abstract PETSc object that manages complex parallel data structures intended to 86b9617806SBarry Smith hold grid information, etc 87b9617806SBarry Smith 88b9617806SBarry Smith Level: advanced 89b9617806SBarry Smith 90b9617806SBarry Smith .seealso: AODataCreateBasic() 91b9617806SBarry Smith S*/ 920752156aSBarry Smith typedef struct _p_AOData* AOData; 930752156aSBarry Smith 94ca44d042SBarry Smith EXTERN int AODataCreateBasic(MPI_Comm,AOData *); 95b0a32e0cSBarry Smith EXTERN int AODataView(AOData,PetscViewer); 96ca44d042SBarry Smith EXTERN int AODataDestroy(AOData); 97b0a32e0cSBarry Smith EXTERN int AODataLoadBasic(PetscViewer,AOData *); 98ca44d042SBarry Smith EXTERN int AODataGetInfo(AOData,int*,char ***); 9931b6eecaSBarry Smith 100ca44d042SBarry Smith EXTERN int AODataKeyAdd(AOData,char*,int,int); 101ca44d042SBarry Smith EXTERN int AODataKeyRemove(AOData,char*); 102b2487710SBarry Smith 103ca44d042SBarry Smith EXTERN int AODataKeySetLocalToGlobalMapping(AOData,char*,ISLocalToGlobalMapping); 104ca44d042SBarry Smith EXTERN int AODataKeyGetLocalToGlobalMapping(AOData,char*,ISLocalToGlobalMapping*); 105ca44d042SBarry Smith EXTERN int AODataKeyRemap(AOData,char *,AO); 10631b6eecaSBarry Smith 107ca44d042SBarry Smith EXTERN int AODataKeyExists(AOData,char*,PetscTruth*); 108ca44d042SBarry Smith EXTERN int AODataKeyGetInfo(AOData,char *,int *,int*,int*,char***); 109ca44d042SBarry Smith EXTERN int AODataKeyGetOwnershipRange(AOData,char *,int *,int*); 110ea06a074SBarry Smith 111ca44d042SBarry Smith EXTERN int AODataKeyGetNeighbors(AOData,char *,int,int*,IS *); 112ca44d042SBarry Smith EXTERN int AODataKeyGetNeighborsIS(AOData,char *,IS,IS *); 113ca44d042SBarry Smith EXTERN int AODataKeyGetAdjacency(AOData,char *,Mat*); 114ea06a074SBarry Smith 115ca44d042SBarry Smith EXTERN int AODataKeyGetActive(AOData,char*,char*,int,int *,int,IS*); 116ca44d042SBarry Smith EXTERN int AODataKeyGetActiveIS(AOData,char*,char*,IS,int,IS*); 117ca44d042SBarry Smith EXTERN int AODataKeyGetActiveLocal(AOData,char*,char*,int,int *,int,IS*); 118ca44d042SBarry Smith EXTERN int AODataKeyGetActiveLocalIS(AOData,char*,char*,IS,int,IS*); 11935c17c5bSBarry Smith 120ca44d042SBarry Smith EXTERN int AODataKeyPartition(AOData,char *); 121ea06a074SBarry Smith 122ca44d042SBarry Smith EXTERN int AODataSegmentAdd(AOData,char*,char *,int,int,int *,void *,PetscDataType); 123ca44d042SBarry Smith EXTERN int AODataSegmentRemove(AOData,char *,char *); 124ca44d042SBarry Smith EXTERN int AODataSegmentAddIS(AOData,char*,char *,int,IS,void *,PetscDataType); 12531b6eecaSBarry Smith 126ca44d042SBarry Smith EXTERN int AODataSegmentExists(AOData,char*,char*,PetscTruth*); 127ca44d042SBarry Smith EXTERN int AODataSegmentGetInfo(AOData,char *,char *,int *,PetscDataType*); 12831b6eecaSBarry Smith 129ca44d042SBarry Smith EXTERN int AODataSegmentGet(AOData,char *,char *,int,int*,void **); 130ca44d042SBarry Smith EXTERN int AODataSegmentRestore(AOData,char *,char *,int,int*,void **); 131ca44d042SBarry Smith EXTERN int AODataSegmentGetIS(AOData,char *,char *,IS,void **); 132ca44d042SBarry Smith EXTERN int AODataSegmentRestoreIS(AOData,char *,char *,IS,void **); 13331b6eecaSBarry Smith 134ca44d042SBarry Smith EXTERN int AODataSegmentGetLocal(AOData,char *,char *,int,int*,void **); 135ca44d042SBarry Smith EXTERN int AODataSegmentRestoreLocal(AOData,char *,char *,int,int*,void **); 136ca44d042SBarry Smith EXTERN int AODataSegmentGetLocalIS(AOData,char *,char *,IS,void **); 137ca44d042SBarry Smith EXTERN int AODataSegmentRestoreLocalIS(AOData,char *,char *,IS,void **); 1382bdab257SBarry Smith 139ca44d042SBarry Smith EXTERN int AODataSegmentGetReduced(AOData,char *,char *,int,int*,IS *); 140ca44d042SBarry Smith EXTERN int AODataSegmentGetReducedIS(AOData,char *,char *,IS,IS *); 141ca44d042SBarry Smith EXTERN int AODataSegmentGetExtrema(AOData,char*,char*,void *,void *); 142e852ff30SBarry Smith 143ca44d042SBarry Smith EXTERN int AODataSegmentPartition(AOData,char *,char *); 1442bdab257SBarry Smith 145ca44d042SBarry Smith EXTERN int AODataPartitionAndSetupLocal(AOData,char*,char*,IS*,IS*,ISLocalToGlobalMapping*); 146ca44d042SBarry Smith EXTERN int AODataAliasAdd(AOData,char *,char *); 1471ec7a0b9SBarry Smith 1481ec7a0b9SBarry Smith 1491ec7a0b9SBarry Smith typedef struct _p_AOData2dGrid *AOData2dGrid; 150f6275e2eSBarry Smith EXTERN int AOData2dGridAddNode(AOData2dGrid, PetscReal, PetscReal, int *); 151b0a32e0cSBarry Smith EXTERN int AOData2dGridInput(AOData2dGrid,PetscDraw); 152ca44d042SBarry Smith EXTERN int AOData2dGridFlipCells(AOData2dGrid); 153ca44d042SBarry Smith EXTERN int AOData2dGridComputeNeighbors(AOData2dGrid); 154ca44d042SBarry Smith EXTERN int AOData2dGridComputeVertexBoundary(AOData2dGrid); 155b0a32e0cSBarry Smith EXTERN int AOData2dGridDraw(AOData2dGrid,PetscDraw); 156ca44d042SBarry Smith EXTERN int AOData2dGridDestroy(AOData2dGrid); 157ca44d042SBarry Smith EXTERN int AOData2dGridCreate(AOData2dGrid*); 158ca44d042SBarry Smith EXTERN int AOData2dGridToAOData(AOData2dGrid,AOData*); 1591ec7a0b9SBarry Smith 160*e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END 1617588ac45SBarry Smith #endif 162