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