2009-02-10 10:02:41 +00:00
|
|
|
// This file is part of Eigen, a lightweight C++ template library
|
2009-05-22 20:25:33 +02:00
|
|
|
// for linear algebra.
|
2009-02-10 10:02:41 +00:00
|
|
|
//
|
|
|
|
|
// Copyright (C) 2008-2009 Gael Guennebaud <g.gael@free.fr>
|
|
|
|
|
//
|
2012-07-13 14:42:47 -04:00
|
|
|
// 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/.
|
2009-02-10 10:02:41 +00:00
|
|
|
|
|
|
|
|
#ifndef EIGEN_ITERATIVE_SOLVERS_MODULE_H
|
|
|
|
|
#define EIGEN_ITERATIVE_SOLVERS_MODULE_H
|
|
|
|
|
|
2018-09-17 09:54:29 +02:00
|
|
|
#include "../../Eigen/Sparse"
|
2018-08-28 18:32:39 +02:00
|
|
|
#include "../../Eigen/Jacobi"
|
|
|
|
|
#include "../../Eigen/Householder"
|
2009-03-18 20:06:06 +00:00
|
|
|
|
2013-01-11 10:40:35 +01:00
|
|
|
/**
|
2025-02-01 00:00:31 +00:00
|
|
|
* \defgroup IterativeLinearSolvers_Module IterativeLinearSolvers module
|
2009-02-10 10:02:41 +00:00
|
|
|
* This module aims to provide various iterative linear and non linear solver algorithms.
|
|
|
|
|
* It currently provides:
|
2012-03-29 15:00:55 +02:00
|
|
|
* - a Householder GMRES implementation
|
2021-02-27 12:09:33 +00:00
|
|
|
* - an IDR(s) implementation
|
2021-12-02 22:48:22 +00:00
|
|
|
* - a BiCGSTAB(L) implementation
|
2021-02-27 12:09:33 +00:00
|
|
|
* - a DGMRES implementation
|
|
|
|
|
* - a MINRES implementation
|
2021-12-06 20:00:00 +00:00
|
|
|
* - a IDRSTABL implementation
|
2021-04-11 16:26:14 +00:00
|
|
|
*
|
2021-08-24 14:09:20 +02:00
|
|
|
* Choosing the best solver for solving \c A \c x = \c b depends a lot on the preconditioner chosen as well as the
|
2025-02-01 00:00:31 +00:00
|
|
|
*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"];
|
2021-08-24 14:09:20 +02:00
|
|
|
*
|
2025-02-01 00:00:31 +00:00
|
|
|
* SYMMLQ[shape="plaintext"];
|
|
|
|
|
* MINRES[shape="plaintext"];
|
|
|
|
|
* GCR[shape="plaintext"];
|
|
|
|
|
* GMRES[shape="plaintext"];
|
|
|
|
|
* IDRSTABL[shape="plaintext"];
|
|
|
|
|
* IDRS[shape="plaintext"];
|
|
|
|
|
* BICGSTABL[shape="plaintext"];
|
|
|
|
|
* BICGSTAB[shape="plaintext"];
|
2021-08-24 14:09:20 +02:00
|
|
|
*
|
2025-02-01 00:00:31 +00:00
|
|
|
* A1 -> A2 [label="yes"];
|
|
|
|
|
* A2 -> CG [label="yes"];
|
|
|
|
|
* A2 -> A3 [label="no"];
|
|
|
|
|
* A3 -> SYMMLQ [label="yes"];
|
|
|
|
|
* A3 -> MINRES [label="no"];
|
2021-08-24 14:09:20 +02:00
|
|
|
*
|
2025-02-01 00:00:31 +00:00
|
|
|
* A1 -> A4 [label="no"];
|
|
|
|
|
* A4 -> A5 [label="yes"];
|
|
|
|
|
* A5 -> GCR [label="yes"];
|
|
|
|
|
* A5 -> GMRES [label="no"];
|
2021-08-24 14:09:20 +02:00
|
|
|
*
|
2025-02-01 00:00:31 +00:00
|
|
|
* 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"];
|
2021-08-24 14:09:20 +02:00
|
|
|
* }
|
|
|
|
|
* \enddot
|
2009-02-10 10:02:41 +00:00
|
|
|
* \code
|
|
|
|
|
* #include <unsupported/Eigen/IterativeSolvers>
|
|
|
|
|
* \endcode
|
|
|
|
|
*/
|
2009-03-18 20:06:06 +00:00
|
|
|
|
2018-08-28 18:32:39 +02:00
|
|
|
#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"
|
|
|
|
|
|
2023-02-08 17:40:31 +00:00
|
|
|
// IWYU pragma: begin_exports
|
2011-10-11 20:41:43 +02:00
|
|
|
#include "src/IterativeSolvers/IncompleteLU.h"
|
2012-03-29 15:00:55 +02:00
|
|
|
#include "src/IterativeSolvers/GMRES.h"
|
2015-12-07 12:23:22 +01:00
|
|
|
#include "src/IterativeSolvers/DGMRES.h"
|
2012-09-24 07:47:38 -07:00
|
|
|
#include "src/IterativeSolvers/MINRES.h"
|
2021-02-27 12:09:33 +00:00
|
|
|
#include "src/IterativeSolvers/IDRS.h"
|
2021-12-02 22:48:22 +00:00
|
|
|
#include "src/IterativeSolvers/BiCGSTABL.h"
|
2021-12-06 20:00:00 +00:00
|
|
|
#include "src/IterativeSolvers/IDRSTABL.h"
|
2023-02-08 17:40:31 +00:00
|
|
|
// IWYU pragma: end_exports
|
2009-02-10 10:02:41 +00:00
|
|
|
|
2018-08-28 18:32:39 +02:00
|
|
|
#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"
|
|
|
|
|
|
2009-02-10 10:02:41 +00:00
|
|
|
#endif // EIGEN_ITERATIVE_SOLVERS_MODULE_H
|