Skip to content
Snippets Groups Projects
Commit 3742563e authored by Norihiro Watanabe's avatar Norihiro Watanabe Committed by Dmitri Naumov
Browse files

[Eigen] log output solver types

parent aae80784
No related branches found
No related tags found
No related merge requests found
...@@ -52,9 +52,10 @@ template <class T_SOLVER> ...@@ -52,9 +52,10 @@ template <class T_SOLVER>
class EigenDirectLinearSolver final : public EigenLinearSolverBase class EigenDirectLinearSolver final : public EigenLinearSolverBase
{ {
public: public:
bool solve(Matrix& A, Vector const& b, Vector& x, EigenOption& /*opt*/) override bool solve(Matrix& A, Vector const& b, Vector& x, EigenOption& opt) override
{ {
INFO("-> solve"); INFO("-> solve with %s",
EigenOption::getSolverName(opt.solver_type).c_str());
if (!A.isCompressed()) A.makeCompressed(); if (!A.isCompressed()) A.makeCompressed();
_solver.compute(A); _solver.compute(A);
...@@ -83,7 +84,9 @@ class EigenIterativeLinearSolver final : public EigenLinearSolverBase ...@@ -83,7 +84,9 @@ class EigenIterativeLinearSolver final : public EigenLinearSolverBase
public: public:
bool solve(Matrix& A, Vector const& b, Vector& x, EigenOption& opt) override bool solve(Matrix& A, Vector const& b, Vector& x, EigenOption& opt) override
{ {
INFO("-> solve"); INFO("-> solve with %s (precon %s)",
EigenOption::getSolverName(opt.solver_type).c_str(),
EigenOption::getPreconName(opt.precon_type).c_str());
_solver.setTolerance(opt.error_tolerance); _solver.setTolerance(opt.error_tolerance);
_solver.setMaxIterations(opt.max_iterations); _solver.setMaxIterations(opt.max_iterations);
......
...@@ -52,4 +52,34 @@ EigenOption::PreconType EigenOption::getPreconType(const std::string &precon_nam ...@@ -52,4 +52,34 @@ EigenOption::PreconType EigenOption::getPreconType(const std::string &precon_nam
OGS_FATAL("Unknown Eigen preconditioner type `%s'", precon_name.c_str()); OGS_FATAL("Unknown Eigen preconditioner type `%s'", precon_name.c_str());
} }
std::string EigenOption::getSolverName(SolverType const solver_type)
{
switch (solver_type) {
case SolverType::CG:
return "CG";
case SolverType::BiCGSTAB:
return "BiCGSTAB";
case SolverType::SparseLU:
return "SparseLU";
case SolverType::PardisoLU:
return "PardisoLU";
case SolverType::GMRES:
return "GMRES";
}
return "Invalid";
}
std::string EigenOption::getPreconName(PreconType const precon_type)
{
switch (precon_type) {
case PreconType::NONE:
return "NONE";
case PreconType::DIAGONAL:
return "DIAGONAL";
case PreconType::ILUT:
return "ILUT";
}
return "Invalid";
}
} //MathLib } //MathLib
...@@ -71,6 +71,13 @@ struct EigenOption final ...@@ -71,6 +71,13 @@ struct EigenOption final
/// is returned. /// is returned.
static PreconType getPreconType(const std::string &precon_name); static PreconType getPreconType(const std::string &precon_name);
/// return a linear solver name from the solver type
static std::string getSolverName(SolverType const solver_type);
/// return a preconditioner name from the preconditioner type
static std::string getPreconName(PreconType const precon_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