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 int DMInitializePackage(const char[]); 34 35 EXTERN int AOCreateBasic(MPI_Comm,int,const int[],const int[],AO*); 36 EXTERN int AOCreateBasicIS(IS,IS,AO*); 37 38 EXTERN int AOCreateMapping(MPI_Comm,int,const int[],const int[],AO*); 39 EXTERN int AOCreateMappingIS(IS,IS,AO*); 40 41 EXTERN int AOView(AO,PetscViewer); 42 EXTERN int AODestroy(AO); 43 44 EXTERN int 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 int AOPetscToApplication(AO,int,int[]); 52 EXTERN int AOApplicationToPetsc(AO,int,int[]); 53 EXTERN int AOPetscToApplicationIS(AO,IS); 54 EXTERN int AOApplicationToPetscIS(AO,IS); 55 56 EXTERN int AOPetscToApplicationPermuteInt(AO, int, int[]); 57 EXTERN int AOApplicationToPetscPermuteInt(AO, int, int[]); 58 EXTERN int AOPetscToApplicationPermuteReal(AO, int, double[]); 59 EXTERN int AOApplicationToPetscPermuteReal(AO, int, double[]); 60 61 EXTERN int AOMappingHasApplicationIndex(AO, int, PetscTruth *); 62 EXTERN int 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 int AODataCreateBasic(MPI_Comm,AOData *); 79 EXTERN int AODataView(AOData,PetscViewer); 80 EXTERN int AODataDestroy(AOData); 81 EXTERN int AODataLoadBasic(PetscViewer,AOData *); 82 EXTERN int AODataGetInfo(AOData,int*,char ***); 83 84 EXTERN int AODataKeyAdd(AOData,const char[],int,int); 85 EXTERN int AODataKeyRemove(AOData,const char[]); 86 87 EXTERN int AODataKeySetLocalToGlobalMapping(AOData,const char[],ISLocalToGlobalMapping); 88 EXTERN int AODataKeyGetLocalToGlobalMapping(AOData,const char[],ISLocalToGlobalMapping*); 89 EXTERN int AODataKeyRemap(AOData,const char[],AO); 90 91 EXTERN int AODataKeyExists(AOData,const char[],PetscTruth*); 92 EXTERN int AODataKeyGetInfo(AOData,const char[],int *,int*,int*,char***); 93 EXTERN int AODataKeyGetOwnershipRange(AOData,const char[],int *,int*); 94 95 EXTERN int AODataKeyGetNeighbors(AOData,const char[],int,int*,IS *); 96 EXTERN int AODataKeyGetNeighborsIS(AOData,const char[],IS,IS *); 97 EXTERN int AODataKeyGetAdjacency(AOData,const char[],Mat*); 98 99 EXTERN int AODataKeyGetActive(AOData,const char[],const char[],int,int *,int,IS*); 100 EXTERN int AODataKeyGetActiveIS(AOData,const char[],const char[],IS,int,IS*); 101 EXTERN int AODataKeyGetActiveLocal(AOData,const char[],const char[],int,int *,int,IS*); 102 EXTERN int AODataKeyGetActiveLocalIS(AOData,const char[],const char[],IS,int,IS*); 103 104 EXTERN int AODataKeyPartition(AOData,const char[]); 105 106 EXTERN int AODataSegmentAdd(AOData,const char[],const char[],int,int,int *,void *,PetscDataType); 107 EXTERN int AODataSegmentRemove(AOData,const char[],const char[]); 108 EXTERN int AODataSegmentAddIS(AOData,const char[],const char[],int,IS,void *,PetscDataType); 109 110 EXTERN int AODataSegmentExists(AOData,const char[],const char[],PetscTruth*); 111 EXTERN int AODataSegmentGetInfo(AOData,const char[],const char[],int *,PetscDataType*); 112 113 EXTERN int AODataSegmentGet(AOData,const char[],const char[],int,int*,void **); 114 EXTERN int AODataSegmentRestore(AOData,const char[],const char[],int,int*,void **); 115 EXTERN int AODataSegmentGetIS(AOData,const char[],const char[],IS,void **); 116 EXTERN int AODataSegmentRestoreIS(AOData,const char[],const char[],IS,void **); 117 118 EXTERN int AODataSegmentGetLocal(AOData,const char[],const char[],int,int*,void **); 119 EXTERN int AODataSegmentRestoreLocal(AOData,const char[],const char[],int,int*,void **); 120 EXTERN int AODataSegmentGetLocalIS(AOData,const char[],const char[],IS,void **); 121 EXTERN int AODataSegmentRestoreLocalIS(AOData,const char[],const char[],IS,void **); 122 123 EXTERN int AODataSegmentGetReduced(AOData,const char[],const char[],int,int*,IS *); 124 EXTERN int AODataSegmentGetReducedIS(AOData,const char[],const char[],IS,IS *); 125 EXTERN int AODataSegmentGetExtrema(AOData,const char[],const char[],void *,void *); 126 127 EXTERN int AODataSegmentPartition(AOData,const char[],const char[]); 128 129 EXTERN int AODataPartitionAndSetupLocal(AOData,const char[],const char[],IS*,IS*,ISLocalToGlobalMapping*); 130 EXTERN int AODataAliasAdd(AOData,const char[],const char[]); 131 132 133 typedef struct _p_AOData2dGrid *AOData2dGrid; 134 EXTERN int AOData2dGridAddNode(AOData2dGrid, PetscReal, PetscReal, int *); 135 EXTERN int AOData2dGridInput(AOData2dGrid,PetscDraw); 136 EXTERN int AOData2dGridFlipCells(AOData2dGrid); 137 EXTERN int AOData2dGridComputeNeighbors(AOData2dGrid); 138 EXTERN int AOData2dGridComputeVertexBoundary(AOData2dGrid); 139 EXTERN int AOData2dGridDraw(AOData2dGrid,PetscDraw); 140 EXTERN int AOData2dGridDestroy(AOData2dGrid); 141 EXTERN int AOData2dGridCreate(AOData2dGrid*); 142 EXTERN int AOData2dGridToAOData(AOData2dGrid,AOData*); 143 144 PETSC_EXTERN_CXX_END 145 #endif 146