| // This file is part of Eigen, a lightweight C++ template library |
| // for linear algebra. |
| // |
| // Copyright (C) 2008-2009 Gael Guennebaud <g.gael@free.fr> |
| // |
| // This Source Code Form is subject to the terms of the Mozilla |
| // Public License v. 2.0. If a copy of the MPL was not distributed |
| // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| #ifndef EIGEN_ITERATIVE_SOLVERS_MODULE_H |
| #define EIGEN_ITERATIVE_SOLVERS_MODULE_H |
| |
| #include "../../Eigen/Sparse" |
| #include "../../Eigen/Jacobi" |
| #include "../../Eigen/Householder" |
| |
| |
| /** |
| * \defgroup IterativeLinearSolvers_Module Iterative Solvers module |
| * This module aims to provide various iterative linear and non linear solver algorithms. |
| * It currently provides: |
| * - a constrained conjugate gradient |
| * - a Householder GMRES implementation |
| * - an IDR(s) implementation |
| * - a BiCGSTAB(L) implementation |
| * - a DGMRES implementation |
| * - a MINRES implementation |
| * - a IDRSTABL implementation |
| * |
| * Choosing the best solver for solving \c A \c x = \c b depends a lot on the preconditioner chosen as well as the properties of \c A. The following flowchart might help you. |
| * \dot width=50% |
| * digraph g { |
| * node [ fontname=Arial, fontsize=11]; |
| * edge [ fontname=Helvetica, fontsize=10 ]; |
| * A1[label="hermitian",shape="box"]; |
| * A2[label="positive definite",shape="box"]; |
| * CG[shape="plaintext"]; |
| * A3[label="ill conditioned",shape="box"]; |
| * A4[label="good preconditioner",shape="box"]; |
| * A5[label="flexible preconditioner",shape="box"]; |
| * A6[label="strongly indefinite",shape="box"]; |
| * A8[label="large imaginary eigenvalue",shape="box"]; |
| * A7[label="large imaginary eigenvalue",shape="box"]; |
| * |
| * SYMMLQ[shape="plaintext"]; |
| * MINRES[shape="plaintext"]; |
| * GCR[shape="plaintext"]; |
| * GMRES[shape="plaintext"]; |
| * IDRSTABL[shape="plaintext"]; |
| * IDRS[shape="plaintext"]; |
| * BICGSTABL[shape="plaintext"]; |
| * BICGSTAB[shape="plaintext"]; |
| * |
| * A1 -> A2 [label="yes"]; |
| * A2 -> CG [label="yes"]; |
| * A2 -> A3 [label="no"]; |
| * A3 -> SYMMLQ [label="yes"]; |
| * A3 -> MINRES [label="no"]; |
| * |
| * A1 -> A4 [label="no"]; |
| * A4 -> A5 [label="yes"]; |
| * A5 -> GCR [label="yes"]; |
| * A5 -> GMRES [label="no"]; |
| * |
| * A4 -> A6 [label="no"]; |
| * A6 -> A8 [label="yes"]; |
| * A6 -> A7 [label="no"]; |
| * A7 -> BICGSTABL [label="yes"]; |
| * A7 -> BICGSTAB [label="no"]; |
| * A8 -> IDRSTABL [label="yes"]; |
| * A8 -> IDRS [label="no"]; |
| * } |
| * \enddot |
| * \code |
| * #include <unsupported/Eigen/IterativeSolvers> |
| * \endcode |
| */ |
| |
| |
| #include "../../Eigen/src/Core/util/DisableStupidWarnings.h" |
| |
| #include "src/IterativeSolvers/IncompleteLU.h" |
| #include "src/IterativeSolvers/GMRES.h" |
| #include "src/IterativeSolvers/DGMRES.h" |
| #include "src/IterativeSolvers/MINRES.h" |
| #include "src/IterativeSolvers/IDRS.h" |
| #include "src/IterativeSolvers/BiCGSTABL.h" |
| #include "src/IterativeSolvers/IDRSTABL.h" |
| |
| #include "../../Eigen/src/Core/util/ReenableStupidWarnings.h" |
| |
| |
| #endif // EIGEN_ITERATIVE_SOLVERS_MODULE_H |