|  | // 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 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" | 
|  |  | 
|  | // IWYU pragma: begin_exports | 
|  | #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" | 
|  | // IWYU pragma: end_exports | 
|  |  | 
|  | #include "../../Eigen/src/Core/util/ReenableStupidWarnings.h" | 
|  |  | 
|  | #endif  // EIGEN_ITERATIVE_SOLVERS_MODULE_H |