diff --git a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp index db003d286524711ebdc704d49087fe39d52ba21b..c04c897a6e1e582358065a95330895f6ab801a6b 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 5cd640d8724c6dad504aae879fff11c28c379b29..c64f36301386eed940ca70c2b4eded9c7c8732f5 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 84af7c8f607b996b2aa7065749a2efdd49e32994..619b01f1685a4f404c84d0f57d9e6c70edacf4a2 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); + }; }