// 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
