Definition at line 26 of file EigenLinearSolver.h.
#include <EigenLinearSolver.h>
◆ EigenLinearSolver()
MathLib::EigenLinearSolver::EigenLinearSolver |
( |
std::string const & | solver_name, |
|
|
EigenOption const & | option ) |
|
explicit |
Constructor
- Parameters
-
solver_name | A name used as a prefix for command line options if there are such options available. |
option | Eigen linear solver options. |
Definition at line 501 of file EigenLinearSolver.cpp.
504{
506
508 {
510 {
511 using SolverType =
512 Eigen::SparseLU<Matrix, Eigen::COLAMDOrdering<int>>;
514 details::EigenDirectLinearSolver<SolverType>>();
516 return;
517 }
529 return;
536 return;
538 {
539#ifdef USE_MKL
540 using SolverType = Eigen::PardisoLU<EigenMatrix::RawMatrixType>;
541 solver_.reset(
new details::EigenDirectLinearSolver<SolverType>);
543 return;
544#else
546 "The code is not compiled with Intel MKL. Linear solver type "
547 "PardisoLU is not available.");
548#endif
549 }
550 }
551
552 OGS_FATAL(
"Invalid Eigen linear solver type. Aborting.");
553}
bool can_solve_rectangular_
std::unique_ptr< EigenLinearSolverBase > solver_
Eigen::SparseMatrix< double, Eigen::RowMajor > RawMatrixType
std::unique_ptr< EigenLinearSolverBase > createIterativeSolver()
PreconType precon_type
Preconditioner type.
TriangularMatrixType triangular_matrix_type
Triangular Matrix Type.
SolverType solver_type
Linear solver type.
References MathLib::EigenOption::BiCGSTAB, MathLib::EigenOption::BiCGSTABL, can_solve_rectangular_, MathLib::EigenOption::CG, MathLib::details::createIterativeSolver(), MathLib::EigenOption::GMRES, MathLib::EigenOption::IDRS, MathLib::EigenOption::IDRSTABL, MathLib::EigenOption::LeastSquareCG, option_, MathLib::EigenOption::PardisoLU, MathLib::EigenOption::precon_type, solver_, MathLib::EigenOption::solver_type, and MathLib::EigenOption::triangular_matrix_type.
◆ ~EigenLinearSolver()
MathLib::EigenLinearSolver::~EigenLinearSolver |
( |
| ) |
|
|
default |
◆ canSolveRectangular()
bool MathLib::EigenLinearSolver::canSolveRectangular |
( |
| ) |
const |
|
inline |
◆ compute()
Performs the compute() step of the Eigen linear solver.
I.e., computes the (LU) decomposition in case of a direct solver, or computes the preconditioner of an iterative solver.
Definition at line 557 of file EigenLinearSolver.cpp.
560{
561 INFO(
"------------------------------------------------------------------");
562 INFO(
"*** Eigen solver compute()");
563
564 return solver_->compute(A.getRawMatrix(),
option_, linear_solver_behaviour);
565}
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
References MathLib::EigenMatrix::getRawMatrix(), and INFO().
◆ getOption()
EigenOption & MathLib::EigenLinearSolver::getOption |
( |
| ) |
|
|
inline |
◆ setAngle()
void MathLib::EigenLinearSolver::setAngle |
( |
| ) |
|
|
protected |
◆ setL()
void MathLib::EigenLinearSolver::setL |
( |
| ) |
|
|
protected |
◆ setOption()
void MathLib::EigenLinearSolver::setOption |
( |
const EigenOption & | option | ) |
|
|
inline |
◆ setResidualUpdate()
void MathLib::EigenLinearSolver::setResidualUpdate |
( |
| ) |
|
|
protected |
◆ setRestart()
void MathLib::EigenLinearSolver::setRestart |
( |
| ) |
|
|
protected |
◆ setS()
void MathLib::EigenLinearSolver::setS |
( |
| ) |
|
|
protected |
◆ setSmoothing()
void MathLib::EigenLinearSolver::setSmoothing |
( |
| ) |
|
|
protected |
◆ solve() [1/2]
◆ solve() [2/2]
Solves the linear system for the given right-hand side b
and initial guess x
.
- Precondition
- compute() must have been called before. (Not necessarily for every
x
and b
separately, but for every new/changed matrix A.
Definition at line 567 of file EigenLinearSolver.cpp.
568{
569 INFO(
"------------------------------------------------------------------");
570 INFO(
"*** Eigen solver solve()");
571
572 return solver_->solve(b.getRawVector(), x.getRawVector(),
option_);
573}
References MathLib::EigenVector::getRawVector(), and INFO().
◆ can_solve_rectangular_
bool MathLib::EigenLinearSolver::can_solve_rectangular_ = false |
|
protected |
◆ option_
◆ solver_
The documentation for this class was generated from the following files: