MyraMath
gmres.h
Go to the documentation of this file.
1 // ========================================================================= //
2 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
3 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
4 // ========================================================================= //
5 
6 #ifndef MYRAMATH_ITERATIVE_GMRES_H
7 #define MYRAMATH_ITERATIVE_GMRES_H
8 
25 #include <myramath/MYRAMATH_EXPORT.h>
27 
28 #include <vector>
29 
30 namespace myra {
31 
32 // Forward declarations.
33 template<class Number> class Action;
34 template<class Number> class CVectorRange;
35 template<class Number> class VectorRange;
36 template<class Number> class CMatrixRange;
37 template<class Number> class MatrixRange;
38 
40 template<class Number> class MYRAMATH_EXPORT gmres_output
41  {
42  public:
43 
44  typedef typename ReflectPrecision<Number>::type Precision;
45 
46  // Did gmres() converge?
47  bool converged;
48 
49  // History of relative residual, |A*x-b|/|b|
50  std::vector<Precision> history;
51 
52  // Constructs from components.
53  gmres_output(bool in_converged, const std::vector<Precision>& in_history)
54  {
55  converged = in_converged;
56  history = in_history;
57  }
58 
59  };
60 
62 MYRAMATH_EXPORT gmres_output<NumberS> gmres(const Action<NumberS>& M1, const Action<NumberS>& A, const Action<NumberS>& M2, const CVectorRange<NumberS>& b, const VectorRange<NumberS>& x, NumberS tolerance = 1.0e-4, int restart = 100, int iterations = 1);
64 MYRAMATH_EXPORT gmres_output<NumberD> gmres(const Action<NumberD>& M1, const Action<NumberD>& A, const Action<NumberD>& M2, const CVectorRange<NumberD>& b, const VectorRange<NumberD>& x, NumberD tolerance = 1.0e-4, int restart = 100, int iterations = 1);
65 MYRAMATH_EXPORT gmres_output<NumberC> gmres(const Action<NumberC>& M1, const Action<NumberC>& A, const Action<NumberC>& M2, const CVectorRange<NumberC>& b, const VectorRange<NumberC>& x, NumberS tolerance = 1.0e-4, int restart = 100, int iterations = 1);
66 MYRAMATH_EXPORT gmres_output<NumberZ> gmres(const Action<NumberZ>& M1, const Action<NumberZ>& A, const Action<NumberZ>& M2, const CVectorRange<NumberZ>& b, const VectorRange<NumberZ>& x, NumberD tolerance = 1.0e-4, int restart = 100, int iterations = 1);
68 
70 MYRAMATH_EXPORT gmres_output<NumberS> gmres(const Action<NumberS>& M1, const Action<NumberS>& A, const CVectorRange<NumberS>& b, const VectorRange<NumberS>& x, NumberS tolerance = 1.0e-4, int restart = 100, int iterations = 1);
72 MYRAMATH_EXPORT gmres_output<NumberD> gmres(const Action<NumberD>& M1, const Action<NumberD>& A, const CVectorRange<NumberD>& b, const VectorRange<NumberD>& x, NumberD tolerance = 1.0e-4, int restart = 100, int iterations = 1);
73 MYRAMATH_EXPORT gmres_output<NumberC> gmres(const Action<NumberC>& M1, const Action<NumberC>& A, const CVectorRange<NumberC>& b, const VectorRange<NumberC>& x, NumberS tolerance = 1.0e-4, int restart = 100, int iterations = 1);
74 MYRAMATH_EXPORT gmres_output<NumberZ> gmres(const Action<NumberZ>& M1, const Action<NumberZ>& A, const CVectorRange<NumberZ>& b, const VectorRange<NumberZ>& x, NumberD tolerance = 1.0e-4, int restart = 100, int iterations = 1);
76 
78 MYRAMATH_EXPORT gmres_output<NumberS> gmres(const Action<NumberS>& M1, const Action<NumberS>& A, const Action<NumberS>& M2, const CMatrixRange<NumberS>& B, const MatrixRange<NumberS>& X, NumberS tolerance = 1.0e-4, int restart = 100, int iterations = 1);
80 MYRAMATH_EXPORT gmres_output<NumberD> gmres(const Action<NumberD>& M1, const Action<NumberD>& A, const Action<NumberD>& M2, const CMatrixRange<NumberD>& B, const MatrixRange<NumberD>& X, NumberD tolerance = 1.0e-4, int restart = 100, int iterations = 1);
81 MYRAMATH_EXPORT gmres_output<NumberC> gmres(const Action<NumberC>& M1, const Action<NumberC>& A, const Action<NumberC>& M2, const CMatrixRange<NumberC>& B, const MatrixRange<NumberC>& X, NumberS tolerance = 1.0e-4, int restart = 100, int iterations = 1);
82 MYRAMATH_EXPORT gmres_output<NumberZ> gmres(const Action<NumberZ>& M1, const Action<NumberZ>& A, const Action<NumberZ>& M2, const CMatrixRange<NumberZ>& B, const MatrixRange<NumberZ>& X, NumberD tolerance = 1.0e-4, int restart = 100, int iterations = 1);
84 
86 MYRAMATH_EXPORT gmres_output<NumberS> gmres(const Action<NumberS>& M1, const Action<NumberS>& A, const CMatrixRange<NumberS>& B, const MatrixRange<NumberS>& X, NumberS tolerance = 1.0e-4, int restart = 100, int iterations = 1);
88 MYRAMATH_EXPORT gmres_output<NumberD> gmres(const Action<NumberD>& M1, const Action<NumberD>& A, const CMatrixRange<NumberD>& B, const MatrixRange<NumberD>& X, NumberD tolerance = 1.0e-4, int restart = 100, int iterations = 1);
89 MYRAMATH_EXPORT gmres_output<NumberC> gmres(const Action<NumberC>& M1, const Action<NumberC>& A, const CMatrixRange<NumberC>& B, const MatrixRange<NumberC>& X, NumberS tolerance = 1.0e-4, int restart = 100, int iterations = 1);
90 MYRAMATH_EXPORT gmres_output<NumberZ> gmres(const Action<NumberZ>& M1, const Action<NumberZ>& A, const CMatrixRange<NumberZ>& B, const MatrixRange<NumberZ>& X, NumberD tolerance = 1.0e-4, int restart = 100, int iterations = 1);
92 
93 } // namespace myra
94 
95 #endif
Represents a mutable VectorRange.
Definition: axpy.h:21
Return type of gmres()
Definition: gmres.h:40
Definition: syntax.dox:1
Represents a const MatrixRange.
Definition: bothcat.h:22
Various utility functions/classes related to scalar Number types.
Represents a mutable MatrixRange.
Definition: conjugate.h:26
Applies the "Action" of a linear operator, b := A*x.
Definition: Action.h:29
Reflects Precision trait for a Number, scalar Number types should specialize it.
Definition: Number.h:33
Represents a const VectorRange.
Definition: axpy.h:20
float NumberS
Useful typedefs.
Definition: Number.h:21