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 13*4ebda54eSMatthew Knepley typedef enum {AO_BASIC=0, AO_ADVANCED, AO_MAPPING, AO_NEW} AOType; 147588ac45SBarry Smith 157588ac45SBarry Smith #define AO_COOKIE PETSC_COOKIE+20 167588ac45SBarry Smith 17b9617806SBarry Smith /*S 18b9617806SBarry Smith AO - Abstract PETSc object that manages mapping between different global numbering 19b9617806SBarry Smith 20b9617806SBarry Smith Level: intermediate 21b9617806SBarry Smith 22b9617806SBarry Smith Concepts: global numbering 23b9617806SBarry Smith 24b9617806SBarry Smith .seealso: AOCreateBasic(), AOCreateBasicIS(), AOPetscToApplication(), AOView() 25b9617806SBarry Smith S*/ 261ac94ccfSSatish Balay typedef struct _p_AO* AO; 277588ac45SBarry Smith 28*4ebda54eSMatthew Knepley #define AO_SER_BASIC_BINARY "basic_binary" 29*4ebda54eSMatthew Knepley #define AO_SER_MAPPING_BINARY "mapping_binary" 30*4ebda54eSMatthew Knepley typedef char *AOSerializeType; 31*4ebda54eSMatthew Knepley 32ca44d042SBarry Smith EXTERN int AOCreateBasic(MPI_Comm,int,int*,int*,AO*); 33ca44d042SBarry Smith EXTERN int AOCreateBasicIS(IS,IS,AO*); 347588ac45SBarry Smith 35*4ebda54eSMatthew Knepley EXTERN int AOCreateMapping(MPI_Comm,int,int*,int*,AO*); 36*4ebda54eSMatthew Knepley EXTERN int AOCreateMappingIS(IS,IS,AO*); 37*4ebda54eSMatthew Knepley 38*4ebda54eSMatthew Knepley EXTERN int AOView(AO,PetscViewer); 39*4ebda54eSMatthew Knepley EXTERN int AODestroy(AO); 40*4ebda54eSMatthew Knepley 41*4ebda54eSMatthew Knepley EXTERN PetscFList AOSerializeList; 42*4ebda54eSMatthew Knepley EXTERN int AOSerializeRegisterAll(const char []); 43*4ebda54eSMatthew Knepley EXTERN int AOSerializeRegisterDestroy(); 44*4ebda54eSMatthew Knepley EXTERN int AOSerializeRegisterAllCalled; 45*4ebda54eSMatthew Knepley EXTERN int AOSerialize(MPI_Comm, AO *, PetscViewer, PetscTruth); 46*4ebda54eSMatthew Knepley EXTERN int AOSetSerializeType(AO, AOSerializeType); 47*4ebda54eSMatthew Knepley 48*4ebda54eSMatthew Knepley EXTERN int AORegister_Private(const char [], const char [], const char [], int (*)(AO)); 49*4ebda54eSMatthew Knepley EXTERN int AOSerializeRegister_Private(const char [], const char [], const char [], int (*)(MPI_Comm, AO *, PetscViewer, PetscTruth)); 50*4ebda54eSMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 51*4ebda54eSMatthew Knepley #define AORegister(a,b,c,d) AORegister_Private(a,b,c,0) 52*4ebda54eSMatthew Knepley #define AOSerializeRegister(a,b,c,d) AOSerializeRegister_Private(a,b,c,0) 53*4ebda54eSMatthew Knepley #else 54*4ebda54eSMatthew Knepley #define AORegister(a,b,c,d) AORegister_Private(a,b,c,d) 55*4ebda54eSMatthew Knepley #define AOSerializeRegister(a,b,c,d) AOSerializeRegister_Private(a,b,c,d) 56*4ebda54eSMatthew Knepley #endif 57*4ebda54eSMatthew Knepley 58ca44d042SBarry Smith EXTERN int AOPetscToApplication(AO,int,int*); 59ca44d042SBarry Smith EXTERN int AOApplicationToPetsc(AO,int,int*); 60ca44d042SBarry Smith EXTERN int AOPetscToApplicationIS(AO,IS); 61ca44d042SBarry Smith EXTERN int AOApplicationToPetscIS(AO,IS); 627588ac45SBarry Smith 63*4ebda54eSMatthew Knepley EXTERN int AOPetscToApplicationPermuteInt(AO, int, int *); 64*4ebda54eSMatthew Knepley EXTERN int AOApplicationToPetscPermuteInt(AO, int, int *); 65*4ebda54eSMatthew Knepley EXTERN int AOPetscToApplicationPermuteReal(AO, int, double *); 66*4ebda54eSMatthew Knepley EXTERN int AOApplicationToPetscPermuteReal(AO, int, double *); 67*4ebda54eSMatthew Knepley 68*4ebda54eSMatthew Knepley EXTERN int AOMappingHasApplicationIndex(AO, int, PetscTruth *); 69*4ebda54eSMatthew Knepley EXTERN int AOMappingHasPetscIndex(AO, int, PetscTruth *); 707588ac45SBarry Smith 71376ee591SBarry Smith /* ----------------------------------------------------*/ 72376ee591SBarry Smith 730752156aSBarry Smith typedef enum {AODATA_BASIC=0,AODATA_ADVANCED=1} AODataType; 74376ee591SBarry Smith 750752156aSBarry Smith #define AODATA_COOKIE PETSC_COOKIE+24 76376ee591SBarry Smith 77b9617806SBarry Smith /*S 78b9617806SBarry Smith AOData - Abstract PETSc object that manages complex parallel data structures intended to 79b9617806SBarry Smith hold grid information, etc 80b9617806SBarry Smith 81b9617806SBarry Smith Level: advanced 82b9617806SBarry Smith 83b9617806SBarry Smith .seealso: AODataCreateBasic() 84b9617806SBarry Smith S*/ 850752156aSBarry Smith typedef struct _p_AOData* AOData; 860752156aSBarry Smith 87ca44d042SBarry Smith EXTERN int AODataCreateBasic(MPI_Comm,AOData *); 88b0a32e0cSBarry Smith EXTERN int AODataView(AOData,PetscViewer); 89ca44d042SBarry Smith EXTERN int AODataDestroy(AOData); 90b0a32e0cSBarry Smith EXTERN int AODataLoadBasic(PetscViewer,AOData *); 91ca44d042SBarry Smith EXTERN int AODataGetInfo(AOData,int*,char ***); 9231b6eecaSBarry Smith 93ca44d042SBarry Smith EXTERN int AODataKeyAdd(AOData,char*,int,int); 94ca44d042SBarry Smith EXTERN int AODataKeyRemove(AOData,char*); 95b2487710SBarry Smith 96ca44d042SBarry Smith EXTERN int AODataKeySetLocalToGlobalMapping(AOData,char*,ISLocalToGlobalMapping); 97ca44d042SBarry Smith EXTERN int AODataKeyGetLocalToGlobalMapping(AOData,char*,ISLocalToGlobalMapping*); 98ca44d042SBarry Smith EXTERN int AODataKeyRemap(AOData,char *,AO); 9931b6eecaSBarry Smith 100ca44d042SBarry Smith EXTERN int AODataKeyExists(AOData,char*,PetscTruth*); 101ca44d042SBarry Smith EXTERN int AODataKeyGetInfo(AOData,char *,int *,int*,int*,char***); 102ca44d042SBarry Smith EXTERN int AODataKeyGetOwnershipRange(AOData,char *,int *,int*); 103ea06a074SBarry Smith 104ca44d042SBarry Smith EXTERN int AODataKeyGetNeighbors(AOData,char *,int,int*,IS *); 105ca44d042SBarry Smith EXTERN int AODataKeyGetNeighborsIS(AOData,char *,IS,IS *); 106ca44d042SBarry Smith EXTERN int AODataKeyGetAdjacency(AOData,char *,Mat*); 107ea06a074SBarry Smith 108ca44d042SBarry Smith EXTERN int AODataKeyGetActive(AOData,char*,char*,int,int *,int,IS*); 109ca44d042SBarry Smith EXTERN int AODataKeyGetActiveIS(AOData,char*,char*,IS,int,IS*); 110ca44d042SBarry Smith EXTERN int AODataKeyGetActiveLocal(AOData,char*,char*,int,int *,int,IS*); 111ca44d042SBarry Smith EXTERN int AODataKeyGetActiveLocalIS(AOData,char*,char*,IS,int,IS*); 11235c17c5bSBarry Smith 113ca44d042SBarry Smith EXTERN int AODataKeyPartition(AOData,char *); 114ea06a074SBarry Smith 115ca44d042SBarry Smith EXTERN int AODataSegmentAdd(AOData,char*,char *,int,int,int *,void *,PetscDataType); 116ca44d042SBarry Smith EXTERN int AODataSegmentRemove(AOData,char *,char *); 117ca44d042SBarry Smith EXTERN int AODataSegmentAddIS(AOData,char*,char *,int,IS,void *,PetscDataType); 11831b6eecaSBarry Smith 119ca44d042SBarry Smith EXTERN int AODataSegmentExists(AOData,char*,char*,PetscTruth*); 120ca44d042SBarry Smith EXTERN int AODataSegmentGetInfo(AOData,char *,char *,int *,PetscDataType*); 12131b6eecaSBarry Smith 122ca44d042SBarry Smith EXTERN int AODataSegmentGet(AOData,char *,char *,int,int*,void **); 123ca44d042SBarry Smith EXTERN int AODataSegmentRestore(AOData,char *,char *,int,int*,void **); 124ca44d042SBarry Smith EXTERN int AODataSegmentGetIS(AOData,char *,char *,IS,void **); 125ca44d042SBarry Smith EXTERN int AODataSegmentRestoreIS(AOData,char *,char *,IS,void **); 12631b6eecaSBarry Smith 127ca44d042SBarry Smith EXTERN int AODataSegmentGetLocal(AOData,char *,char *,int,int*,void **); 128ca44d042SBarry Smith EXTERN int AODataSegmentRestoreLocal(AOData,char *,char *,int,int*,void **); 129ca44d042SBarry Smith EXTERN int AODataSegmentGetLocalIS(AOData,char *,char *,IS,void **); 130ca44d042SBarry Smith EXTERN int AODataSegmentRestoreLocalIS(AOData,char *,char *,IS,void **); 1312bdab257SBarry Smith 132ca44d042SBarry Smith EXTERN int AODataSegmentGetReduced(AOData,char *,char *,int,int*,IS *); 133ca44d042SBarry Smith EXTERN int AODataSegmentGetReducedIS(AOData,char *,char *,IS,IS *); 134ca44d042SBarry Smith EXTERN int AODataSegmentGetExtrema(AOData,char*,char*,void *,void *); 135e852ff30SBarry Smith 136ca44d042SBarry Smith EXTERN int AODataSegmentPartition(AOData,char *,char *); 1372bdab257SBarry Smith 138ca44d042SBarry Smith EXTERN int AODataPartitionAndSetupLocal(AOData,char*,char*,IS*,IS*,ISLocalToGlobalMapping*); 139ca44d042SBarry Smith EXTERN int AODataAliasAdd(AOData,char *,char *); 1401ec7a0b9SBarry Smith 1411ec7a0b9SBarry Smith 1421ec7a0b9SBarry Smith typedef struct _p_AOData2dGrid *AOData2dGrid; 143f6275e2eSBarry Smith EXTERN int AOData2dGridAddNode(AOData2dGrid, PetscReal, PetscReal, int *); 144b0a32e0cSBarry Smith EXTERN int AOData2dGridInput(AOData2dGrid,PetscDraw); 145ca44d042SBarry Smith EXTERN int AOData2dGridFlipCells(AOData2dGrid); 146ca44d042SBarry Smith EXTERN int AOData2dGridComputeNeighbors(AOData2dGrid); 147ca44d042SBarry Smith EXTERN int AOData2dGridComputeVertexBoundary(AOData2dGrid); 148b0a32e0cSBarry Smith EXTERN int AOData2dGridDraw(AOData2dGrid,PetscDraw); 149ca44d042SBarry Smith EXTERN int AOData2dGridDestroy(AOData2dGrid); 150ca44d042SBarry Smith EXTERN int AOData2dGridCreate(AOData2dGrid*); 151ca44d042SBarry Smith EXTERN int AOData2dGridToAOData(AOData2dGrid,AOData*); 1521ec7a0b9SBarry Smith 1537588ac45SBarry Smith #endif 1547588ac45SBarry Smith 155230e2716SBarry Smith 156