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 "
168 "iterations for M =",
169 M,
"and K =",
K,
"- doubling M and K and continuing");
175 "GMRES failed to converge within allowed max "
202 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
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
Definition restrict.hpp:11
Hint
Definition hint.hpp:9
Transform
Definition transform.hpp:11
Definition backward_substitution.hpp:19
static constexpr X eval(X &&a)
Definition eval.hpp:11
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
static constexpr auto makeConstantSequence()
Definition sequence.hpp:402
Size Index
Definition type_traits.hpp:21
std::size_t Size
Definition type_traits.hpp:20
std::invoke_result_t< F, Args... > ResultOf
Definition type_traits.hpp:140
typename CommonTypes< Ts... >::Type Common
Definition common.hpp:55
static constexpr auto zero()
Definition zero.hpp:12
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
std::is_reference< T > IsReference
Definition type_traits.hpp:47
static constexpr auto isApprox(XA &&a, XB &&b, TT const &tolerance=NumericLimits< TT >::tolerance())
Definition is_approx.hpp:24
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
static constexpr auto round(Complex< T > const &a)
Definition round.hpp:12
Conditional< IsSatisfied<((Ns *... *1) *sizeof(T) > cHugepageSizeByte)>, HeapArray< T, Ns... >, StackArray< T, Ns... > > Array
Definition type_traits.hpp:58
std::conjunction< Bs... > All
Definition type_traits.hpp:77
static constexpr auto conj(Complex< T > const &a)
Definition conj.hpp:11
static constexpr auto identity()
Definition identity.hpp:12
Definition type_traits.hpp:16