3#ifndef pRC_ALGORITHMS_SOLVER_GMRES_H
4#define pRC_ALGORITHMS_SOLVER_GMRES_H
21 template<Size M = 32, Size K = 2, If<IsSatisfied<(M > K)>> = 0>
25 static constexpr Size defaultMaxIterations()
38 return mMaxIterations;
45 class VA =
typename TA::Value,
class XB,
47 class VB =
typename TB::Value,
class XX =
decltype(
zero<RB>()),
59 using T =
typename V::Type;
96 z.front(m - (M -
z.size())));
111 v[m + 1] -=
R(
i, m) *
v[
i];
124 g(m) =
G[m].c() * error;
130 "Inner Iteration:", m,
"Residual:",
norm(error),
139 for(
Index i = 1;
i < m &&
i < M -
z.size(); ++
i)
145 dx +=
z.front(
i) *
y((M -
z.size()) +
i);
164 if constexpr (M <= 512)
167 "GMRES failed to converge within allowed max iterations for M =",
168 M,
"and K =",
K,
"- doubling M and K and continuing");
175 "GMRES failed to converge within allowed max iterations.");
201 Size const mMaxIterations;
static constexpr auto MakeGivens(R1 const &x, R2 const &y)
Definition jacobi_rotation.hpp:33
constexpr auto maxIterations() const
Definition gmres.hpp:36
constexpr GMRES(Size const maxIterations=defaultMaxIterations())
Definition gmres.hpp:31
Class storing tensors.
Definition tensor.hpp:44
static void info(Xs &&...args)
Definition log.hpp:27
static void debug(Xs &&...args)
Definition log.hpp:33
static void error(Xs &&...args)
Definition log.hpp:14
Restrict
This enum's elements denote a restriction of an operator.
Definition restrict.hpp:27
Hint
This enum's elements denote a hint regarding an operator.
Definition hint.hpp:30
Transform
This enum's elements denote a transformation done to an operator.
Definition transform.hpp:23
Definition backward_substitution.hpp:19
static constexpr X eval(X &&a)
Definition eval.hpp:11
std::conjunction< Bs... > All
Definition type_traits.hpp:77
bool Bool
Definition type_traits.hpp:18
static constexpr decltype(auto) apply(JacobiRotation< T > const &r, X &&m, Index const p, Index const q)
Definition jacobi_rotation.hpp:334
std::invoke_result_t< F, Args... > ResultOf
Definition type_traits.hpp:140
static constexpr auto zero()
Definition zero.hpp:12
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
std::size_t Size
Definition type_traits.hpp:20
Conditional< IsSatisfied<((Ns *... *1) *sizeof(T) > cHugepageSizeByte)>, HeapArray< T, Ns... >, StackArray< T, Ns... > > Array
Definition type_traits.hpp:60
typename CommonTypes< Ts... >::Type Common
Definition common.hpp:55
static constexpr auto isApprox(XA &&a, XB &&b, TT const &tolerance=NumericLimits< TT >::tolerance())
Checks if two pRC objects agree up to a given tolerance.
Definition is_approx.hpp:44
static constexpr Conditional< IsSatisfied< C >, RemoveConstReference< X >, X > copy(X &&a)
Definition copy.hpp:13
constexpr auto cDebugLevel
Definition config.hpp:46
RemoveConst< RemoveReference< T > > RemoveConstReference
Definition type_traits.hpp:62
static constexpr auto norm(Complex< T > const &a)
Definition norm.hpp:11
static constexpr auto innerProduct(Complex< TA > const &a, Complex< TB > const &b)
Definition inner_product.hpp:16
std::is_reference< T > IsReference
Definition type_traits.hpp:47
static constexpr auto round(Complex< T > const &a)
Definition round.hpp:12
static constexpr auto conj(Complex< T > const &a)
Definition conj.hpp:11
Size Index
Definition type_traits.hpp:21
static constexpr auto identity()
Definition identity.hpp:12
Definition type_traits.hpp:16