Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
Classes | Namespaces | Concepts | Enumerations | Functions
gmres.hpp File Reference

Restarted right-preconditioned GMRES over opaque vector operations. More...

#include <uni20/core/runtime_precision.hpp>
#include <uni20/krylov/gmres_diagnostics.hpp>
#include <uni20/krylov/matrix_free.hpp>
Include dependency graph for gmres.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  uni20::krylov::gmres_detail::Rotation< S >
 
struct  uni20::krylov::gmres_detail::Tolerances< R >
 
struct  uni20::krylov::GmresInfo< R >
 Recoverable solve outcome; counters include attempted operator calls. More...
 
struct  uni20::krylov::GmresOptions< R >
 Residual stopping policy and storage/iteration limits. More...
 
struct  uni20::krylov::IdentityPreconditioner< Ops >
 Identity preconditioner using the supplied vector copy operation. More...
 

Namespaces

namespace  uni20
 
namespace  uni20::krylov
 
namespace  uni20::krylov::gmres_detail
 

Concepts

concept  uni20::krylov::KrylovPreconditioner
 Fixed linear inverse-preconditioner application, output <- M^{-1} input.
 

Enumerations

enum class  uni20::krylov::GmresStatus {
  uni20::krylov::converged , uni20::krylov::iteration_limit , uni20::krylov::stagnated , uni20::krylov::breakdown ,
  uni20::krylov::nonfinite_input , uni20::krylov::nonfinite_result
}
 Numerical termination of a matrix-free linear solve. More...
 

Functions

template<RealOrComplex S, class Ops , class Op , class P , class V >
requires KrylovVectorOps<Ops, V, S> && KrylovOperator<Op, V> && KrylovPreconditioner<P, V>
GmresInfo< make_real_t< S > > uni20::krylov::gmres_with_info (Ops &ops, Op &op, P &preconditioner, V &x, V const &b, GmresOptions< make_real_t< S > > const &options, Precision precision)
 Solve A*x=b with restarted GMRES and a fixed right preconditioner.
 
template<RealOrComplex S, class Ops , class Op , class P , class V >
requires (!has_runtime_precision_v<S>) && KrylovVectorOps<Ops, V, S> && KrylovOperator<Op, V> && KrylovPreconditioner<P, V>
auto uni20::krylov::gmres_with_info (Ops &ops, Op &op, P &preconditioner, V &x, V const &b, GmresOptions< make_real_t< S > > const &options={})
 Fixed-scalar GMRES using the scalar's native precision.
 
template<RealOrComplex S, class Ops , class Op , class V >
requires KrylovVectorOps<Ops, V, S> && KrylovOperator<Op, V>
auto uni20::krylov::gmres_with_info (Ops &ops, Op &op, V &x, V const &b, GmresOptions< make_real_t< S > > const &options, Precision p)
 GMRES without preconditioning, at explicit scalar precision.
 
template<RealOrComplex S, class Ops , class Op , class V >
requires (!has_runtime_precision_v<S>) && KrylovVectorOps<Ops, V, S> && KrylovOperator<Op, V>
auto uni20::krylov::gmres_with_info (Ops &ops, Op &op, V &x, V const &b, GmresOptions< make_real_t< S > > const &options={})
 Fixed-scalar GMRES without preconditioning.
 
template<RealOrComplex S, class Ops , class V >
std::optional< make_real_t< S > > uni20::krylov::gmres_detail::norm (Ops &ops, V const &v, Precision p)
 
template<RealOrComplex S, class Ops , class V >
void uni20::krylov::gmres_detail::normalize (Ops &ops, V &v, make_real_t< S > const &length, Precision p)
 
template<Real R>
bool uni20::krylov::gmres_detail::reached (R const &residual, R const &rhs, R const &relative, R const &absolute)
 
template<class S >
void uni20::krylov::gmres_detail::rotate (Rotation< S > const &rotation, S &x, S &y)
 
template<RealOrComplex S>
Rotation< S > uni20::krylov::gmres_detail::rotation (S const &f, S const &g, Precision p)
 
template<Real R>
Tolerances< R > uni20::krylov::gmres_detail::tolerances (GmresOptions< R > const &options, Precision precision)
 

Detailed Description

Restarted right-preconditioned GMRES over opaque vector operations.