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