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