xref: /petsc/include/petscao.h (revision 0392740e5b25dd2200b451405b0ca5655c612b6f)
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 
12*0392740eSHong Zhang typedef enum {AO_BASIC=0, AO_ADVANCED=1, AO_MAPPING=2, AO_MEMORYSCALABLE=3} 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 
210e83c824SBarry Smith .seealso:  AOCreateBasic(), AOCreateBasicIS(), AOPetscToApplication(), AOView(), AOApplicationToPetsc()
22b9617806SBarry Smith S*/
231ac94ccfSSatish Balay typedef struct _p_AO* AO;
247588ac45SBarry Smith 
25b439297aSHong Zhang /*E
26b439297aSHong Zhang     AOType - String with the name of a PETSc application ordering or the creation function
27b439297aSHong Zhang        with an optional dynamic library name.
28b439297aSHong Zhang 
29b439297aSHong Zhang    Level: beginner
30b439297aSHong Zhang 
31b439297aSHong Zhang .seealso: AOSetType(), AO
32b439297aSHong Zhang E*/
33b439297aSHong Zhang #define AOType char*
34b439297aSHong Zhang #define AOBASIC               "basic"
35b439297aSHong Zhang #define AOADVANCED            "advanced"
36b439297aSHong Zhang #define AOMAPPING             "mapping"
37*0392740eSHong Zhang #define AOMEMORYSCALABLE      "memoryscalable"
38b439297aSHong Zhang 
398ba1e511SMatthew Knepley /* Logging support */
407087cfbeSBarry Smith extern PetscClassId  AO_CLASSID;
418ba1e511SMatthew Knepley 
427087cfbeSBarry Smith extern PetscErrorCode  AOInitializePackage(const char[]);
438ba1e511SMatthew Knepley 
44b439297aSHong Zhang extern PetscErrorCode  AOCreate(MPI_Comm,AO*);
45b439297aSHong Zhang extern PetscErrorCode  AOSetIS(AO,IS,IS);
46b439297aSHong Zhang extern PetscErrorCode  AOSetFromOptions(AO);
47b439297aSHong Zhang 
487087cfbeSBarry Smith extern PetscErrorCode  AOCreateBasic(MPI_Comm,PetscInt,const PetscInt[],const PetscInt[],AO*);
497087cfbeSBarry Smith extern PetscErrorCode  AOCreateBasicIS(IS,IS,AO*);
50*0392740eSHong Zhang extern PetscErrorCode  AOCreateMemoryScalable(MPI_Comm,PetscInt,const PetscInt[],const PetscInt[],AO*);
51*0392740eSHong Zhang extern PetscErrorCode  AOCreateMemoryScalableIS(IS,IS,AO*);
527087cfbeSBarry Smith extern PetscErrorCode  AOCreateMapping(MPI_Comm,PetscInt,const PetscInt[],const PetscInt[],AO*);
537087cfbeSBarry Smith extern PetscErrorCode  AOCreateMappingIS(IS,IS,AO*);
544ebda54eSMatthew Knepley 
557087cfbeSBarry Smith extern PetscErrorCode  AOView(AO,PetscViewer);
56b439297aSHong Zhang 
57b439297aSHong Zhang extern PetscErrorCode  AODestroy_(AO);
58b439297aSHong Zhang #define AODestroy(a)  (AODestroy_(a) || (((a) = 0),0))
59b439297aSHong Zhang 
60b439297aSHong Zhang /* Dynamic creation and loading functions */
61b439297aSHong Zhang extern PetscFList AOList;
62b439297aSHong Zhang extern PetscBool  AORegisterAllCalled;
63b439297aSHong Zhang extern PetscErrorCode  AOSetType(AO, const AOType);
64b439297aSHong Zhang extern PetscErrorCode  AOGetType(AO, const AOType *);
654ebda54eSMatthew Knepley 
667087cfbeSBarry Smith extern PetscErrorCode  AORegister(const char [], const char [], const char [], PetscErrorCode (*)(AO));
67b439297aSHong Zhang extern PetscErrorCode  AORegisterAll(const char []);
68b439297aSHong Zhang extern PetscErrorCode  AORegisterDestroy(void);
69b439297aSHong Zhang 
704ebda54eSMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
71985db425SBarry Smith #define AORegisterDynamic(a,b,c,d) AORegister(a,b,c,0)
724ebda54eSMatthew Knepley #else
73985db425SBarry Smith #define AORegisterDynamic(a,b,c,d) AORegister(a,b,c,d)
744ebda54eSMatthew Knepley #endif
754ebda54eSMatthew Knepley 
767087cfbeSBarry Smith extern PetscErrorCode  AOPetscToApplication(AO,PetscInt,PetscInt[]);
777087cfbeSBarry Smith extern PetscErrorCode  AOApplicationToPetsc(AO,PetscInt,PetscInt[]);
787087cfbeSBarry Smith extern PetscErrorCode  AOPetscToApplicationIS(AO,IS);
797087cfbeSBarry Smith extern PetscErrorCode  AOApplicationToPetscIS(AO,IS);
807588ac45SBarry Smith 
817087cfbeSBarry Smith extern PetscErrorCode  AOPetscToApplicationPermuteInt(AO, PetscInt, PetscInt[]);
827087cfbeSBarry Smith extern PetscErrorCode  AOApplicationToPetscPermuteInt(AO, PetscInt, PetscInt[]);
837087cfbeSBarry Smith extern PetscErrorCode  AOPetscToApplicationPermuteReal(AO, PetscInt, PetscReal[]);
847087cfbeSBarry Smith extern PetscErrorCode  AOApplicationToPetscPermuteReal(AO, PetscInt, PetscReal[]);
854ebda54eSMatthew Knepley 
867087cfbeSBarry Smith extern PetscErrorCode  AOMappingHasApplicationIndex(AO, PetscInt, PetscBool  *);
877087cfbeSBarry Smith extern PetscErrorCode  AOMappingHasPetscIndex(AO, PetscInt, PetscBool  *);
887588ac45SBarry Smith 
89376ee591SBarry Smith /* ----------------------------------------------------*/
90e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END
917588ac45SBarry Smith #endif
92