Eigen-unsupported  5.0.1-dev
 
Loading...
Searching...
No Matches
IterativeSolvers
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2008-2009 Gael Guennebaud <g.gael@free.fr>
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#ifndef EIGEN_ITERATIVE_SOLVERS_MODULE_H
11#define EIGEN_ITERATIVE_SOLVERS_MODULE_H
12
13#include "../../Eigen/Sparse"
14#include "../../Eigen/Jacobi"
15#include "../../Eigen/Householder"
16
17/**
18 * \defgroup IterativeLinearSolvers_Module IterativeLinearSolvers module
19 * This module aims to provide various iterative linear and non linear solver algorithms.
20 * It currently provides:
21 * - a Householder GMRES implementation
22 * - an IDR(s) implementation
23 * - a BiCGSTAB(L) implementation
24 * - a DGMRES implementation
25 * - a MINRES implementation
26 * - a IDRSTABL implementation
27 *
28 * Choosing the best solver for solving \c A \c x = \c b depends a lot on the preconditioner chosen as well as the
29 *properties of \c A. The following flowchart might help you.
30 * \dot width=50%
31 * digraph g {
32 * node [ fontname=Arial, fontsize=11];
33 * edge [ fontname=Helvetica, fontsize=10 ];
34 * A1[label="hermitian", shape="box"];
35 * A2[label="positive definite", shape="box"];
36 * CG[shape="plaintext"];
37 * A3[label="ill conditioned", shape="box"];
38 * A4[label="good preconditioner", shape="box"];
39 * A5[label="flexible preconditioner", shape="box"];
40 * A6[label="strongly indefinite", shape="box"];
41 * A8[label="large imaginary eigenvalue", shape="box"];
42 * A7[label="large imaginary eigenvalue",shape="box"];
43 *
44 * SYMMLQ[shape="plaintext"];
45 * MINRES[shape="plaintext"];
46 * GCR[shape="plaintext"];
47 * GMRES[shape="plaintext"];
48 * IDRSTABL[shape="plaintext"];
49 * IDRS[shape="plaintext"];
50 * BICGSTABL[shape="plaintext"];
51 * BICGSTAB[shape="plaintext"];
52 *
53 * A1 -> A2 [label="yes"];
54 * A2 -> CG [label="yes"];
55 * A2 -> A3 [label="no"];
56 * A3 -> SYMMLQ [label="yes"];
57 * A3 -> MINRES [label="no"];
58 *
59 * A1 -> A4 [label="no"];
60 * A4 -> A5 [label="yes"];
61 * A5 -> GCR [label="yes"];
62 * A5 -> GMRES [label="no"];
63 *
64 * A4 -> A6 [label="no"];
65 * A6 -> A8 [label="yes"];
66 * A6 -> A7 [label="no"];
67 * A7 -> BICGSTABL [label="yes"];
68 * A7 -> BICGSTAB [label="no"];
69 * A8 -> IDRSTABL [label="yes"];
70 * A8 -> IDRS [label="no"];
71 * }
72 * \enddot
73 * \code
74 * #include <unsupported/Eigen/IterativeSolvers>
75 * \endcode
76 */
77
78#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"
79
80// IWYU pragma: begin_exports
81#include "src/IterativeSolvers/IncompleteLU.h"
82#include "src/IterativeSolvers/GMRES.h"
83#include "src/IterativeSolvers/DGMRES.h"
84#include "src/IterativeSolvers/MINRES.h"
85#include "src/IterativeSolvers/IDRS.h"
86#include "src/IterativeSolvers/BiCGSTABL.h"
87#include "src/IterativeSolvers/IDRSTABL.h"
88// IWYU pragma: end_exports
89
90#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"
91
92#endif // EIGEN_ITERATIVE_SOLVERS_MODULE_H