OGS
MathLib::LinearSolverOptionsParser< EigenLinearSolver > Struct Referencefinal

Detailed Description

Definition at line 25 of file LinearSolverOptionsParser.h.

#include <LinearSolverOptionsParser.h>

Public Member Functions

std::tuple< std::string, EigenOptionparseNameAndOptions (std::string const &prefix, BaseLib::ConfigTree const *const solver_config) const
 

Member Function Documentation

◆ parseNameAndOptions()

std::tuple< std::string, EigenOption > MathLib::LinearSolverOptionsParser< EigenLinearSolver >::parseNameAndOptions ( std::string const & prefix,
BaseLib::ConfigTree const *const solver_config ) const

The method parses the linear solver options for Eigen.

Parameters
prefixthe prefix for the linear solver to distinguish different linear solvers for instance in the staggered schema
solver_configthe part of the property tree (usually created from the linear solver section in the project file)
Returns
the first item of the returned tuple is the solver prefix as string, the second item are all the options as an EigenOption object
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
Input File Parameter
prj__linear_solvers__linear_solver__eigen__l
Input File Parameter
prj__linear_solvers__linear_solver__eigen__s
Input File Parameter
prj__linear_solvers__linear_solver__eigen__smoothing
Input File Parameter
prj__linear_solvers__linear_solver__eigen__angle
Input File Parameter
prj__linear_solvers__linear_solver__eigen__residual_update

Definition at line 20 of file LinearSolverOptionsParser.cpp.

23{
24 if (!solver_config)
25 {
26 return {prefix, EigenOption{}};
27 }
28
29 ignoreOtherLinearSolvers(*solver_config, "eigen");
31 auto const config = solver_config->getConfigSubtreeOptional("eigen");
32 if (!config)
33 {
35 "OGS was compiled with Eigen but the config section in the "
36 "project file seems to be invalid");
37 }
38
39 EigenOption options;
40
41 if (auto solver_type =
43 config->getConfigParameterOptional<std::string>("solver_type"))
44 {
45 options.solver_type = MathLib::EigenOption::getSolverType(*solver_type);
46 }
47 if (auto precon_type =
49 config->getConfigParameterOptional<std::string>("precon_type"))
50 {
51 options.precon_type = MathLib::EigenOption::getPreconType(*precon_type);
52 }
53 if (auto error_tolerance =
55 config->getConfigParameterOptional<double>("error_tolerance"))
56 {
57 options.error_tolerance = *error_tolerance;
58 }
59 if (auto max_iteration_step =
61 config->getConfigParameterOptional<int>("max_iteration_step"))
62 {
63 options.max_iterations = *max_iteration_step;
64 }
65 if (auto scaling =
67 config->getConfigParameterOptional<bool>("scaling"))
68 {
69#ifdef USE_EIGEN_UNSUPPORTED
70 options.scaling = *scaling;
71#else
73 "The code is not compiled with the Eigen unsupported modules. "
74 "scaling is not available.");
75#endif
76 }
77 if (auto restart =
79 config->getConfigParameterOptional<int>("restart"))
80 {
81#ifdef USE_EIGEN_UNSUPPORTED
82 options.restart = *restart;
83#else
85 "The code is not compiled with the Eigen unsupported modules. "
86 "GMRES/GMRES option restart is not available.");
87#endif
88 }
89 if (auto l =
91 config->getConfigParameterOptional<int>("l"))
92 {
93#ifdef USE_EIGEN_UNSUPPORTED
94 options.l = *l;
95#else
97 "The code is not compiled with the Eigen unsupported modules.");
98#endif
99 }
100 if (auto s =
102 config->getConfigParameterOptional<int>("s"))
103 {
104#ifdef USE_EIGEN_UNSUPPORTED
105 options.s = *s;
106#else
107 OGS_FATAL(
108 "The code is not compiled with the Eigen unsupported modules.");
109#endif
110 }
111 if (auto smoothing =
113 config->getConfigParameterOptional<int>("smoothing"))
114 {
115#ifdef USE_EIGEN_UNSUPPORTED
116 options.smoothing = *smoothing;
117#else
118 OGS_FATAL(
119 "The code is not compiled with the Eigen unsupported modules.");
120#endif
121 }
122 if (auto angle =
124 config->getConfigParameterOptional<int>("angle"))
125 {
126#ifdef USE_EIGEN_UNSUPPORTED
127 options.angle = *angle;
128#else
129 OGS_FATAL(
130 "The code is not compiled with the Eigen unsupported modules.");
131#endif
132 }
133 if (auto residualupdate =
135 config->getConfigParameterOptional<int>("residual_update"))
136 {
137#ifdef USE_EIGEN_UNSUPPORTED
138 options.residualupdate = *residualupdate;
139#else
140 OGS_FATAL(
141 "The code is not compiled with the Eigen unsupported modules.");
142#endif
143 }
144 return {prefix, options};
145}
#define OGS_FATAL(...)
Definition Error.h:26
static const double s
void ignoreOtherLinearSolvers(const BaseLib::ConfigTree &config, const std::string &solver_name)
static PreconType getPreconType(const std::string &precon_name)
static SolverType getSolverType(const std::string &solver_name)

References MathLib::EigenOption::error_tolerance, BaseLib::ConfigTree::getConfigSubtreeOptional(), MathLib::EigenOption::getPreconType(), MathLib::EigenOption::getSolverType(), MathLib::ignoreOtherLinearSolvers(), MathLib::EigenOption::max_iterations, OGS_FATAL, MathLib::EigenOption::precon_type, MathLib::s, and MathLib::EigenOption::solver_type.


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