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" 127588ac45SBarry Smith 134ebda54eSMatthew Knepley typedef enum {AO_BASIC=0, AO_ADVANCED, AO_MAPPING, AO_NEW} AOType; 147588ac45SBarry Smith 15b9617806SBarry Smith /*S 16b9617806SBarry Smith AO - Abstract PETSc object that manages mapping between different global numbering 17b9617806SBarry Smith 18b9617806SBarry Smith Level: intermediate 19b9617806SBarry Smith 20b9617806SBarry Smith Concepts: global numbering 21b9617806SBarry Smith 22b9617806SBarry Smith .seealso: AOCreateBasic(), AOCreateBasicIS(), AOPetscToApplication(), AOView() 23b9617806SBarry Smith S*/ 241ac94ccfSSatish Balay typedef struct _p_AO* AO; 257588ac45SBarry Smith 264ebda54eSMatthew Knepley #define AO_SER_BASIC_BINARY "basic_binary" 274ebda54eSMatthew Knepley #define AO_SER_MAPPING_BINARY "mapping_binary" 284ebda54eSMatthew Knepley typedef char *AOSerializeType; 294ebda54eSMatthew Knepley 308ba1e511SMatthew Knepley /* Logging support */ 318ba1e511SMatthew Knepley extern int AO_COOKIE; 328ba1e511SMatthew Knepley extern int AODATA_COOKIE; 338ba1e511SMatthew Knepley enum {AO_PetscToApplication, AO_ApplicationToPetsc, AO_MAX_EVENTS}; 348ba1e511SMatthew Knepley extern int AOEvents[AO_MAX_EVENTS]; 358ba1e511SMatthew Knepley #define AOLogEventBegin(e,o1,o2,o3,o4) PetscLogEventBegin(AOEvents[e],o1,o2,o3,o4) 368ba1e511SMatthew Knepley #define AOLogEventEnd(e,o1,o2,o3,o4) PetscLogEventEnd(AOEvents[e],o1,o2,o3,o4) 378ba1e511SMatthew Knepley 388ba1e511SMatthew Knepley EXTERN int DMInitializePackage(char *); 398ba1e511SMatthew Knepley 40ca44d042SBarry Smith EXTERN int AOCreateBasic(MPI_Comm,int,int*,int*,AO*); 41ca44d042SBarry Smith EXTERN int AOCreateBasicIS(IS,IS,AO*); 427588ac45SBarry Smith 434ebda54eSMatthew Knepley EXTERN int AOCreateMapping(MPI_Comm,int,int*,int*,AO*); 444ebda54eSMatthew Knepley EXTERN int AOCreateMappingIS(IS,IS,AO*); 454ebda54eSMatthew Knepley 464ebda54eSMatthew Knepley EXTERN int AOView(AO,PetscViewer); 474ebda54eSMatthew Knepley EXTERN int AODestroy(AO); 484ebda54eSMatthew Knepley 494ebda54eSMatthew Knepley EXTERN PetscFList AOSerializeList; 504ebda54eSMatthew Knepley EXTERN int AOSerializeRegisterAll(const char []); 51*65804fbbSSatish Balay EXTERN int AOSerializeRegisterDestroy(void); 524ebda54eSMatthew Knepley EXTERN int AOSerializeRegisterAllCalled; 534ebda54eSMatthew Knepley EXTERN int AOSerialize(MPI_Comm, AO *, PetscViewer, PetscTruth); 544ebda54eSMatthew Knepley EXTERN int AOSetSerializeType(AO, AOSerializeType); 554ebda54eSMatthew Knepley 564ebda54eSMatthew Knepley EXTERN int AORegister_Private(const char [], const char [], const char [], int (*)(AO)); 574ebda54eSMatthew Knepley EXTERN int AOSerializeRegister_Private(const char [], const char [], const char [], int (*)(MPI_Comm, AO *, PetscViewer, PetscTruth)); 584ebda54eSMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 594ebda54eSMatthew Knepley #define AORegister(a,b,c,d) AORegister_Private(a,b,c,0) 604ebda54eSMatthew Knepley #define AOSerializeRegister(a,b,c,d) AOSerializeRegister_Private(a,b,c,0) 614ebda54eSMatthew Knepley #else 624ebda54eSMatthew Knepley #define AORegister(a,b,c,d) AORegister_Private(a,b,c,d) 634ebda54eSMatthew Knepley #define AOSerializeRegister(a,b,c,d) AOSerializeRegister_Private(a,b,c,d) 644ebda54eSMatthew Knepley #endif 654ebda54eSMatthew Knepley 66ca44d042SBarry Smith EXTERN int AOPetscToApplication(AO,int,int*); 67ca44d042SBarry Smith EXTERN int AOApplicationToPetsc(AO,int,int*); 68ca44d042SBarry Smith EXTERN int AOPetscToApplicationIS(AO,IS); 69ca44d042SBarry Smith EXTERN int AOApplicationToPetscIS(AO,IS); 707588ac45SBarry Smith 714ebda54eSMatthew Knepley EXTERN int AOPetscToApplicationPermuteInt(AO, int, int *); 724ebda54eSMatthew Knepley EXTERN int AOApplicationToPetscPermuteInt(AO, int, int *); 734ebda54eSMatthew Knepley EXTERN int AOPetscToApplicationPermuteReal(AO, int, double *); 744ebda54eSMatthew Knepley EXTERN int AOApplicationToPetscPermuteReal(AO, int, double *); 754ebda54eSMatthew Knepley 764ebda54eSMatthew Knepley EXTERN int AOMappingHasApplicationIndex(AO, int, PetscTruth *); 774ebda54eSMatthew Knepley EXTERN int AOMappingHasPetscIndex(AO, int, PetscTruth *); 787588ac45SBarry Smith 79376ee591SBarry Smith /* ----------------------------------------------------*/ 80376ee591SBarry Smith 810752156aSBarry Smith typedef enum {AODATA_BASIC=0,AODATA_ADVANCED=1} AODataType; 82376ee591SBarry Smith 83b9617806SBarry Smith /*S 84b9617806SBarry Smith AOData - Abstract PETSc object that manages complex parallel data structures intended to 85b9617806SBarry Smith hold grid information, etc 86b9617806SBarry Smith 87b9617806SBarry Smith Level: advanced 88b9617806SBarry Smith 89b9617806SBarry Smith .seealso: AODataCreateBasic() 90b9617806SBarry Smith S*/ 910752156aSBarry Smith typedef struct _p_AOData* AOData; 920752156aSBarry Smith 93ca44d042SBarry Smith EXTERN int AODataCreateBasic(MPI_Comm,AOData *); 94b0a32e0cSBarry Smith EXTERN int AODataView(AOData,PetscViewer); 95ca44d042SBarry Smith EXTERN int AODataDestroy(AOData); 96b0a32e0cSBarry Smith EXTERN int AODataLoadBasic(PetscViewer,AOData *); 97ca44d042SBarry Smith EXTERN int AODataGetInfo(AOData,int*,char ***); 9831b6eecaSBarry Smith 99ca44d042SBarry Smith EXTERN int AODataKeyAdd(AOData,char*,int,int); 100ca44d042SBarry Smith EXTERN int AODataKeyRemove(AOData,char*); 101b2487710SBarry Smith 102ca44d042SBarry Smith EXTERN int AODataKeySetLocalToGlobalMapping(AOData,char*,ISLocalToGlobalMapping); 103ca44d042SBarry Smith EXTERN int AODataKeyGetLocalToGlobalMapping(AOData,char*,ISLocalToGlobalMapping*); 104ca44d042SBarry Smith EXTERN int AODataKeyRemap(AOData,char *,AO); 10531b6eecaSBarry Smith 106ca44d042SBarry Smith EXTERN int AODataKeyExists(AOData,char*,PetscTruth*); 107ca44d042SBarry Smith EXTERN int AODataKeyGetInfo(AOData,char *,int *,int*,int*,char***); 108ca44d042SBarry Smith EXTERN int AODataKeyGetOwnershipRange(AOData,char *,int *,int*); 109ea06a074SBarry Smith 110ca44d042SBarry Smith EXTERN int AODataKeyGetNeighbors(AOData,char *,int,int*,IS *); 111ca44d042SBarry Smith EXTERN int AODataKeyGetNeighborsIS(AOData,char *,IS,IS *); 112ca44d042SBarry Smith EXTERN int AODataKeyGetAdjacency(AOData,char *,Mat*); 113ea06a074SBarry Smith 114ca44d042SBarry Smith EXTERN int AODataKeyGetActive(AOData,char*,char*,int,int *,int,IS*); 115ca44d042SBarry Smith EXTERN int AODataKeyGetActiveIS(AOData,char*,char*,IS,int,IS*); 116ca44d042SBarry Smith EXTERN int AODataKeyGetActiveLocal(AOData,char*,char*,int,int *,int,IS*); 117ca44d042SBarry Smith EXTERN int AODataKeyGetActiveLocalIS(AOData,char*,char*,IS,int,IS*); 11835c17c5bSBarry Smith 119ca44d042SBarry Smith EXTERN int AODataKeyPartition(AOData,char *); 120ea06a074SBarry Smith 121ca44d042SBarry Smith EXTERN int AODataSegmentAdd(AOData,char*,char *,int,int,int *,void *,PetscDataType); 122ca44d042SBarry Smith EXTERN int AODataSegmentRemove(AOData,char *,char *); 123ca44d042SBarry Smith EXTERN int AODataSegmentAddIS(AOData,char*,char *,int,IS,void *,PetscDataType); 12431b6eecaSBarry Smith 125ca44d042SBarry Smith EXTERN int AODataSegmentExists(AOData,char*,char*,PetscTruth*); 126ca44d042SBarry Smith EXTERN int AODataSegmentGetInfo(AOData,char *,char *,int *,PetscDataType*); 12731b6eecaSBarry Smith 128ca44d042SBarry Smith EXTERN int AODataSegmentGet(AOData,char *,char *,int,int*,void **); 129ca44d042SBarry Smith EXTERN int AODataSegmentRestore(AOData,char *,char *,int,int*,void **); 130ca44d042SBarry Smith EXTERN int AODataSegmentGetIS(AOData,char *,char *,IS,void **); 131ca44d042SBarry Smith EXTERN int AODataSegmentRestoreIS(AOData,char *,char *,IS,void **); 13231b6eecaSBarry Smith 133ca44d042SBarry Smith EXTERN int AODataSegmentGetLocal(AOData,char *,char *,int,int*,void **); 134ca44d042SBarry Smith EXTERN int AODataSegmentRestoreLocal(AOData,char *,char *,int,int*,void **); 135ca44d042SBarry Smith EXTERN int AODataSegmentGetLocalIS(AOData,char *,char *,IS,void **); 136ca44d042SBarry Smith EXTERN int AODataSegmentRestoreLocalIS(AOData,char *,char *,IS,void **); 1372bdab257SBarry Smith 138ca44d042SBarry Smith EXTERN int AODataSegmentGetReduced(AOData,char *,char *,int,int*,IS *); 139ca44d042SBarry Smith EXTERN int AODataSegmentGetReducedIS(AOData,char *,char *,IS,IS *); 140ca44d042SBarry Smith EXTERN int AODataSegmentGetExtrema(AOData,char*,char*,void *,void *); 141e852ff30SBarry Smith 142ca44d042SBarry Smith EXTERN int AODataSegmentPartition(AOData,char *,char *); 1432bdab257SBarry Smith 144ca44d042SBarry Smith EXTERN int AODataPartitionAndSetupLocal(AOData,char*,char*,IS*,IS*,ISLocalToGlobalMapping*); 145ca44d042SBarry Smith EXTERN int AODataAliasAdd(AOData,char *,char *); 1461ec7a0b9SBarry Smith 1471ec7a0b9SBarry Smith 1481ec7a0b9SBarry Smith typedef struct _p_AOData2dGrid *AOData2dGrid; 149f6275e2eSBarry Smith EXTERN int AOData2dGridAddNode(AOData2dGrid, PetscReal, PetscReal, int *); 150b0a32e0cSBarry Smith EXTERN int AOData2dGridInput(AOData2dGrid,PetscDraw); 151ca44d042SBarry Smith EXTERN int AOData2dGridFlipCells(AOData2dGrid); 152ca44d042SBarry Smith EXTERN int AOData2dGridComputeNeighbors(AOData2dGrid); 153ca44d042SBarry Smith EXTERN int AOData2dGridComputeVertexBoundary(AOData2dGrid); 154b0a32e0cSBarry Smith EXTERN int AOData2dGridDraw(AOData2dGrid,PetscDraw); 155ca44d042SBarry Smith EXTERN int AOData2dGridDestroy(AOData2dGrid); 156ca44d042SBarry Smith EXTERN int AOData2dGridCreate(AOData2dGrid*); 157ca44d042SBarry Smith EXTERN int AOData2dGridToAOData(AOData2dGrid,AOData*); 1581ec7a0b9SBarry Smith 1597588ac45SBarry Smith #endif 1607588ac45SBarry Smith 161230e2716SBarry Smith 162