Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct > Class Template Reference

Loose GMRES. \rst The LGMRES algorithm [BaJM05]_ is designed to avoid some problems in the convergence in restarted GMRES, and often converges in fewer iterations. \endrst. More...

#include </__w/arcaneframework.github.io/arcaneframework.github.io/framework/arccore/src/alina/arccore/alina/LooseGMRESSolver.h>

Inheritance diagram for Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >:
Collaboration diagram for Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >:

Public Types

using backend_type = Backend
using BackendType = Backend
typedef Backend::vector vector
typedef Backend::value_type value_type
typedef Backend::params backend_params
typedef math::scalar_of< value_type >::type scalar_type
typedef math::rhs_of< value_type >::type rhs_type
typedef math::inner_product_impl< rhs_type >::return_type coef_type
using params = LooseGMRESSolverParams

Public Member Functions

 LooseGMRESSolver (size_t n, const params &prm=params(), const backend_params &bprm=backend_params(), const InnerProduct &inner_product=InnerProduct())
 Preallocates necessary data structures for the system of size n.
template<class Matrix, class Precond, class Vec1, class Vec2>
SolverResult operator() (Matrix const &A, Precond const &P, Vec1 const &rhs, Vec2 &x) const
 Computes the solution for the given system matrix.
template<class Precond, class Vec1, class Vec2>
SolverResult operator() (Precond const &P, Vec1 const &rhs, Vec2 &x) const
 Computes the solution for the given right-hand side.
size_t bytes () const
 Memory used in bytes.

Public Attributes

params prm

Private Member Functions

template<class Vec>
scalar_type norm (const Vec &x) const

Private Attributes

size_t n
size_t M
multi_array< coef_type, 2 > H
multi_array< coef_type, 2 > H0
std::vector< coef_type > s
std::vector< coef_type > cs
std::vector< coef_type > sn
std::shared_ptr< vector > r
std::vector< std::shared_ptr< vector > > vs
std::vector< std::shared_ptr< vector > > ws
std::vector< std::shared_ptr< vector > > outer_v_data
circular_buffer< std::shared_ptr< vector > > outer_v
InnerProduct inner_product

Friends

std::ostream & operator<< (std::ostream &os, const LooseGMRESSolver &s)

Detailed Description

template<class Backend, class InnerProduct = detail::default_inner_product>
class Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >

Loose GMRES. \rst The LGMRES algorithm [BaJM05]_ is designed to avoid some problems in the convergence in restarted GMRES, and often converges in fewer iterations. \endrst.

Definition at line 165 of file LooseGMRESSolver.h.

Member Typedef Documentation

◆ backend_params

template<class Backend, class InnerProduct = detail::default_inner_product>
typedef Backend::params Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::backend_params

Definition at line 175 of file LooseGMRESSolver.h.

◆ backend_type

template<class Backend, class InnerProduct = detail::default_inner_product>
using Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::backend_type = Backend

Definition at line 170 of file LooseGMRESSolver.h.

◆ BackendType

template<class Backend, class InnerProduct = detail::default_inner_product>
using Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::BackendType = Backend

Definition at line 171 of file LooseGMRESSolver.h.

◆ coef_type

template<class Backend, class InnerProduct = detail::default_inner_product>
typedef math::inner_product_impl<rhs_type>::return_type Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::coef_type

Definition at line 179 of file LooseGMRESSolver.h.

◆ params

template<class Backend, class InnerProduct = detail::default_inner_product>
using Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::params = LooseGMRESSolverParams

Definition at line 181 of file LooseGMRESSolver.h.

◆ rhs_type

template<class Backend, class InnerProduct = detail::default_inner_product>
typedef math::rhs_of<value_type>::type Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::rhs_type

Definition at line 178 of file LooseGMRESSolver.h.

◆ scalar_type

template<class Backend, class InnerProduct = detail::default_inner_product>
typedef math::scalar_of<value_type>::type Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::scalar_type

Definition at line 177 of file LooseGMRESSolver.h.

◆ value_type

template<class Backend, class InnerProduct = detail::default_inner_product>
typedef Backend::value_type Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::value_type

Definition at line 174 of file LooseGMRESSolver.h.

◆ vector

template<class Backend, class InnerProduct = detail::default_inner_product>
typedef Backend::vector Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::vector

Definition at line 173 of file LooseGMRESSolver.h.

Constructor & Destructor Documentation

◆ LooseGMRESSolver()

template<class Backend, class InnerProduct = detail::default_inner_product>
Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::LooseGMRESSolver ( size_t n,
const params & prm = params(),
const backend_params & bprm = backend_params(),
const InnerProduct & inner_product = InnerProduct() )
inline

Preallocates necessary data structures for the system of size n.

Definition at line 184 of file LooseGMRESSolver.h.

Member Function Documentation

◆ bytes()

template<class Backend, class InnerProduct = detail::default_inner_product>
size_t Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::bytes ( ) const
inlinevirtual

Memory used in bytes.

Implements Arcane::Alina::SolverBase.

Definition at line 397 of file LooseGMRESSolver.h.

◆ norm()

template<class Backend, class InnerProduct = detail::default_inner_product>
template<class Vec>
scalar_type Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::norm ( const Vec & x) const
inlineprivate

Definition at line 445 of file LooseGMRESSolver.h.

◆ operator()() [1/2]

template<class Backend, class InnerProduct = detail::default_inner_product>
template<class Matrix, class Precond, class Vec1, class Vec2>
SolverResult Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::operator() ( Matrix const & A,
Precond const & P,
Vec1 const & rhs,
Vec2 & x ) const
inline

Computes the solution for the given system matrix.

Computes the solution for the given system matrix A and the right-hand side rhs. Returns the number of iterations made and the achieved residual as a std::tuple. The solution vector x provides initial approximation in input and holds the computed solution on output.

The system matrix may differ from the matrix used during initialization. This may be used for the solution of non-stationary problems with slowly changing coefficients. There is a strong chance that a preconditioner built for a time step will act as a reasonably good preconditioner for several subsequent time steps [DeSh12]_.

Definition at line 226 of file LooseGMRESSolver.h.

◆ operator()() [2/2]

template<class Backend, class InnerProduct = detail::default_inner_product>
template<class Precond, class Vec1, class Vec2>
SolverResult Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::operator() ( Precond const & P,
Vec1 const & rhs,
Vec2 & x ) const
inline

Computes the solution for the given right-hand side.

Computes the solution for the given right-hand side rhs. The system matrix is the same that was used for the setup of the preconditioner P. Returns the number of iterations made and the achieved residual as a std::tuple. The solution vector x provides initial approximation in input and holds the computed solution on output.

Definition at line 392 of file LooseGMRESSolver.h.

◆ operator<<

template<class Backend, class InnerProduct = detail::default_inner_product>
std::ostream & operator<< ( std::ostream & os,
const LooseGMRESSolver< Backend, InnerProduct > & s )
friend

Definition at line 419 of file LooseGMRESSolver.h.

Member Data Documentation

◆ cs

template<class Backend, class InnerProduct = detail::default_inner_product>
std::vector<coef_type> Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::cs
private

Definition at line 436 of file LooseGMRESSolver.h.

◆ H

template<class Backend, class InnerProduct = detail::default_inner_product>
multi_array<coef_type, 2> Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::H
mutableprivate

Definition at line 435 of file LooseGMRESSolver.h.

◆ H0

template<class Backend, class InnerProduct = detail::default_inner_product>
multi_array<coef_type, 2> Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::H0
private

Definition at line 435 of file LooseGMRESSolver.h.

◆ inner_product

template<class Backend, class InnerProduct = detail::default_inner_product>
InnerProduct Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::inner_product
private

Definition at line 442 of file LooseGMRESSolver.h.

◆ M

template<class Backend, class InnerProduct = detail::default_inner_product>
size_t Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::M
private

Definition at line 433 of file LooseGMRESSolver.h.

◆ n

template<class Backend, class InnerProduct = detail::default_inner_product>
size_t Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::n
private

Definition at line 433 of file LooseGMRESSolver.h.

◆ outer_v

template<class Backend, class InnerProduct = detail::default_inner_product>
circular_buffer<std::shared_ptr<vector> > Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::outer_v
mutableprivate

Definition at line 440 of file LooseGMRESSolver.h.

◆ outer_v_data

template<class Backend, class InnerProduct = detail::default_inner_product>
std::vector<std::shared_ptr<vector> > Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::outer_v_data
mutableprivate

Definition at line 439 of file LooseGMRESSolver.h.

◆ prm

template<class Backend, class InnerProduct = detail::default_inner_product>
params Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::prm

Definition at line 429 of file LooseGMRESSolver.h.

◆ r

template<class Backend, class InnerProduct = detail::default_inner_product>
std::shared_ptr<vector> Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::r
private

Definition at line 437 of file LooseGMRESSolver.h.

◆ s

template<class Backend, class InnerProduct = detail::default_inner_product>
std::vector<coef_type> Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::s
mutableprivate

Definition at line 436 of file LooseGMRESSolver.h.

◆ sn

template<class Backend, class InnerProduct = detail::default_inner_product>
std::vector<coef_type> Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::sn
private

Definition at line 436 of file LooseGMRESSolver.h.

◆ vs

template<class Backend, class InnerProduct = detail::default_inner_product>
std::vector<std::shared_ptr<vector> > Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::vs
mutableprivate

Definition at line 438 of file LooseGMRESSolver.h.

◆ ws

template<class Backend, class InnerProduct = detail::default_inner_product>
std::vector<std::shared_ptr<vector> > Arcane::Alina::LooseGMRESSolver< Backend, InnerProduct >::ws
private

Definition at line 438 of file LooseGMRESSolver.h.


The documentation for this class was generated from the following file: