diff --git a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp index f308a482925b8e06151026be529e855ec0c4d448..d47e661337c9ce22fc60f735177d8e6382b4d401 100644 --- a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp +++ b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp @@ -16,6 +16,8 @@ #endif #ifdef USE_EIGEN_UNSUPPORTED +#include <iostream> // to fix compiling errors in Eigen +#include <unsupported/Eigen/IterativeSolvers> #include <unsupported/Eigen/src/IterativeSolvers/Scaling.h> #endif @@ -152,6 +154,11 @@ std::unique_ptr<EigenLinearSolverBase> createIterativeSolver( case EigenOption::SolverType::CG: { return createIterativeSolver<EigenCGSolver>(precon_type); } +#ifdef USE_EIGEN_UNSUPPORTED + case EigenOption::SolverType::GMRES: { + return createIterativeSolver<Eigen::GMRES>(precon_type); + } +#endif default: OGS_FATAL("Invalid Eigen iterative linear solver type. Aborting."); } @@ -179,6 +186,9 @@ EigenLinearSolver::EigenLinearSolver( } case EigenOption::SolverType::BiCGSTAB: case EigenOption::SolverType::CG: +#ifdef USE_EIGEN_UNSUPPORTED + case EigenOption::SolverType::GMRES: +#endif _solver = details::createIterativeSolver(_option.solver_type, _option.precon_type); return; diff --git a/MathLib/LinAlg/Eigen/EigenOption.cpp b/MathLib/LinAlg/Eigen/EigenOption.cpp index 4fa228a245ac09319de712084eae0887b2bb73e6..5cd640d8724c6dad504aae879fff11c28c379b29 100644 --- a/MathLib/LinAlg/Eigen/EigenOption.cpp +++ b/MathLib/LinAlg/Eigen/EigenOption.cpp @@ -34,6 +34,8 @@ EigenOption::SolverType EigenOption::getSolverType(const std::string &solver_nam return SolverType::SparseLU; if (solver_name == "PardisoLU") return SolverType::PardisoLU; + if (solver_name == "GMRES") + return SolverType::GMRES; 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 46ccf4d4d092147e5fecd0490b1db4a9e7faab50..84af7c8f607b996b2aa7065749a2efdd49e32994 100644 --- a/MathLib/LinAlg/Eigen/EigenOption.h +++ b/MathLib/LinAlg/Eigen/EigenOption.h @@ -24,7 +24,8 @@ struct EigenOption final CG, BiCGSTAB, SparseLU, - PardisoLU + PardisoLU, + GMRES }; /// Preconditioner type