1 /* $Id: petscao.h,v 1.27 2001/08/07 21:31:33 bsmith Exp $ */ 2 3 /* 4 An application ordering is mapping between an application-centric 5 ordering (the ordering that is "natural" for the application) and 6 the parallel ordering that PETSc uses. 7 */ 8 #if !defined(__PETSCAO_H) 9 #define __PETSCAO_H 10 #include "petscis.h" 11 #include "petscmat.h" 12 13 typedef enum {AO_BASIC=0, AO_ADVANCED, AO_MAPPING, AO_NEW} AOType; 14 15 #define AO_COOKIE PETSC_COOKIE+20 16 17 /*S 18 AO - Abstract PETSc object that manages mapping between different global numbering 19 20 Level: intermediate 21 22 Concepts: global numbering 23 24 .seealso: AOCreateBasic(), AOCreateBasicIS(), AOPetscToApplication(), AOView() 25 S*/ 26 typedef struct _p_AO* AO; 27 28 #define AO_SER_BASIC_BINARY "basic_binary" 29 #define AO_SER_MAPPING_BINARY "mapping_binary" 30 typedef char *AOSerializeType; 31 32 EXTERN int AOCreateBasic(MPI_Comm,int,int*,int*,AO*); 33 EXTERN int AOCreateBasicIS(IS,IS,AO*); 34 35 EXTERN int AOCreateMapping(MPI_Comm,int,int*,int*,AO*); 36 EXTERN int AOCreateMappingIS(IS,IS,AO*); 37 38 EXTERN int AOView(AO,PetscViewer); 39 EXTERN int AODestroy(AO); 40 41 EXTERN PetscFList AOSerializeList; 42 EXTERN int AOSerializeRegisterAll(const char []); 43 EXTERN int AOSerializeRegisterDestroy(); 44 EXTERN int AOSerializeRegisterAllCalled; 45 EXTERN int AOSerialize(MPI_Comm, AO *, PetscViewer, PetscTruth); 46 EXTERN int AOSetSerializeType(AO, AOSerializeType); 47 48 EXTERN int AORegister_Private(const char [], const char [], const char [], int (*)(AO)); 49 EXTERN int AOSerializeRegister_Private(const char [], const char [], const char [], int (*)(MPI_Comm, AO *, PetscViewer, PetscTruth)); 50 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 51 #define AORegister(a,b,c,d) AORegister_Private(a,b,c,0) 52 #define AOSerializeRegister(a,b,c,d) AOSerializeRegister_Private(a,b,c,0) 53 #else 54 #define AORegister(a,b,c,d) AORegister_Private(a,b,c,d) 55 #define AOSerializeRegister(a,b,c,d) AOSerializeRegister_Private(a,b,c,d) 56 #endif 57 58 EXTERN int AOPetscToApplication(AO,int,int*); 59 EXTERN int AOApplicationToPetsc(AO,int,int*); 60 EXTERN int AOPetscToApplicationIS(AO,IS); 61 EXTERN int AOApplicationToPetscIS(AO,IS); 62 63 EXTERN int AOPetscToApplicationPermuteInt(AO, int, int *); 64 EXTERN int AOApplicationToPetscPermuteInt(AO, int, int *); 65 EXTERN int AOPetscToApplicationPermuteReal(AO, int, double *); 66 EXTERN int AOApplicationToPetscPermuteReal(AO, int, double *); 67 68 EXTERN int AOMappingHasApplicationIndex(AO, int, PetscTruth *); 69 EXTERN int AOMappingHasPetscIndex(AO, int, PetscTruth *); 70 71 /* ----------------------------------------------------*/ 72 73 typedef enum {AODATA_BASIC=0,AODATA_ADVANCED=1} AODataType; 74 75 #define AODATA_COOKIE PETSC_COOKIE+24 76 77 /*S 78 AOData - Abstract PETSc object that manages complex parallel data structures intended to 79 hold grid information, etc 80 81 Level: advanced 82 83 .seealso: AODataCreateBasic() 84 S*/ 85 typedef struct _p_AOData* AOData; 86 87 EXTERN int AODataCreateBasic(MPI_Comm,AOData *); 88 EXTERN int AODataView(AOData,PetscViewer); 89 EXTERN int AODataDestroy(AOData); 90 EXTERN int AODataLoadBasic(PetscViewer,AOData *); 91 EXTERN int AODataGetInfo(AOData,int*,char ***); 92 93 EXTERN int AODataKeyAdd(AOData,char*,int,int); 94 EXTERN int AODataKeyRemove(AOData,char*); 95 96 EXTERN int AODataKeySetLocalToGlobalMapping(AOData,char*,ISLocalToGlobalMapping); 97 EXTERN int AODataKeyGetLocalToGlobalMapping(AOData,char*,ISLocalToGlobalMapping*); 98 EXTERN int AODataKeyRemap(AOData,char *,AO); 99 100 EXTERN int AODataKeyExists(AOData,char*,PetscTruth*); 101 EXTERN int AODataKeyGetInfo(AOData,char *,int *,int*,int*,char***); 102 EXTERN int AODataKeyGetOwnershipRange(AOData,char *,int *,int*); 103 104 EXTERN int AODataKeyGetNeighbors(AOData,char *,int,int*,IS *); 105 EXTERN int AODataKeyGetNeighborsIS(AOData,char *,IS,IS *); 106 EXTERN int AODataKeyGetAdjacency(AOData,char *,Mat*); 107 108 EXTERN int AODataKeyGetActive(AOData,char*,char*,int,int *,int,IS*); 109 EXTERN int AODataKeyGetActiveIS(AOData,char*,char*,IS,int,IS*); 110 EXTERN int AODataKeyGetActiveLocal(AOData,char*,char*,int,int *,int,IS*); 111 EXTERN int AODataKeyGetActiveLocalIS(AOData,char*,char*,IS,int,IS*); 112 113 EXTERN int AODataKeyPartition(AOData,char *); 114 115 EXTERN int AODataSegmentAdd(AOData,char*,char *,int,int,int *,void *,PetscDataType); 116 EXTERN int AODataSegmentRemove(AOData,char *,char *); 117 EXTERN int AODataSegmentAddIS(AOData,char*,char *,int,IS,void *,PetscDataType); 118 119 EXTERN int AODataSegmentExists(AOData,char*,char*,PetscTruth*); 120 EXTERN int AODataSegmentGetInfo(AOData,char *,char *,int *,PetscDataType*); 121 122 EXTERN int AODataSegmentGet(AOData,char *,char *,int,int*,void **); 123 EXTERN int AODataSegmentRestore(AOData,char *,char *,int,int*,void **); 124 EXTERN int AODataSegmentGetIS(AOData,char *,char *,IS,void **); 125 EXTERN int AODataSegmentRestoreIS(AOData,char *,char *,IS,void **); 126 127 EXTERN int AODataSegmentGetLocal(AOData,char *,char *,int,int*,void **); 128 EXTERN int AODataSegmentRestoreLocal(AOData,char *,char *,int,int*,void **); 129 EXTERN int AODataSegmentGetLocalIS(AOData,char *,char *,IS,void **); 130 EXTERN int AODataSegmentRestoreLocalIS(AOData,char *,char *,IS,void **); 131 132 EXTERN int AODataSegmentGetReduced(AOData,char *,char *,int,int*,IS *); 133 EXTERN int AODataSegmentGetReducedIS(AOData,char *,char *,IS,IS *); 134 EXTERN int AODataSegmentGetExtrema(AOData,char*,char*,void *,void *); 135 136 EXTERN int AODataSegmentPartition(AOData,char *,char *); 137 138 EXTERN int AODataPartitionAndSetupLocal(AOData,char*,char*,IS*,IS*,ISLocalToGlobalMapping*); 139 EXTERN int AODataAliasAdd(AOData,char *,char *); 140 141 142 typedef struct _p_AOData2dGrid *AOData2dGrid; 143 EXTERN int AOData2dGridAddNode(AOData2dGrid, PetscReal, PetscReal, int *); 144 EXTERN int AOData2dGridInput(AOData2dGrid,PetscDraw); 145 EXTERN int AOData2dGridFlipCells(AOData2dGrid); 146 EXTERN int AOData2dGridComputeNeighbors(AOData2dGrid); 147 EXTERN int AOData2dGridComputeVertexBoundary(AOData2dGrid); 148 EXTERN int AOData2dGridDraw(AOData2dGrid,PetscDraw); 149 EXTERN int AOData2dGridDestroy(AOData2dGrid); 150 EXTERN int AOData2dGridCreate(AOData2dGrid*); 151 EXTERN int AOData2dGridToAOData(AOData2dGrid,AOData*); 152 153 #endif 154 155 156