xref: /petsc/include/petscao.h (revision 2f2e5d10202bd0387eb8c302ae412b45563fb849)
1230e2716SBarry Smith /*
230127c82SLois Curfman McInnes   An application ordering is mapping between an application-centric
330127c82SLois Curfman McInnes   ordering (the ordering that is "natural" for the application) and
47588ac45SBarry Smith   the parallel ordering that PETSc uses.
57588ac45SBarry Smith */
60a835dfdSSatish Balay #if !defined(__PETSCAO_H)
70a835dfdSSatish Balay #define __PETSCAO_H
80a835dfdSSatish Balay #include "petscis.h"
90a835dfdSSatish Balay #include "petscmat.h"
10e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN
117588ac45SBarry Smith 
124ebda54eSMatthew Knepley typedef enum {AO_BASIC=0, AO_ADVANCED, AO_MAPPING, AO_NEW} AOType;
137588ac45SBarry Smith 
14b9617806SBarry Smith /*S
15b9617806SBarry Smith      AO - Abstract PETSc object that manages mapping between different global numbering
16b9617806SBarry Smith 
17b9617806SBarry Smith    Level: intermediate
18b9617806SBarry Smith 
19b9617806SBarry Smith   Concepts: global numbering
20b9617806SBarry Smith 
21b9617806SBarry Smith .seealso:  AOCreateBasic(), AOCreateBasicIS(), AOPetscToApplication(), AOView()
22b9617806SBarry Smith S*/
231ac94ccfSSatish Balay typedef struct _p_AO* AO;
247588ac45SBarry Smith 
258ba1e511SMatthew Knepley /* Logging support */
26*2f2e5d10SKris Buschelman extern PetscCookie PETSCDM_DLLEXPORT AO_COOKIE, AODATA_COOKIE;
276849ba73SBarry Smith extern PetscEvent  AO_PetscToApplication, AO_ApplicationToPetsc;
288ba1e511SMatthew Knepley 
29*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMInitializePackage(const char[]);
308ba1e511SMatthew Knepley 
31*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOCreateBasic(MPI_Comm,PetscInt,const PetscInt[],const PetscInt[],AO*);
32*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOCreateBasicIS(IS,IS,AO*);
337588ac45SBarry Smith 
34*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOCreateMapping(MPI_Comm,PetscInt,const PetscInt[],const PetscInt[],AO*);
35*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOCreateMappingIS(IS,IS,AO*);
364ebda54eSMatthew Knepley 
37*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOView(AO,PetscViewer);
38*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODestroy(AO);
394ebda54eSMatthew Knepley 
40*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AORegister_Private(const char [], const char [], const char [], PetscErrorCode (*)(AO));
414ebda54eSMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
424ebda54eSMatthew Knepley #define AORegister(a,b,c,d) AORegister_Private(a,b,c,0)
434ebda54eSMatthew Knepley #else
444ebda54eSMatthew Knepley #define AORegister(a,b,c,d) AORegister_Private(a,b,c,d)
454ebda54eSMatthew Knepley #endif
464ebda54eSMatthew Knepley 
47*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOPetscToApplication(AO,PetscInt,PetscInt[]);
48*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOApplicationToPetsc(AO,PetscInt,PetscInt[]);
49*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOPetscToApplicationIS(AO,IS);
50*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOApplicationToPetscIS(AO,IS);
517588ac45SBarry Smith 
52*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOPetscToApplicationPermuteInt(AO, PetscInt, PetscInt[]);
53*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOApplicationToPetscPermuteInt(AO, PetscInt, PetscInt[]);
54*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOPetscToApplicationPermuteReal(AO, PetscInt, PetscReal[]);
55*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOApplicationToPetscPermuteReal(AO, PetscInt, PetscReal[]);
564ebda54eSMatthew Knepley 
57*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOMappingHasApplicationIndex(AO, PetscInt, PetscTruth *);
58*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOMappingHasPetscIndex(AO, PetscInt, PetscTruth *);
597588ac45SBarry Smith 
60376ee591SBarry Smith /* ----------------------------------------------------*/
61376ee591SBarry Smith 
620752156aSBarry Smith typedef enum {AODATA_BASIC=0,AODATA_ADVANCED=1} AODataType;
63376ee591SBarry Smith 
64b9617806SBarry Smith /*S
65b9617806SBarry Smith      AOData - Abstract PETSc object that manages complex parallel data structures intended to
66b9617806SBarry Smith          hold grid information, etc
67b9617806SBarry Smith 
68b9617806SBarry Smith    Level: advanced
69b9617806SBarry Smith 
70b9617806SBarry Smith .seealso:  AODataCreateBasic()
71b9617806SBarry Smith S*/
720752156aSBarry Smith typedef struct _p_AOData* AOData;
730752156aSBarry Smith 
74*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataCreateBasic(MPI_Comm,AOData *);
75*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataView(AOData,PetscViewer);
76*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataDestroy(AOData);
77*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataLoadBasic(PetscViewer,AOData *);
78*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataGetInfo(AOData,PetscInt*,char ***);
7931b6eecaSBarry Smith 
80*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyAdd(AOData,const char[],PetscInt,PetscInt);
81*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyRemove(AOData,const char[]);
82b2487710SBarry Smith 
83*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeySetLocalToGlobalMapping(AOData,const char[],ISLocalToGlobalMapping);
84*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetLocalToGlobalMapping(AOData,const char[],ISLocalToGlobalMapping*);
85*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyRemap(AOData,const char[],AO);
8631b6eecaSBarry Smith 
87*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyExists(AOData,const char[],PetscTruth*);
88*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetInfo(AOData,const char[],PetscInt *,PetscInt*,PetscInt*,char***);
89*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetOwnershipRange(AOData,const char[],PetscInt *,PetscInt*);
90ea06a074SBarry Smith 
91*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetNeighbors(AOData,const char[],PetscInt,PetscInt*,IS *);
92*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetNeighborsIS(AOData,const char[],IS,IS *);
93*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetAdjacency(AOData,const char[],Mat*);
94ea06a074SBarry Smith 
95*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetActive(AOData,const char[],const char[],PetscInt,PetscInt *,PetscInt,IS*);
96*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetActiveIS(AOData,const char[],const char[],IS,PetscInt,IS*);
97*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetActiveLocal(AOData,const char[],const char[],PetscInt,PetscInt *,PetscInt,IS*);
98*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyGetActiveLocalIS(AOData,const char[],const char[],IS,PetscInt,IS*);
9935c17c5bSBarry Smith 
100*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataKeyPartition(AOData,const char[]);
101ea06a074SBarry Smith 
102*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentAdd(AOData,const char[],const char[],PetscInt,PetscInt,PetscInt *,void *,PetscDataType);
103*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentRemove(AOData,const char[],const char[]);
104*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentAddIS(AOData,const char[],const char[],PetscInt,IS,void *,PetscDataType);
10531b6eecaSBarry Smith 
106*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentExists(AOData,const char[],const char[],PetscTruth*);
107*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetInfo(AOData,const char[],const char[],PetscInt *,PetscDataType*);
10831b6eecaSBarry Smith 
109*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGet(AOData,const char[],const char[],PetscInt,PetscInt*,void **);
110*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentRestore(AOData,const char[],const char[],PetscInt,PetscInt*,void **);
111*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetIS(AOData,const char[],const char[],IS,void **);
112*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentRestoreIS(AOData,const char[],const char[],IS,void **);
11331b6eecaSBarry Smith 
114*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetLocal(AOData,const char[],const char[],PetscInt,PetscInt*,void **);
115*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentRestoreLocal(AOData,const char[],const char[],PetscInt,PetscInt*,void **);
116*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetLocalIS(AOData,const char[],const char[],IS,void **);
117*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentRestoreLocalIS(AOData,const char[],const char[],IS,void **);
1182bdab257SBarry Smith 
119*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetReduced(AOData,const char[],const char[],PetscInt,PetscInt*,IS *);
120*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetReducedIS(AOData,const char[],const char[],IS,IS *);
121*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentGetExtrema(AOData,const char[],const char[],void *,void *);
122e852ff30SBarry Smith 
123*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataSegmentPartition(AOData,const char[],const char[]);
1242bdab257SBarry Smith 
125*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataPartitionAndSetupLocal(AOData,const char[],const char[],IS*,IS*,ISLocalToGlobalMapping*);
126*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AODataAliasAdd(AOData,const char[],const char[]);
1271ec7a0b9SBarry Smith 
1281ec7a0b9SBarry Smith 
1291ec7a0b9SBarry Smith typedef struct _p_AOData2dGrid *AOData2dGrid;
130*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridAddNode(AOData2dGrid, PetscReal, PetscReal, PetscInt *);
131*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridInput(AOData2dGrid,PetscDraw);
132*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridFlipCells(AOData2dGrid);
133*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridComputeNeighbors(AOData2dGrid);
134*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridComputeVertexBoundary(AOData2dGrid);
135*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridDraw(AOData2dGrid,PetscDraw);
136*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridDestroy(AOData2dGrid);
137*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridCreate(AOData2dGrid*);
138*2f2e5d10SKris Buschelman EXTERN PetscErrorCode PETSCDM_DLLEXPORT AOData2dGridToAOData(AOData2dGrid,AOData*);
1391ec7a0b9SBarry Smith 
140e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END
1417588ac45SBarry Smith #endif
142