MyraMath
fgmres.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_FGMRES_H
7 #define MYRAMATH_ITERATIVE_FGMRES_H
8 
24 #include <myramath/MYRAMATH_EXPORT.h>
26 
27 #include <vector>
28 
29 namespace myra {
30 
31 // Forward declarations.
32 template<class Number> class Action;
33 template<class Number> class CVectorRange;
34 template<class Number> class VectorRange;
35 template<class Number> class CMatrixRange;
36 template<class Number> class MatrixRange;
37 
39 template<class Number> class MYRAMATH_EXPORT fgmres_output
40  {
41  public:
42 
43  typedef typename ReflectPrecision<Number>::type Precision;
44 
45  // Did gmres() converge?
46  bool converged;
47 
48  // History of relative residual, |A*x-b|/|b|
49  std::vector<Precision> history;
50 
51  // Constructs from components.
52  fgmres_output(bool in_converged, const std::vector<Precision>& in_history)
53  {
54  converged = in_converged;
55  history = in_history;
56  }
57 
58  };
59 
61 MYRAMATH_EXPORT fgmres_output<NumberS> fgmres(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);
63 MYRAMATH_EXPORT fgmres_output<NumberD> fgmres(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);
64 MYRAMATH_EXPORT fgmres_output<NumberC> fgmres(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);
65 MYRAMATH_EXPORT fgmres_output<NumberZ> fgmres(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);
67 
68 /*
70 MYRAMATH_EXPORT fgmres_output<NumberS> fgmres(const Action<NumberS>& M, const Action<NumberS>& A, const CMatrixRange<NumberS>& B, const MatrixRange<NumberS>& X, NumberS tolerance = 1.0e-4, int restart = 100, int iterations = 1);
72 MYRAMATH_EXPORT fgmres_output<NumberD> fgmres(const Action<NumberD>& M, const Action<NumberD>& A, const CMatrixRange<NumberD>& B, const MatrixRange<NumberD>& X, NumberD tolerance = 1.0e-4, int restart = 100, int iterations = 1);
73 MYRAMATH_EXPORT fgmres_output<NumberC> fgmres(const Action<NumberC>& M, const Action<NumberC>& A, const CMatrixRange<NumberC>& B, const MatrixRange<NumberC>& X, NumberS tolerance = 1.0e-4, int restart = 100, int iterations = 1);
74 MYRAMATH_EXPORT fgmres_output<NumberZ> fgmres(const Action<NumberZ>& M, const Action<NumberZ>& A, const CMatrixRange<NumberZ>& B, const MatrixRange<NumberZ>& X, NumberD tolerance = 1.0e-4, int restart = 100, int iterations = 1);
76 */
77 
78 } // namespace myra
79 
80 #endif
Return type of gmres()
Definition: fgmres.h:39
Represents a mutable VectorRange.
Definition: axpy.h:21
Definition: syntax.dox:1
Various utility functions/classes related to scalar Number types.
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