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 PetscCookie AO_COOKIE, AODATA_COOKIE; 27 extern PetscEvent AO_PetscToApplication, AO_ApplicationToPetsc; 28 29 EXTERN PetscErrorCode DMInitializePackage(const char[]); 30 31 EXTERN PetscErrorCode AOCreateBasic(MPI_Comm,int,const int[],const int[],AO*); 32 EXTERN PetscErrorCode AOCreateBasicIS(IS,IS,AO*); 33 34 EXTERN PetscErrorCode AOCreateMapping(MPI_Comm,int,const int[],const int[],AO*); 35 EXTERN PetscErrorCode AOCreateMappingIS(IS,IS,AO*); 36 37 EXTERN PetscErrorCode AOView(AO,PetscViewer); 38 EXTERN PetscErrorCode AODestroy(AO); 39 40 EXTERN PetscErrorCode AORegister_Private(const char [], const char [], const char [], PetscErrorCode (*)(AO)); 41 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 42 #define AORegister(a,b,c,d) AORegister_Private(a,b,c,0) 43 #else 44 #define AORegister(a,b,c,d) AORegister_Private(a,b,c,d) 45 #endif 46 47 EXTERN PetscErrorCode AOPetscToApplication(AO,int,int[]); 48 EXTERN PetscErrorCode AOApplicationToPetsc(AO,int,int[]); 49 EXTERN PetscErrorCode AOPetscToApplicationIS(AO,IS); 50 EXTERN PetscErrorCode AOApplicationToPetscIS(AO,IS); 51 52 EXTERN PetscErrorCode AOPetscToApplicationPermuteInt(AO, int, int[]); 53 EXTERN PetscErrorCode AOApplicationToPetscPermuteInt(AO, int, int[]); 54 EXTERN PetscErrorCode AOPetscToApplicationPermuteReal(AO, int, double[]); 55 EXTERN PetscErrorCode AOApplicationToPetscPermuteReal(AO, int, double[]); 56 57 EXTERN PetscErrorCode AOMappingHasApplicationIndex(AO, int, PetscTruth *); 58 EXTERN PetscErrorCode AOMappingHasPetscIndex(AO, int, PetscTruth *); 59 60 /* ----------------------------------------------------*/ 61 62 typedef enum {AODATA_BASIC=0,AODATA_ADVANCED=1} AODataType; 63 64 /*S 65 AOData - Abstract PETSc object that manages complex parallel data structures intended to 66 hold grid information, etc 67 68 Level: advanced 69 70 .seealso: AODataCreateBasic() 71 S*/ 72 typedef struct _p_AOData* AOData; 73 74 EXTERN PetscErrorCode AODataCreateBasic(MPI_Comm,AOData *); 75 EXTERN PetscErrorCode AODataView(AOData,PetscViewer); 76 EXTERN PetscErrorCode AODataDestroy(AOData); 77 EXTERN PetscErrorCode AODataLoadBasic(PetscViewer,AOData *); 78 EXTERN PetscErrorCode AODataGetInfo(AOData,int*,char ***); 79 80 EXTERN PetscErrorCode AODataKeyAdd(AOData,const char[],int,int); 81 EXTERN PetscErrorCode AODataKeyRemove(AOData,const char[]); 82 83 EXTERN PetscErrorCode AODataKeySetLocalToGlobalMapping(AOData,const char[],ISLocalToGlobalMapping); 84 EXTERN PetscErrorCode AODataKeyGetLocalToGlobalMapping(AOData,const char[],ISLocalToGlobalMapping*); 85 EXTERN PetscErrorCode AODataKeyRemap(AOData,const char[],AO); 86 87 EXTERN PetscErrorCode AODataKeyExists(AOData,const char[],PetscTruth*); 88 EXTERN PetscErrorCode AODataKeyGetInfo(AOData,const char[],int *,int*,int*,char***); 89 EXTERN PetscErrorCode AODataKeyGetOwnershipRange(AOData,const char[],int *,int*); 90 91 EXTERN PetscErrorCode AODataKeyGetNeighbors(AOData,const char[],int,int*,IS *); 92 EXTERN PetscErrorCode AODataKeyGetNeighborsIS(AOData,const char[],IS,IS *); 93 EXTERN PetscErrorCode AODataKeyGetAdjacency(AOData,const char[],Mat*); 94 95 EXTERN PetscErrorCode AODataKeyGetActive(AOData,const char[],const char[],int,int *,int,IS*); 96 EXTERN PetscErrorCode AODataKeyGetActiveIS(AOData,const char[],const char[],IS,int,IS*); 97 EXTERN PetscErrorCode AODataKeyGetActiveLocal(AOData,const char[],const char[],int,int *,int,IS*); 98 EXTERN PetscErrorCode AODataKeyGetActiveLocalIS(AOData,const char[],const char[],IS,int,IS*); 99 100 EXTERN PetscErrorCode AODataKeyPartition(AOData,const char[]); 101 102 EXTERN PetscErrorCode AODataSegmentAdd(AOData,const char[],const char[],int,int,int *,void *,PetscDataType); 103 EXTERN PetscErrorCode AODataSegmentRemove(AOData,const char[],const char[]); 104 EXTERN PetscErrorCode AODataSegmentAddIS(AOData,const char[],const char[],int,IS,void *,PetscDataType); 105 106 EXTERN PetscErrorCode AODataSegmentExists(AOData,const char[],const char[],PetscTruth*); 107 EXTERN PetscErrorCode AODataSegmentGetInfo(AOData,const char[],const char[],int *,PetscDataType*); 108 109 EXTERN PetscErrorCode AODataSegmentGet(AOData,const char[],const char[],int,int*,void **); 110 EXTERN PetscErrorCode AODataSegmentRestore(AOData,const char[],const char[],int,int*,void **); 111 EXTERN PetscErrorCode AODataSegmentGetIS(AOData,const char[],const char[],IS,void **); 112 EXTERN PetscErrorCode AODataSegmentRestoreIS(AOData,const char[],const char[],IS,void **); 113 114 EXTERN PetscErrorCode AODataSegmentGetLocal(AOData,const char[],const char[],int,int*,void **); 115 EXTERN PetscErrorCode AODataSegmentRestoreLocal(AOData,const char[],const char[],int,int*,void **); 116 EXTERN PetscErrorCode AODataSegmentGetLocalIS(AOData,const char[],const char[],IS,void **); 117 EXTERN PetscErrorCode AODataSegmentRestoreLocalIS(AOData,const char[],const char[],IS,void **); 118 119 EXTERN PetscErrorCode AODataSegmentGetReduced(AOData,const char[],const char[],int,int*,IS *); 120 EXTERN PetscErrorCode AODataSegmentGetReducedIS(AOData,const char[],const char[],IS,IS *); 121 EXTERN PetscErrorCode AODataSegmentGetExtrema(AOData,const char[],const char[],void *,void *); 122 123 EXTERN PetscErrorCode AODataSegmentPartition(AOData,const char[],const char[]); 124 125 EXTERN PetscErrorCode AODataPartitionAndSetupLocal(AOData,const char[],const char[],IS*,IS*,ISLocalToGlobalMapping*); 126 EXTERN PetscErrorCode AODataAliasAdd(AOData,const char[],const char[]); 127 128 129 typedef struct _p_AOData2dGrid *AOData2dGrid; 130 EXTERN PetscErrorCode AOData2dGridAddNode(AOData2dGrid, PetscReal, PetscReal, int *); 131 EXTERN PetscErrorCode AOData2dGridInput(AOData2dGrid,PetscDraw); 132 EXTERN PetscErrorCode AOData2dGridFlipCells(AOData2dGrid); 133 EXTERN PetscErrorCode AOData2dGridComputeNeighbors(AOData2dGrid); 134 EXTERN PetscErrorCode AOData2dGridComputeVertexBoundary(AOData2dGrid); 135 EXTERN PetscErrorCode AOData2dGridDraw(AOData2dGrid,PetscDraw); 136 EXTERN PetscErrorCode AOData2dGridDestroy(AOData2dGrid); 137 EXTERN PetscErrorCode AOData2dGridCreate(AOData2dGrid*); 138 EXTERN PetscErrorCode AOData2dGridToAOData(AOData2dGrid,AOData*); 139 140 PETSC_EXTERN_CXX_END 141 #endif 142