OGS
EigenOption.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
4#include "EigenOption.h"
5
6#include "BaseLib/Error.h"
7
8namespace MathLib
9{
11{
14 max_iterations = static_cast<int>(1e6);
15 error_tolerance = 1.e-16;
17#ifdef USE_EIGEN_UNSUPPORTED
18 scaling = false;
19 restart = 30;
20 l = 2;
21 s = 4;
22 angle = 0.7;
23 smoothing = false;
24 residualupdate = false;
25#endif
26}
27
29 const std::string& solver_name)
30{
31 if (solver_name == "CG")
32 {
33 return SolverType::CG;
34 }
35 if (solver_name == "LeastSquareCG")
36 {
38 }
39 if (solver_name == "BiCGSTAB")
40 {
42 }
43 if (solver_name == "BiCGSTABL")
44 {
46 }
47 if (solver_name == "IDRS")
48 {
49 return SolverType::IDRS;
50 }
51 if (solver_name == "IDRSTABL")
52 {
54 }
55 if (solver_name == "SparseLU")
56 {
58 }
59 if (solver_name == "PardisoLU")
60 {
62 }
63 if (solver_name == "GMRES")
64 {
65 return SolverType::GMRES;
66 }
67
68 OGS_FATAL("Unknown Eigen solver type `{:s}'", solver_name);
69}
70
72 const std::string& precon_name)
73{
74 if (precon_name == "NONE")
75 {
76 return PreconType::NONE;
77 }
78 if (precon_name == "DIAGONAL")
79 {
81 }
82 if (precon_name == "LeastSquareDIAGONAL")
83 {
85 }
86 if (precon_name == "ILUT")
87 {
88 return PreconType::ILUT;
89 }
90
91 OGS_FATAL("Unknown Eigen preconditioner type `{:s}'", precon_name);
92}
93
95 const std::string& triangular_matrix_name)
96{
97 if (triangular_matrix_name == "Lower")
98 {
100 }
101 if (triangular_matrix_name == "Upper")
102 {
104 }
105 if (triangular_matrix_name == "LowerUpper")
106 {
108 }
109
110 OGS_FATAL("Unknown triangular matrix type `{:s}'", triangular_matrix_name);
111}
112
114{
115 switch (solver_type)
116 {
117 case SolverType::CG:
118 return "CG";
120 return "LeastSquareCG";
122 return "BiCGSTAB";
124 return "BiCGSTABL";
125 case SolverType::IDRS:
126 return "IDRS";
128 return "IDRSTABL";
130 return "SparseLU";
132 return "PardisoLU";
134 return "GMRES";
135 }
136 return "Invalid";
137}
138
140{
141 switch (precon_type)
142 {
143 case PreconType::NONE:
144 return "NONE";
146 return "DIAGONAL";
148 return "LeastSquareDIAGONAL";
149 case PreconType::ILUT:
150 return "ILUT";
151 }
152 return "Invalid";
153}
154
157{
159 {
161 return "Lower";
163 return "Upper";
165 return "LowerUpper";
166 }
167 return "Invalid";
168}
169
170} // namespace MathLib
#define OGS_FATAL(...)
Definition Error.h:19
static const double s
TriangularMatrixType
triangular matrix type
Definition EigenOption.h:38
static TriangularMatrixType getTriangularMatrixType(const std::string &triangular_matrix_name)
PreconType precon_type
Preconditioner type.
Definition EigenOption.h:47
static std::string getSolverName(SolverType const solver_type)
return a linear solver name from the solver type
TriangularMatrixType triangular_matrix_type
Triangular Matrix Type.
Definition EigenOption.h:49
PreconType
Preconditioner type.
Definition EigenOption.h:29
static std::string getTriangularMatrixName(TriangularMatrixType const triangular_matrix_type)
return a triangular matrix name from the preconditioner type
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
SolverType
Solver type.
Definition EigenOption.h:15
static SolverType getSolverType(const std::string &solver_name)
static std::string getPreconName(PreconType const precon_type)
return a preconditioner name from the preconditioner type
int max_iterations
Maximum iteration count.
Definition EigenOption.h:51