39 std::optional<GmresOperatorEstimate<R>>
norm = {};
76 if (!entry)
return {};
77 if (!
uni20::isfinite(entry->value) || (strict ? entry->value <= minimum : entry->value < minimum))
78 throw std::invalid_argument(
"GMRES requires finite norms >= 0, inverse norms > 0, and condition numbers >= 1");
79 R
value = scalar_at_precision<R>(entry->value,
p);
82 throw std::invalid_argument(
"GMRES operator estimate is not representable at diagnostic precision");
101 return {parts.fraction, parts.exponent};
108 return math::ldexp(fraction,
static_cast<std::int64_t
>(shift));
139 result.normwise_backward_error =
144 result.absolute_solution_error =
diagnostic_scale(error.fraction, error.exponent);
151 result.relative_solution_error =
Exact arithmetic or an explicit binary working precision.
Definition core/precision.hpp:13
locale_t value
Definition data_table.cpp:49
constexpr bool isfinite(I const &x) noexcept
Returns whether an integer scalar is finite.
Definition math.hpp:121
Scalar math helper utilities.
std::optional< GmresErrorEstimates< R > > error_estimates(GmresResidual< R > const &residual, GmresOperatorEstimates< R > const &properties)
Definition gmres_diagnostics.hpp:132
DiagnosticMagnitude< R > add(DiagnosticMagnitude< R > const &a, DiagnosticMagnitude< R > const &b)
Definition gmres_diagnostics.hpp:116
R diagnostic_scale(R const &fraction, __int128_t exponent)
Definition gmres_diagnostics.hpp:104
DiagnosticMagnitude< R > multiply(DiagnosticMagnitude< R > const &a, DiagnosticMagnitude< R > const &b)
Definition gmres_diagnostics.hpp:111
GmresOperatorEstimates< R > operator_estimates_at_precision(GmresOperatorEstimates< R > const &input, Precision p)
Definition gmres_diagnostics.hpp:73
DiagnosticMagnitude< R > magnitude(R const &value)
Definition gmres_diagnostics.hpp:98
R ratio(DiagnosticMagnitude< R > const &a, DiagnosticMagnitude< R > const &b)
Definition gmres_diagnostics.hpp:125
Definition block_tensor_vector.hpp:23
GmresEstimateKind
Provenance of a supplied operator quantity, not of a computed error.
Definition gmres_diagnostics.hpp:20
constexpr detail::scalar_math::ldexp_fn ldexp
Multiply by a power of two using the scalar's exponent interface.
Definition math.hpp:511
constexpr detail::scalar_math::next_up_fn next_up
Adjacent value toward positive infinity.
Definition math.hpp:551
constexpr detail::scalar_math::frexp_fn frexp
Binary fraction and exponent as an owning result.
Definition math.hpp:535
Definition data_table.cpp:8
Error estimates evaluated from the residual and supplied operator data.
Definition gmres_diagnostics.hpp:58
std::optional< R > relative_solution_error
kappa(A) ||r|| / ||b||, relative to the exact solution norm.
Definition gmres_diagnostics.hpp:67
std::optional< R > absolute_solution_error
||A^{-1}|| ||r||, requiring an inverse norm.
Definition gmres_diagnostics.hpp:63
std::optional< R > normwise_backward_error
||r|| / (||A|| ||x_hat|| + ||b||), requiring an operator norm.
Definition gmres_diagnostics.hpp:61
GmresOperatorEstimates< R > operator_estimates
Definition gmres_diagnostics.hpp:59
An application-supplied estimate or known upper bound.
Definition gmres_diagnostics.hpp:27
GmresEstimateKind kind
Definition gmres_diagnostics.hpp:29
R value
Definition gmres_diagnostics.hpp:28
Optional properties of the original operator in the vector space's 2-norm.
Definition gmres_diagnostics.hpp:38
std::optional< GmresOperatorEstimate< R > > condition_number
Definition gmres_diagnostics.hpp:41
std::optional< GmresOperatorEstimate< R > > norm
Definition gmres_diagnostics.hpp:39
std::optional< GmresOperatorEstimate< R > > inverse_norm
Definition gmres_diagnostics.hpp:40
Recomputed Euclidean norms for the published iterate.
Definition gmres_diagnostics.hpp:46
R solution_norm
Definition gmres_diagnostics.hpp:49
R norm
Definition gmres_diagnostics.hpp:47
R rhs_norm
Definition gmres_diagnostics.hpp:48
Definition gmres_diagnostics.hpp:93
__int128_t exponent
Definition gmres_diagnostics.hpp:95
R fraction
Definition gmres_diagnostics.hpp:94
Project-level numeric limits customization point.
Definition numeric_limits.hpp:16