From 697bb39b379cd76e1fcc6a080f96fefe9ab0bab3 Mon Sep 17 00:00:00 2001 From: Simon Praetorius <simon.praetorius@tu-dresden.de> Date: Tue, 22 Jan 2019 13:53:07 +0100 Subject: [PATCH] resolve problem after petsc version update --- AMDiS/cmake3/target_enable_petsc.cmake | 3 ++- AMDiS/src/parallel/PetscHelper.cc | 4 +-- AMDiS/src/parallel/PetscHelper.h | 2 +- AMDiS/src/parallel/PetscSolverFeti.cc | 7 ++--- AMDiS/src/parallel/PetscSolverGlobalMatrix.cc | 11 ++++---- AMDiS/src/utility/PetscWrapper.h | 26 +++++++++++++++++++ 6 files changed, 41 insertions(+), 12 deletions(-) diff --git a/AMDiS/cmake3/target_enable_petsc.cmake b/AMDiS/cmake3/target_enable_petsc.cmake index f983704c..2719c0cf 100644 --- a/AMDiS/cmake3/target_enable_petsc.cmake +++ b/AMDiS/cmake3/target_enable_petsc.cmake @@ -39,7 +39,8 @@ macro(target_enable_petsc _TARGET_ _SCOPE_) $ENV{PETSC_ROOT}/lib/pkgconfig /usr/lib/petsc/lib/pkgconfig /usr/lib/petsc/linux-gnu-cxx-opt/lib/pkgconfig - /usr/lib/petsc/linux-gnu-c-opt/lib/pkgconfig) + /usr/lib/petsc/linux-gnu-c-opt/lib/pkgconfig + PATHS $ENV{PKG_CONFIG_PATH}) if (PETSC_PKG_CONFIG) get_filename_component(PETSC_PKG_CONFIG_PATH "${PETSC_PKG_CONFIG}" PATH CACHE) set(ENV{PKG_CONFIG_PATH} ${PETSC_PKG_CONFIG_PATH}) diff --git a/AMDiS/src/parallel/PetscHelper.cc b/AMDiS/src/parallel/PetscHelper.cc index 431e24a2..d49eadd1 100644 --- a/AMDiS/src/parallel/PetscHelper.cc +++ b/AMDiS/src/parallel/PetscHelper.cc @@ -284,7 +284,7 @@ namespace AMDiS const char* kspPrefix, KSPType kspType, PCType pcType, - const MatSolverPackage matSolverPackage, + const petsc::MatSolverPackage_t matSolverPackage, PetscReal rtol, PetscReal atol, PetscInt maxIt) @@ -300,7 +300,7 @@ namespace AMDiS KSPGetPC(ksp, &pc); PCSetType(pc, pcType); if (matSolverPackage != PETSC_NULL) - PCFactorSetMatSolverPackage(pc, matSolverPackage); + petsc::pc_factor_set_mat_solver_package(pc, matSolverPackage); PCSetFromOptions(pc); #ifndef NDEBUG diff --git a/AMDiS/src/parallel/PetscHelper.h b/AMDiS/src/parallel/PetscHelper.h index 00c392bc..74ad6697 100644 --- a/AMDiS/src/parallel/PetscHelper.h +++ b/AMDiS/src/parallel/PetscHelper.h @@ -104,7 +104,7 @@ namespace AMDiS const char* kspPrefix, KSPType kspType, PCType pcType, - const MatSolverPackage matSolverPackage, + const petsc::MatSolverPackage_t matSolverPackage, PetscReal rtol = PETSC_DEFAULT, PetscReal atol = PETSC_DEFAULT, PetscInt maxIt = PETSC_DEFAULT); diff --git a/AMDiS/src/parallel/PetscSolverFeti.cc b/AMDiS/src/parallel/PetscSolverFeti.cc index a53499a6..fdb210f7 100644 --- a/AMDiS/src/parallel/PetscSolverFeti.cc +++ b/AMDiS/src/parallel/PetscSolverFeti.cc @@ -31,6 +31,7 @@ #include "parallel/MpiHelper.h" #include "parallel/PetscSolverGlobalMatrix.h" #include "io/VtkWriter.h" +#include "utility/PetscWrapper.h" namespace AMDiS { namespace Parallel { @@ -1077,7 +1078,7 @@ namespace AMDiS { namespace Parallel { PC pc_schur_primal; KSPGetPC(ksp_schur_primal, &pc_schur_primal); PCSetType(pc_schur_primal, PCLU); - PCFactorSetMatSolverPackage(pc_schur_primal, MATSOLVERMUMPS); + petsc::pc_factor_set_mat_solver_package(pc_schur_primal, MATSOLVERMUMPS); KSPSetFromOptions(ksp_schur_primal); @@ -1588,10 +1589,10 @@ namespace AMDiS { namespace Parallel { KSPGetPC(ksp_interior, &pc_interior); if (isSymmetric) { PCSetType(pc_interior, PCCHOLESKY); - PCFactorSetMatSolverPackage(pc_interior, MATSOLVERMUMPS); + petsc::pc_factor_set_mat_solver_package(pc_interior, MATSOLVERMUMPS); } else { PCSetType(pc_interior, PCLU); - PCFactorSetMatSolverPackage(pc_interior, MATSOLVERUMFPACK); + petsc::pc_factor_set_mat_solver_package(pc_interior, MATSOLVERUMFPACK); } KSPSetFromOptions(ksp_interior); diff --git a/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc b/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc index 5394a7d6..dc676eaf 100644 --- a/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc +++ b/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc @@ -26,6 +26,7 @@ #include "parallel/StdMpi.h" #include "parallel/MpiHelper.h" #include "solver/PetscTypes.h" +#include "utility/PetscWrapper.h" using namespace std; @@ -336,13 +337,13 @@ namespace AMDiS { namespace Parallel { KSPGetPC(kspInterior, &pcInterior); if (isSymmetric) { PCSetType(pcInterior, PCCHOLESKY); - PCFactorSetMatSolverPackage(pcInterior, MATSOLVERMUMPS); + petsc::pc_factor_set_mat_solver_package(pcInterior, MATSOLVERMUMPS); } else { PCSetType(pcInterior, PCLU); if (localMatrix) - PCFactorSetMatSolverPackage(pcInterior, MATSOLVERUMFPACK); + petsc::pc_factor_set_mat_solver_package(pcInterior, MATSOLVERUMFPACK); else - PCFactorSetMatSolverPackage(pcInterior, MATSOLVERMUMPS); + petsc::pc_factor_set_mat_solver_package(pcInterior, MATSOLVERMUMPS); } KSPSetFromOptions(kspInterior); } @@ -469,7 +470,7 @@ namespace AMDiS { namespace Parallel { MatNullSpaceDestroy(&matNullspace); VecDestroy(&nullspaceBasis); } - + // delete allocated memory delete basisVec; @@ -600,7 +601,7 @@ namespace AMDiS { namespace Parallel { IS isrow, iscol; interiorMap->createIndexSet(isrow, startRow, numberOfRows); interiorMap->createIndexSet(iscol, startCol, numberOfCols); - MatGetSubMatrix(input, isrow, iscol, MAT_INITIAL_MATRIX, output); + petsc::mat_get_sub_matrix(input, isrow, iscol, MAT_INITIAL_MATRIX, output); ISDestroy(&iscol); ISDestroy(&isrow); } diff --git a/AMDiS/src/utility/PetscWrapper.h b/AMDiS/src/utility/PetscWrapper.h index ebe664f0..a881269d 100644 --- a/AMDiS/src/utility/PetscWrapper.h +++ b/AMDiS/src/utility/PetscWrapper.h @@ -102,6 +102,32 @@ namespace AMDiS #endif } +#if (PETSC_VERSION_MINOR >= 9) + using MatSolverPackage_t = MatSolverType; + inline PetscErrorCode pc_factor_set_mat_solver_package(PC pc, MatSolverType stype) + { + return PCFactorSetMatSolverType(pc, stype); + } +#else + using MatSolverPackage_t = MatSolverPackage; + inline PetscErrorCode pc_factor_set_mat_solver_package(PC pc, MatSolverPackage stype) + { + return PCFactorSetMatSolverPackage(pc, stype); + } +#endif + +#if (PETSC_VERSION_MINOR >= 8) + inline PetscErrorCode mat_get_sub_matrix(Mat mat, IS isrow, IS iscol, MatReuse cll, Mat *newmat) + { + return MatCreateSubMatrix(mat, isrow, iscol, cll, newmat); + } +#else + inline PetscErrorCode mat_get_sub_matrix(Mat mat, IS isrow, IS iscol, MatReuse cll, Mat *newmat) + { + return MatGetSubMatrix(mat, isrow, iscol, cll, newmat); + } +#endif + } // end namespace petsc } // end namespace AMDiS -- GitLab