Skip to content
Snippets Groups Projects
Commit 6f8ba87c authored by Norihiro Watanabe's avatar Norihiro Watanabe
Browse files

[Math/Eigen] support GMRES

parent 0344fff1
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
......@@ -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());
}
......
......@@ -24,7 +24,8 @@ struct EigenOption final
CG,
BiCGSTAB,
SparseLU,
PardisoLU
PardisoLU,
GMRES
};
/// Preconditioner type
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment