// 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/.
// SPDX-License-Identifier: 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 IterativeLinearSolvers 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/Scaling.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"
// IWYU pragma: end_exports

#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"

#endif  // EIGEN_ITERATIVE_SOLVERS_MODULE_H
