From 90b3b6b5729d789224d2bf0a5a40ed2e3712ab51 Mon Sep 17 00:00:00 2001 From: jenswehner Date: Tue, 24 Aug 2021 14:09:20 +0200 Subject: [PATCH] added doxygen flowchart --- unsupported/Eigen/IterativeSolvers | 46 +++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/unsupported/Eigen/IterativeSolvers b/unsupported/Eigen/IterativeSolvers index a3f58d676..7a5b85c50 100644 --- a/unsupported/Eigen/IterativeSolvers +++ b/unsupported/Eigen/IterativeSolvers @@ -16,7 +16,7 @@ /** - * \defgroup IterativeLinearSolvers_Module Iterative solvers module + * \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 @@ -25,6 +25,50 @@ * - a DGMRES implementation * - a MINRES 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 * \endcode