OGS
MathLib::EigenLinearSolver Class Referencefinal

Detailed Description

Definition at line 25 of file EigenLinearSolver.h.

#include <EigenLinearSolver.h>

Collaboration diagram for MathLib::EigenLinearSolver:
[legend]

Public Member Functions

 EigenLinearSolver (std::string const &solver_name, EigenOption const &option)
 
 ~EigenLinearSolver ()
 
void setOption (const EigenOption &option)
 
EigenOptiongetOption ()
 
bool compute (EigenMatrix &A)
 
bool solve (EigenVector &b, EigenVector &x)
 
bool solve (EigenMatrix &A, EigenVector &b, EigenVector &x)
 Computes and solves in a single call.
 

Protected Member Functions

void setRestart ()
 
void setL ()
 
void setS ()
 
void setSmoothing ()
 
void setAngle ()
 
void setResidualUpdate ()
 

Protected Attributes

EigenOption option_
 
std::unique_ptr< EigenLinearSolverBasesolver_
 

Constructor & Destructor Documentation

◆ EigenLinearSolver()

MathLib::EigenLinearSolver::EigenLinearSolver ( std::string const &  solver_name,
EigenOption const &  option 
)
explicit

Constructor

Parameters
solver_nameA name used as a prefix for command line options if there are such options available.
optionEigen linear solver options.

Definition at line 425 of file EigenLinearSolver.cpp.

427 : option_(option)
428{
429 using Matrix = EigenMatrix::RawMatrixType;
430
431 switch (option_.solver_type)
432 {
434 {
435 using SolverType =
436 Eigen::SparseLU<Matrix, Eigen::COLAMDOrdering<int>>;
437 solver_ = std::make_unique<
438 details::EigenDirectLinearSolver<SolverType>>();
439 return;
440 }
449 return;
451 {
452#ifdef USE_MKL
453 using SolverType = Eigen::PardisoLU<EigenMatrix::RawMatrixType>;
454 solver_.reset(new details::EigenDirectLinearSolver<SolverType>);
455 return;
456#else
457 OGS_FATAL(
458 "The code is not compiled with Intel MKL. Linear solver type "
459 "PardisoLU is not available.");
460#endif
461 }
462 }
463
464 OGS_FATAL("Invalid Eigen linear solver type. Aborting.");
465}
#define OGS_FATAL(...)
Definition: Error.h:26
std::unique_ptr< EigenLinearSolverBase > solver_
Eigen::SparseMatrix< double, Eigen::RowMajor > RawMatrixType
Definition: EigenMatrix.h:30
std::unique_ptr< EigenLinearSolverBase > createIterativeSolver()
PreconType precon_type
Preconditioner type.
Definition: EigenOption.h:44
SolverType solver_type
Linear solver type.
Definition: EigenOption.h:42

References MathLib::EigenOption::BiCGSTAB, MathLib::EigenOption::BiCGSTABL, MathLib::EigenOption::CG, MathLib::details::createIterativeSolver(), MathLib::EigenOption::GMRES, MathLib::EigenOption::IDRS, MathLib::EigenOption::IDRSTABL, OGS_FATAL, option_, MathLib::EigenOption::PardisoLU, MathLib::EigenOption::precon_type, solver_, MathLib::EigenOption::solver_type, and MathLib::EigenOption::SparseLU.

◆ ~EigenLinearSolver()

MathLib::EigenLinearSolver::~EigenLinearSolver ( )
default

Member Function Documentation

◆ compute()

bool MathLib::EigenLinearSolver::compute ( EigenMatrix A)

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

470{
471 INFO("------------------------------------------------------------------");
472 INFO("*** Eigen solver compute()");
473
474 return solver_->compute(A.getRawMatrix(), option_);
475}
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition: Logging.h:35

References MathLib::EigenMatrix::getRawMatrix(), INFO(), option_, and solver_.

◆ getOption()

EigenOption & MathLib::EigenLinearSolver::getOption ( )
inline

get linear solver options

Definition at line 47 of file EigenLinearSolver.h.

47{ return option_; }

References option_.

◆ setAngle()

void MathLib::EigenLinearSolver::setAngle ( )
protected

◆ setL()

void MathLib::EigenLinearSolver::setL ( )
protected

◆ setOption()

void MathLib::EigenLinearSolver::setOption ( const EigenOption option)
inline

copy linear solvers options

Definition at line 42 of file EigenLinearSolver.h.

42{ option_ = option; }

References option_.

◆ 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]

bool MathLib::EigenLinearSolver::solve ( EigenMatrix A,
EigenVector b,
EigenVector x 
)

Computes and solves in a single call.

Definition at line 485 of file EigenLinearSolver.cpp.

486{
487 return solver_->compute(A.getRawMatrix(), option_) &&
488 solver_->solve(b.getRawVector(), x.getRawVector(), option_);
489}

References MathLib::EigenMatrix::getRawMatrix(), MathLib::EigenVector::getRawVector(), option_, and solver_.

◆ solve() [2/2]

bool MathLib::EigenLinearSolver::solve ( EigenVector b,
EigenVector x 
)

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

478{
479 INFO("------------------------------------------------------------------");
480 INFO("*** Eigen solver solve()");
481
482 return solver_->solve(b.getRawVector(), x.getRawVector(), option_);
483}

References MathLib::EigenVector::getRawVector(), INFO(), option_, and solver_.

Member Data Documentation

◆ option_

EigenOption MathLib::EigenLinearSolver::option_
protected

Definition at line 70 of file EigenLinearSolver.h.

Referenced by EigenLinearSolver(), compute(), getOption(), setOption(), and solve().

◆ solver_

std::unique_ptr<EigenLinearSolverBase> MathLib::EigenLinearSolver::solver_
protected

Definition at line 71 of file EigenLinearSolver.h.

Referenced by EigenLinearSolver(), compute(), and solve().


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