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" 107588ac45SBarry Smith 11b9617806SBarry Smith /*S 12b9617806SBarry Smith AO - Abstract PETSc object that manages mapping between different global numbering 13b9617806SBarry Smith 14b9617806SBarry Smith Level: intermediate 15b9617806SBarry Smith 16b9617806SBarry Smith Concepts: global numbering 17b9617806SBarry Smith 180e83c824SBarry Smith .seealso: AOCreateBasic(), AOCreateBasicIS(), AOPetscToApplication(), AOView(), AOApplicationToPetsc() 19b9617806SBarry Smith S*/ 201ac94ccfSSatish Balay typedef struct _p_AO* AO; 217588ac45SBarry Smith 2276bdecfbSBarry Smith /*J 23b439297aSHong Zhang AOType - String with the name of a PETSc application ordering or the creation function 24b439297aSHong Zhang with an optional dynamic library name. 25b439297aSHong Zhang 26b439297aSHong Zhang Level: beginner 27b439297aSHong Zhang 28b439297aSHong Zhang .seealso: AOSetType(), AO 2976bdecfbSBarry Smith J*/ 30b439297aSHong Zhang #define AOType char* 31b439297aSHong Zhang #define AOBASIC "basic" 32b439297aSHong Zhang #define AOADVANCED "advanced" 33b439297aSHong Zhang #define AOMAPPING "mapping" 340392740eSHong Zhang #define AOMEMORYSCALABLE "memoryscalable" 35b439297aSHong Zhang 368ba1e511SMatthew Knepley /* Logging support */ 37*014dd563SJed Brown PETSC_EXTERN PetscClassId AO_CLASSID; 388ba1e511SMatthew Knepley 39*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOInitializePackage(const char[]); 408ba1e511SMatthew Knepley 41*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOCreate(MPI_Comm,AO*); 42*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOSetIS(AO,IS,IS); 43*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOSetFromOptions(AO); 44b439297aSHong Zhang 45*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOCreateBasic(MPI_Comm,PetscInt,const PetscInt[],const PetscInt[],AO*); 46*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOCreateBasicIS(IS,IS,AO*); 47*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOCreateMemoryScalable(MPI_Comm,PetscInt,const PetscInt[],const PetscInt[],AO*); 48*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOCreateMemoryScalableIS(IS,IS,AO*); 49*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOCreateMapping(MPI_Comm,PetscInt,const PetscInt[],const PetscInt[],AO*); 50*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOCreateMappingIS(IS,IS,AO*); 514ebda54eSMatthew Knepley 52*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOView(AO,PetscViewer); 53*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AODestroy(AO*); 54b439297aSHong Zhang 55b439297aSHong Zhang /* Dynamic creation and loading functions */ 56*014dd563SJed Brown PETSC_EXTERN PetscFList AOList; 57*014dd563SJed Brown PETSC_EXTERN PetscBool AORegisterAllCalled; 58*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOSetType(AO, const AOType); 59*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOGetType(AO, const AOType *); 604ebda54eSMatthew Knepley 61*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AORegister(const char [], const char [], const char [], PetscErrorCode (*)(AO)); 62*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AORegisterAll(const char []); 63*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AORegisterDestroy(void); 64b439297aSHong Zhang 654ebda54eSMatthew Knepley #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 66985db425SBarry Smith #define AORegisterDynamic(a,b,c,d) AORegister(a,b,c,0) 674ebda54eSMatthew Knepley #else 68985db425SBarry Smith #define AORegisterDynamic(a,b,c,d) AORegister(a,b,c,d) 694ebda54eSMatthew Knepley #endif 704ebda54eSMatthew Knepley 71*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOPetscToApplication(AO,PetscInt,PetscInt[]); 72*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOApplicationToPetsc(AO,PetscInt,PetscInt[]); 73*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOPetscToApplicationIS(AO,IS); 74*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOApplicationToPetscIS(AO,IS); 757588ac45SBarry Smith 76*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOPetscToApplicationPermuteInt(AO, PetscInt, PetscInt[]); 77*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOApplicationToPetscPermuteInt(AO, PetscInt, PetscInt[]); 78*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOPetscToApplicationPermuteReal(AO, PetscInt, PetscReal[]); 79*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOApplicationToPetscPermuteReal(AO, PetscInt, PetscReal[]); 804ebda54eSMatthew Knepley 81*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOMappingHasApplicationIndex(AO, PetscInt, PetscBool *); 82*014dd563SJed Brown PETSC_EXTERN PetscErrorCode AOMappingHasPetscIndex(AO, PetscInt, PetscBool *); 837588ac45SBarry Smith 84376ee591SBarry Smith /* ----------------------------------------------------*/ 857588ac45SBarry Smith #endif 86