MyraMath
bicgstab.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_BICGSTAB_H
7 #define MYRAMATH_ITERATIVE_BICGSTAB_H
8 
23 #include <myramath/MYRAMATH_EXPORT.h>
25 
26 #include <vector>
27 
28 namespace myra {
29 
30 // Forward declarations.
31 template<class Number> class Action;
32 template<class Number> class CVectorRange;
33 template<class Number> class VectorRange;
34 template<class Number> class CMatrixRange;
35 template<class Number> class MatrixRange;
36 
38 template<class Number> class MYRAMATH_EXPORT bicgstab_output
39  {
40  public:
41 
42  typedef typename ReflectPrecision<Number>::type Precision;
43 
44  // Did bicgstab() converge?
45  bool converged;
46 
47  // History of relative residual, |A*x-b|/|b|
48  std::vector<Precision> history;
49 
50  // Constructs from components.
51  bicgstab_output(bool in_converged, const std::vector<Precision>& in_history)
52  {
53  converged = in_converged;
54  history = in_history;
55  }
56 
57  };
58 
60 MYRAMATH_EXPORT bicgstab_output<NumberS> bicgstab(const Action<NumberS>& M, const Action<NumberS>& A, const CVectorRange<NumberS>& b, const VectorRange<NumberS>& x, NumberS tolerance = 1.0e-4, int iterations = 50);
62 MYRAMATH_EXPORT bicgstab_output<NumberD> bicgstab(const Action<NumberD>& M, const Action<NumberD>& A, const CVectorRange<NumberD>& b, const VectorRange<NumberD>& x, NumberD tolerance = 1.0e-4, int iterations = 50);
63 MYRAMATH_EXPORT bicgstab_output<NumberC> bicgstab(const Action<NumberC>& M, const Action<NumberC>& A, const CVectorRange<NumberC>& b, const VectorRange<NumberC>& x, NumberS tolerance = 1.0e-4, int iterations = 50);
64 MYRAMATH_EXPORT bicgstab_output<NumberZ> bicgstab(const Action<NumberZ>& M, const Action<NumberZ>& A, const CVectorRange<NumberZ>& b, const VectorRange<NumberZ>& x, NumberD tolerance = 1.0e-4, int iterations = 50);
66 
68 MYRAMATH_EXPORT bicgstab_output<NumberS> bicgstab(const Action<NumberS>& M, const Action<NumberS>& A, const CMatrixRange<NumberS>& B, const MatrixRange<NumberS>& X, NumberS tolerance = 1.0e-4, int iterations = 50);
70 MYRAMATH_EXPORT bicgstab_output<NumberD> bicgstab(const Action<NumberD>& M, const Action<NumberD>& A, const CMatrixRange<NumberD>& B, const MatrixRange<NumberD>& X, NumberD tolerance = 1.0e-4, int iterations = 50);
71 MYRAMATH_EXPORT bicgstab_output<NumberC> bicgstab(const Action<NumberC>& M, const Action<NumberC>& A, const CMatrixRange<NumberC>& B, const MatrixRange<NumberC>& X, NumberS tolerance = 1.0e-4, int iterations = 50);
72 MYRAMATH_EXPORT bicgstab_output<NumberZ> bicgstab(const Action<NumberZ>& M, const Action<NumberZ>& A, const CMatrixRange<NumberZ>& B, const MatrixRange<NumberZ>& X, NumberD tolerance = 1.0e-4, int iterations = 50);
74 
75 } // namespace myra
76 
77 #endif
Represents a mutable VectorRange.
Definition: axpy.h:21
Definition: syntax.dox:1
Represents a const MatrixRange.
Definition: bothcat.h:22
Return type of bicgstab()
Definition: bicgstab.h:38
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