OGS
Eigen/LinearSolverOptionsParser.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
5
7#include "BaseLib/Error.h"
9
10namespace MathLib
11{
12std::tuple<std::string, EigenOption>
14 std::string const& prefix,
15 BaseLib::ConfigTree const* const solver_config) const
16{
17 if (!solver_config)
18 {
19 return {prefix, EigenOption{}};
20 }
21
22 ignoreOtherLinearSolvers(*solver_config, "eigen");
24 auto const config = solver_config->getConfigSubtreeOptional("eigen");
25 if (!config)
26 {
28 "OGS was compiled with Eigen but the config section in the "
29 "project file seems to be invalid");
30 }
31
32 EigenOption options;
33
34 if (auto solver_type =
36 config->getConfigParameterOptional<std::string>("solver_type"))
37 {
39 }
40 if (auto precon_type =
42 config->getConfigParameterOptional<std::string>("precon_type"))
43 {
45 }
46 if (auto error_tolerance =
48 config->getConfigParameterOptional<double>("error_tolerance"))
49 {
50 options.error_tolerance = *error_tolerance;
51 }
52 if (auto max_iteration_step =
54 config->getConfigParameterOptional<int>("max_iteration_step"))
55 {
56 options.max_iterations = *max_iteration_step;
57 }
58 if (auto triangular_matrix_type =
60 config->getConfigParameterOptional<std::string>("triangular_matrix"))
61 {
64 *triangular_matrix_type);
65 }
66 if (auto scaling =
68 config->getConfigParameterOptional<bool>("scaling"))
69 {
70#ifdef USE_EIGEN_UNSUPPORTED
71 options.scaling = *scaling;
72#else
74 "The code is not compiled with the Eigen unsupported modules. "
75 "scaling is not available.");
76#endif
77 }
78 if (auto restart =
80 config->getConfigParameterOptional<int>("restart"))
81 {
82#ifdef USE_EIGEN_UNSUPPORTED
83 options.restart = *restart;
84#else
86 "The code is not compiled with the Eigen unsupported modules. "
87 "GMRES/GMRES option restart is not available.");
88#endif
89 }
90 if (auto l =
92 config->getConfigParameterOptional<int>("l"))
93 {
94#ifdef USE_EIGEN_UNSUPPORTED
95 options.l = *l;
96#else
98 "The code is not compiled with the Eigen unsupported modules.");
99#endif
100 }
101 if (auto s =
103 config->getConfigParameterOptional<int>("s"))
104 {
105#ifdef USE_EIGEN_UNSUPPORTED
106 options.s = *s;
107#else
108 OGS_FATAL(
109 "The code is not compiled with the Eigen unsupported modules.");
110#endif
111 }
112 if (auto smoothing =
114 config->getConfigParameterOptional<int>("smoothing"))
115 {
116#ifdef USE_EIGEN_UNSUPPORTED
117 options.smoothing = *smoothing;
118#else
119 OGS_FATAL(
120 "The code is not compiled with the Eigen unsupported modules.");
121#endif
122 }
123 if (auto angle =
125 config->getConfigParameterOptional<int>("angle"))
126 {
127#ifdef USE_EIGEN_UNSUPPORTED
128 options.angle = *angle;
129#else
130 OGS_FATAL(
131 "The code is not compiled with the Eigen unsupported modules.");
132#endif
133 }
134 if (auto residualupdate =
136 config->getConfigParameterOptional<int>("residual_update"))
137 {
138#ifdef USE_EIGEN_UNSUPPORTED
139 options.residualupdate = *residualupdate;
140#else
141 OGS_FATAL(
142 "The code is not compiled with the Eigen unsupported modules.");
143#endif
144 }
145 return {prefix, options};
146}
147} // namespace MathLib
#define OGS_FATAL(...)
Definition Error.h:19
std::optional< ConfigTree > getConfigSubtreeOptional(std::string const &root) const
static const double s
void ignoreOtherLinearSolvers(const BaseLib::ConfigTree &config, const std::string &solver_name)
Option for Eigen sparse solver.
Definition EigenOption.h:12
static TriangularMatrixType getTriangularMatrixType(const std::string &triangular_matrix_name)
PreconType precon_type
Preconditioner type.
Definition EigenOption.h:47
TriangularMatrixType triangular_matrix_type
Triangular Matrix Type.
Definition EigenOption.h:49
static PreconType getPreconType(const std::string &precon_name)
SolverType solver_type
Linear solver type.
Definition EigenOption.h:45
double error_tolerance
Error tolerance.
Definition EigenOption.h:53
static SolverType getSolverType(const std::string &solver_name)
int max_iterations
Maximum iteration count.
Definition EigenOption.h:51