From 3742563e0ed00b64c6bb42d345e6c50763d202af Mon Sep 17 00:00:00 2001 From: Norihiro Watanabe <norihiro.watanabe@ufz.de> Date: Tue, 8 Nov 2016 10:13:12 +0100 Subject: [PATCH] [Eigen] log output solver types --- MathLib/LinAlg/Eigen/EigenLinearSolver.cpp | 9 ++++--- MathLib/LinAlg/Eigen/EigenOption.cpp | 30 ++++++++++++++++++++++ MathLib/LinAlg/Eigen/EigenOption.h | 7 +++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp index db003d28652..c04c897a6e1 100644 --- a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp +++ b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp @@ -52,9 +52,10 @@ template <class T_SOLVER> class EigenDirectLinearSolver final : public EigenLinearSolverBase { 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(); _solver.compute(A); @@ -83,7 +84,9 @@ class EigenIterativeLinearSolver final : public EigenLinearSolverBase public: 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.setMaxIterations(opt.max_iterations); diff --git a/MathLib/LinAlg/Eigen/EigenOption.cpp b/MathLib/LinAlg/Eigen/EigenOption.cpp index 5cd640d8724..c64f3630138 100644 --- a/MathLib/LinAlg/Eigen/EigenOption.cpp +++ b/MathLib/LinAlg/Eigen/EigenOption.cpp @@ -52,4 +52,34 @@ EigenOption::PreconType EigenOption::getPreconType(const std::string &precon_nam 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 diff --git a/MathLib/LinAlg/Eigen/EigenOption.h b/MathLib/LinAlg/Eigen/EigenOption.h index 84af7c8f607..619b01f1685 100644 --- a/MathLib/LinAlg/Eigen/EigenOption.h +++ b/MathLib/LinAlg/Eigen/EigenOption.h @@ -71,6 +71,13 @@ struct EigenOption final /// is returned. 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); + }; } -- GitLab