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