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