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

138 {
139 INFO("-> compute with Eigen direct linear solver {:s}",
140 EigenOption::getSolverName(opt.solver_type));
141 if (!A.isCompressed())
142 {
143 A.makeCompressed();
144 }
145
146 solver_.compute(A);
147 if (solver_.info() != Eigen::Success)
148 {
149 ERR("Failed during Eigen linear solver initialization");
150 return false;
151 }
152
153 return true;
154 }
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:28
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:40
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 120 of file EigenLinearSolver.cpp.

121 {
122 INFO("-> solve with Eigen direct linear solver {:s}",
123 EigenOption::getSolverName(opt.solver_type));
124
125 x = solver_.solve(b);
126 if (solver_.info() != Eigen::Success || x.hasNaN())
127 {
128 ERR("Failed during Eigen linear solve");
129 return false;
130 }
131
132 return true;
133 }

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

Referenced by computeImpl(), and solveImpl().


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