OGS
MathLib::details::EigenDirectLinearSolver< T_SOLVER > Class Template Referencefinal

Detailed Description

template<class T_SOLVER>
class MathLib::details::EigenDirectLinearSolver< T_SOLVER >

Template class for Eigen direct linear solvers.

Definition at line 98 of file EigenLinearSolver.cpp.

Inheritance diagram for MathLib::details::EigenDirectLinearSolver< T_SOLVER >:
[legend]
Collaboration diagram for MathLib::details::EigenDirectLinearSolver< T_SOLVER >:
[legend]

Public Member Functions

bool solveImpl (Vector const &b, Vector &x, EigenOption &opt) override
 
bool computeImpl (Matrix &A, EigenOption &opt, MathLib::LinearSolverBehaviour const linear_solver_behaviour) override
 
- Public Member Functions inherited from MathLib::EigenLinearSolverBase
virtual ~EigenLinearSolverBase ()=default
 
bool solve (Vector &b, Vector &x, EigenOption &opt)
 
bool compute (Matrix &A, EigenOption &opt, MathLib::LinearSolverBehaviour const linear_solver_behaviour)
 

Private Attributes

T_SOLVER solver_
 

Additional Inherited Members

- Public Types inherited from MathLib::EigenLinearSolverBase
using Vector = EigenVector::RawVectorType
 
using Matrix = EigenMatrix::RawMatrixType
 

Member Function Documentation

◆ computeImpl()

template<class T_SOLVER >
bool MathLib::details::EigenDirectLinearSolver< T_SOLVER >::computeImpl ( Matrix & A,
EigenOption & opt,
MathLib::LinearSolverBehaviour const linear_solver_behaviour )
inlineoverridevirtual

Implements MathLib::EigenLinearSolverBase.

Definition at line 116 of file EigenLinearSolver.cpp.

119 {
120 INFO("-> compute with Eigen direct linear solver {:s}",
121 EigenOption::getSolverName(opt.solver_type));
122 if (!A.isCompressed())
123 {
124 A.makeCompressed();
125 }
126
127 solver_.compute(A);
128 if (solver_.info() != Eigen::Success)
129 {
130 ERR("Failed during Eigen linear solver initialization");
131 return false;
132 }
133
134 return true;
135 }
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:35
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:45
static std::string getSolverName(SolverType const solver_type)
return a linear solver name from the solver type

References ERR(), MathLib::EigenOption::getSolverName(), INFO(), MathLib::details::EigenDirectLinearSolver< T_SOLVER >::solver_, and MathLib::EigenOption::solver_type.

◆ solveImpl()

template<class T_SOLVER >
bool MathLib::details::EigenDirectLinearSolver< T_SOLVER >::solveImpl ( Vector const & b,
Vector & x,
EigenOption & opt )
inlineoverridevirtual

Implements MathLib::EigenLinearSolverBase.

Definition at line 101 of file EigenLinearSolver.cpp.

102 {
103 INFO("-> solve with Eigen direct linear solver {:s}",
104 EigenOption::getSolverName(opt.solver_type));
105
106 x = solver_.solve(b);
107 if (solver_.info() != Eigen::Success || x.hasNaN())
108 {
109 ERR("Failed during Eigen linear solve");
110 return false;
111 }
112
113 return true;
114 }

References ERR(), MathLib::EigenOption::getSolverName(), INFO(), MathLib::details::EigenDirectLinearSolver< T_SOLVER >::solver_, and MathLib::EigenOption::solver_type.

Member Data Documentation

◆ solver_


The documentation for this class was generated from the following file: