From 3e1d8092185da31d10294a40d4363f2ca4fc056c Mon Sep 17 00:00:00 2001 From: Norihiro Watanabe <norihiro.watanabe@ufz.de> Date: Wed, 2 Nov 2016 14:14:13 +0100 Subject: [PATCH] [Math/Eigen] support PardisoLU if MKL is available --- MathLib/LinAlg/Eigen/EigenLinearSolver.cpp | 11 +++++++++++ MathLib/LinAlg/Eigen/EigenOption.cpp | 4 ++++ MathLib/LinAlg/Eigen/EigenOption.h | 3 +++ 3 files changed, 18 insertions(+) diff --git a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp index dbff3748344..bc22dc04cd8 100644 --- a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp +++ b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp @@ -11,6 +11,10 @@ #include <logog/include/logog.hpp> +#ifdef USE_MKL +#include <Eigen/PardisoSupport> +#endif + #include "BaseLib/ConfigTree.h" #include "EigenVector.h" #include "EigenMatrix.h" @@ -174,6 +178,13 @@ EigenLinearSolver::EigenLinearSolver( _solver = details::createIterativeSolver(_option.solver_type, _option.precon_type); return; +#ifdef USE_MKL + case EigenOption::SolverType::PardisoLU: { + using SolverType = Eigen::PardisoLU<EigenMatrix::RawMatrixType>; + _solver.reset(new details::EigenDirectLinearSolver<SolverType>); + return; + } +#endif } OGS_FATAL("Invalid Eigen linear solver type. Aborting."); diff --git a/MathLib/LinAlg/Eigen/EigenOption.cpp b/MathLib/LinAlg/Eigen/EigenOption.cpp index 3c273491484..a6200c8e97a 100644 --- a/MathLib/LinAlg/Eigen/EigenOption.cpp +++ b/MathLib/LinAlg/Eigen/EigenOption.cpp @@ -29,6 +29,10 @@ EigenOption::SolverType EigenOption::getSolverType(const std::string &solver_nam return SolverType::BiCGSTAB; if (solver_name == "SparseLU") return SolverType::SparseLU; +#ifdef USE_MKL + if (solver_name == "PardisoLU") + return SolverType::PardisoLU; +#endif OGS_FATAL("Unknown Eigen solver type `%s'", solver_name.c_str()); } diff --git a/MathLib/LinAlg/Eigen/EigenOption.h b/MathLib/LinAlg/Eigen/EigenOption.h index 5b64fc41a7b..d90997fa1b6 100644 --- a/MathLib/LinAlg/Eigen/EigenOption.h +++ b/MathLib/LinAlg/Eigen/EigenOption.h @@ -24,6 +24,9 @@ struct EigenOption final CG, BiCGSTAB, SparseLU +#ifdef USE_MKL + , PardisoLU +#endif }; /// Preconditioner type -- GitLab