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 124 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 linear_solver_behaviour)
bool didComputeAtLeastOnce () const

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 142 of file EigenLinearSolver.cpp.

145 {
146 INFO("-> compute with Eigen direct linear solver {:s}",
147 EigenOption::getSolverName(opt.solver_type));
148 if (!A.isCompressed())
149 {
150 A.makeCompressed();
151 }
152
153 solver_.compute(A);
154 if (solver_.info() != Eigen::Success)
155 {
156 ERR("Failed during Eigen linear solver initialization");
157 return false;
158 }
159
160 return true;
161 }
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:36
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:48
Template class for Eigen direct linear solvers.

References ERR(), MathLib::EigenOption::getSolverName(), INFO(), 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 127 of file EigenLinearSolver.cpp.

128 {
129 INFO("-> solve with Eigen direct linear solver {:s}",
130 EigenOption::getSolverName(opt.solver_type));
131
132 x = solver_.solve(b);
133 if (solver_.info() != Eigen::Success || x.hasNaN())
134 {
135 ERR("Failed during Eigen linear solve");
136 return false;
137 }
138
139 return true;
140 }

References ERR(), MathLib::EigenOption::getSolverName(), INFO(), solver_, and MathLib::EigenOption::solver_type.

Member Data Documentation

◆ solver_

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

Definition at line 164 of file EigenLinearSolver.cpp.

Referenced by computeImpl(), and solveImpl().


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