Definition at line 30 of file EigenLinearSolver.h.
#include <EigenLinearSolver.h>
◆ EigenLinearSolver()
MathLib::EigenLinearSolver::EigenLinearSolver |
( |
const std::string & |
solver_name, |
|
|
BaseLib::ConfigTree const *const |
option |
|
) |
| |
Constructor
- Parameters
-
solver_name | A name used as a prefix for command line options if there are such options available. |
option | A pointer to a linear solver option. In case you omit this argument, default settings follow those of LisOption struct. |
Definition at line 222 of file EigenLinearSolver.cpp.
239 Eigen::SparseLU<Matrix, Eigen::COLAMDOrdering<int>>;
241 details::EigenDirectLinearSolver<SolverType>>();
253 using SolverType = Eigen::PardisoLU<EigenMatrix::RawMatrixType>;
254 solver_.reset(
new details::EigenDirectLinearSolver<SolverType>);
258 "The code is not compiled with Intel MKL. Linear solver type "
259 "PardisoLU is not available.");
264 OGS_FATAL(
"Invalid Eigen linear solver type. Aborting.");
void setOption(const BaseLib::ConfigTree &option)
std::unique_ptr< EigenLinearSolverBase > solver_
Eigen::SparseMatrix< double, Eigen::RowMajor > RawMatrixType
std::unique_ptr< EigenLinearSolverBase > createIterativeSolver()
PreconType precon_type
Preconditioner type.
SolverType solver_type
Linear solver type.
References MathLib::EigenOption::BiCGSTAB, MathLib::EigenOption::CG, MathLib::details::createIterativeSolver(), MathLib::EigenOption::GMRES, OGS_FATAL, option_, MathLib::EigenOption::PardisoLU, MathLib::EigenOption::precon_type, setOption(), solver_, MathLib::EigenOption::solver_type, and MathLib::EigenOption::SparseLU.
◆ ~EigenLinearSolver()
MathLib::EigenLinearSolver::~EigenLinearSolver |
( |
| ) |
|
|
default |
◆ getOption()
◆ setOption() [1/2]
parse linear solvers configuration
- Input File Parameter:
- prj__linear_solvers__linear_solver__eigen
- Input File Parameter:
- prj__linear_solvers__linear_solver__eigen__solver_type
- Input File Parameter:
- prj__linear_solvers__linear_solver__eigen__precon_type
- Input File Parameter:
- prj__linear_solvers__linear_solver__eigen__error_tolerance
- Input File Parameter:
- prj__linear_solvers__linear_solver__eigen__max_iteration_step
- Input File Parameter:
- prj__linear_solvers__linear_solver__eigen__scaling
- Input File Parameter:
- prj__linear_solvers__linear_solver__eigen__restart
Definition at line 269 of file EigenLinearSolver.cpp.
279 if (
auto solver_type =
281 ptSolver->getConfigParameterOptional<std::string>(
"solver_type"))
285 if (
auto precon_type =
287 ptSolver->getConfigParameterOptional<std::string>(
"precon_type"))
291 if (
auto error_tolerance =
293 ptSolver->getConfigParameterOptional<
double>(
"error_tolerance"))
297 if (
auto max_iteration_step =
299 ptSolver->getConfigParameterOptional<
int>(
"max_iteration_step"))
305 ptSolver->getConfigParameterOptional<
bool>(
"scaling"))
307 #ifdef USE_EIGEN_UNSUPPORTED
311 "The code is not compiled with the Eigen unsupported modules. "
312 "scaling is not available.");
317 ptSolver->getConfigParameterOptional<
int>(
"restart"))
319 #ifdef USE_EIGEN_UNSUPPORTED
323 "The code is not compiled with the Eigen unsupported modules. "
324 "GMRES/GMRES option restart is not available.");
std::optional< ConfigTree > getConfigSubtreeOptional(std::string const &root) const
void ignoreOtherLinearSolvers(const BaseLib::ConfigTree &config, const std::string &solver_name)
static PreconType getPreconType(const std::string &precon_name)
double error_tolerance
Error tolerance.
static SolverType getSolverType(const std::string &solver_name)
int max_iterations
Maximum iteration count.
References MathLib::EigenOption::error_tolerance, BaseLib::ConfigTree::getConfigSubtreeOptional(), MathLib::EigenOption::getPreconType(), MathLib::EigenOption::getSolverType(), MathLib::ignoreOtherLinearSolvers(), MathLib::EigenOption::max_iterations, OGS_FATAL, option_, MathLib::EigenOption::precon_type, and MathLib::EigenOption::solver_type.
Referenced by EigenLinearSolver().
◆ setOption() [2/2]
void MathLib::EigenLinearSolver::setOption |
( |
const EigenOption & |
option | ) |
|
|
inline |
◆ setRestart()
void MathLib::EigenLinearSolver::setRestart |
( |
| ) |
|
|
protected |
◆ solve()
Definition at line 329 of file EigenLinearSolver.cpp.
331 INFO(
"------------------------------------------------------------------");
332 INFO(
"*** Eigen solver computation");
334 #ifdef USE_EIGEN_UNSUPPORTED
335 std::unique_ptr<Eigen::IterScaling<EigenMatrix::RawMatrixType>> scal;
340 std::make_unique<Eigen::IterScaling<EigenMatrix::RawMatrixType>>();
341 scal->computeRef(A.getRawMatrix());
342 b.getRawVector() = scal->LeftScaling().cwiseProduct(b.getRawVector());
345 auto const success =
solver_->solve(A.getRawMatrix(), b.getRawVector(),
347 #ifdef USE_EIGEN_UNSUPPORTED
350 x.getRawVector() = scal->RightScaling().cwiseProduct(x.getRawVector());
354 INFO(
"------------------------------------------------------------------");
void INFO(char const *fmt, Args const &... args)
References MathLib::EigenMatrix::getRawMatrix(), MathLib::EigenVector::getRawVector(), INFO(), option_, and solver_.
◆ option_
◆ solver_
The documentation for this class was generated from the following files: