// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
// 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-FileCopyrightText: The Eigen Authors
// SPDX-License-Identifier: MPL-2.0

#ifndef EIGEN_ITERATIVELINEARSOLVERS_MODULE_H
#define EIGEN_ITERATIVELINEARSOLVERS_MODULE_H

#include "SparseCore"
#include "OrderingMethods"
#include "Jacobi"
#include "Householder"
#include "QR"
#include "LU"

#include "src/Core/util/DisableStupidWarnings.h"

/**
  * \defgroup IterativeLinearSolvers_Module IterativeLinearSolvers module
  *
  * This module provides iterative methods to solve problems of the form \c A \c x = \c b, where \c A is a
  squared matrix, usually very large and sparse.
  * Those solvers are accessible via the following classes:
  *  - ConjugateGradient for selfadjoint (hermitian) matrices,
  *  - LeastSquaresConjugateGradient for rectangular least-square problems,
  *  - LSMR for rectangular least-square problems (Golub-Kahan bidiagonalization, optionally damped),
  *  - BiCGSTAB for general square matrices,
  *  - GMRES - a Householder GMRES implementation,
  *  - DGMRES - a deflated GMRES implementation,
  *  - MINRES for symmetric indefinite matrices,
  *  - IDRS - an IDR(s) implementation,
  *  - BiCGSTABL - a BiCGSTAB(L) implementation,
  *  - IDRSTABL - an IDR(s)STAB(L) implementation.
  *
  * These iterative solvers are associated with some preconditioners:
  *  - IdentityPreconditioner - not really useful
  *  - DiagonalPreconditioner - also called Jacobi preconditioner, work very well on diagonal dominant matrices.
  *  - IncompleteLUT - incomplete LU factorization with dual thresholding
  *  - IncompleteLU - incomplete LU factorization without fill-in
  *
  * The IterScaling class can be used as a preprocessing step to equilibrate the row and column norms of a matrix.
  *
  * 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
  *
  * Such problems can also be solved using the direct sparse decomposition modules: SparseCholesky, CholmodSupport,
  UmfPackSupport, SuperLUSupport, AccelerateSupport.
  *
    \code
    #include <Eigen/IterativeLinearSolvers>
    \endcode
  */

// IWYU pragma: begin_exports
#include "src/IterativeLinearSolvers/SolveWithGuess.h"
#include "src/IterativeLinearSolvers/IterativeSolverBase.h"
#include "src/IterativeLinearSolvers/BasicPreconditioners.h"
#include "src/IterativeLinearSolvers/ConjugateGradient.h"
#include "src/IterativeLinearSolvers/LeastSquareConjugateGradient.h"
#include "src/IterativeLinearSolvers/LSMR.h"
#include "src/IterativeLinearSolvers/BiCGSTAB.h"
#include "src/IterativeLinearSolvers/IncompleteLUT.h"
#include "src/IterativeLinearSolvers/IncompleteCholesky.h"
#include "src/IterativeLinearSolvers/Scaling.h"
#include "src/IterativeLinearSolvers/IncompleteLU.h"
#include "src/IterativeLinearSolvers/GMRES.h"
#include "src/IterativeLinearSolvers/DGMRES.h"
#include "src/IterativeLinearSolvers/MINRES.h"
#include "src/IterativeLinearSolvers/IDRS.h"
#include "src/IterativeLinearSolvers/BiCGSTABL.h"
#include "src/IterativeLinearSolvers/IDRSTABL.h"
// IWYU pragma: end_exports

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

#endif  // EIGEN_ITERATIVELINEARSOLVERS_MODULE_H
