Ir< ValueType > Class Template Reference#
|
Reference API
|
#include <ginkgo/core/solver/ir.hpp>
Classes | |
| class | Factory |
| struct | parameters_type |
Public Types | |
| using | value_type = ValueType |
| using | transposed_type = Ir< ValueType > |
Public Types inherited from gko::EnablePolymorphicAssignment< ConcreteLinOp > | |
| using | result_type = ConcreteLinOp |
Public Types inherited from gko::ConvertibleTo< ResultType > | |
| using | result_type = ResultType |
Public Member Functions | |
| std::unique_ptr< LinOp > | transpose () const override |
| std::unique_ptr< LinOp > | conj_transpose () const override |
| bool | apply_uses_initial_guess () const override |
| std::shared_ptr< const LinOp > | get_solver () const |
| void | set_solver (std::shared_ptr< const LinOp > new_solver) |
| Ir & | operator= (const Ir &) |
| Ir & | operator= (Ir &&) |
| Ir (const Ir &) | |
| Ir (Ir &&) | |
| const parameters_type & | get_parameters () const |
Public Member Functions inherited from gko::EnableLinOp< ConcreteLinOp, PolymorphicBase > | |
| const ConcreteLinOp * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const |
| ConcreteLinOp * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) |
| const ConcreteLinOp * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) const |
| ConcreteLinOp * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) |
Public Member Functions inherited from gko::EnableAbstractPolymorphicObject< AbstractObject, PolymorphicBase > | |
| std::unique_ptr< AbstractObject > | create_default (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< AbstractObject > | create_default () const |
| std::unique_ptr< AbstractObject > | clone (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< AbstractObject > | clone () const |
| AbstractObject * | copy_from (const PolymorphicObject *other) |
| template<typename Derived > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, AbstractObject > * | copy_from (std::unique_ptr< Derived > &&other) |
| template<typename Derived > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, AbstractObject > * | copy_from (const std::unique_ptr< Derived > &other) |
| AbstractObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
| AbstractObject * | move_from (ptr_param< PolymorphicObject > other) |
| AbstractObject * | clear () |
Public Member Functions inherited from gko::PolymorphicObject | |
| PolymorphicObject & | operator= (const PolymorphicObject &) |
| std::unique_ptr< PolymorphicObject > | create_default (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< PolymorphicObject > | create_default () const |
| std::unique_ptr< PolymorphicObject > | clone (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< PolymorphicObject > | clone () const |
| PolymorphicObject * | copy_from (const PolymorphicObject *other) |
| template<typename Derived , typename Deleter > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (std::unique_ptr< Derived, Deleter > &&other) |
| template<typename Derived , typename Deleter > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (const std::unique_ptr< Derived, Deleter > &other) |
| PolymorphicObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
| PolymorphicObject * | move_from (ptr_param< PolymorphicObject > other) |
| PolymorphicObject * | clear () |
| std::shared_ptr< const Executor > | get_executor () const noexcept |
Public Member Functions inherited from gko::log::EnableLogging< PolymorphicObject > | |
| void | add_logger (std::shared_ptr< const Logger > logger) override |
| void | remove_logger (const Logger *logger) override |
| void | remove_logger (ptr_param< const Logger > logger) |
| const std::vector< std::shared_ptr< const Logger > > & | get_loggers () const override |
| void | clear_loggers () override |
Public Member Functions inherited from gko::log::Loggable | |
| void | remove_logger (ptr_param< const Logger > logger) |
Public Member Functions inherited from gko::EnablePolymorphicAssignment< ConcreteLinOp > | |
| void | convert_to (result_type *result) const override |
| void | move_to (result_type *result) override |
Public Member Functions inherited from gko::ConvertibleTo< ResultType > | |
| virtual void | convert_to (result_type *result) const =0 |
| void | convert_to (ptr_param< result_type > result) const |
| virtual void | move_to (result_type *result)=0 |
| void | move_to (ptr_param< result_type > result) |
Public Member Functions inherited from gko::solver::EnableSolverBase< DerivedType, MatrixType > | |
| EnableSolverBase & | operator= (const EnableSolverBase &other) |
| EnableSolverBase & | operator= (EnableSolverBase &&other) |
| EnableSolverBase (std::shared_ptr< const MatrixType > system_matrix) | |
| EnableSolverBase (const EnableSolverBase &other) | |
| EnableSolverBase (EnableSolverBase &&other) | |
| int | get_num_workspace_ops () const override |
| std::vector< std::string > | get_workspace_op_names () const override |
| std::vector< int > | get_workspace_scalars () const override |
| std::vector< int > | get_workspace_vectors () const override |
Public Member Functions inherited from gko::solver::SolverBase< MatrixType > | |
| std::shared_ptr< const MatrixType > | get_system_matrix () const |
Public Member Functions inherited from gko::solver::EnableIterativeBase< DerivedType > | |
| EnableIterativeBase & | operator= (const EnableIterativeBase &other) |
| EnableIterativeBase & | operator= (EnableIterativeBase &&other) |
| EnableIterativeBase (std::shared_ptr< const stop::CriterionFactory > stop_factory) | |
| EnableIterativeBase (const EnableIterativeBase &other) | |
| EnableIterativeBase (EnableIterativeBase &&other) | |
| void | set_stop_criterion_factory (std::shared_ptr< const stop::CriterionFactory > new_stop_factory) override |
Public Member Functions inherited from gko::solver::IterativeBase | |
| std::shared_ptr< const stop::CriterionFactory > | get_stop_criterion_factory () const |
Static Public Member Functions | |
| static auto | build () -> decltype(Factory ::create()) |
| static parameters_type | parse (const config::pnode &config, const config::registry &context, const config::type_descriptor &td_for_child=config::make_type_descriptor< ValueType >()) |
Protected Member Functions | |
| void | apply_impl (const LinOp *b, LinOp *x) const override |
| template<typename VectorType > | |
| void | apply_dense_impl (const VectorType *b, VectorType *x, initial_guess_mode guess) const |
| void | apply_impl (const LinOp *alpha, const LinOp *b, const LinOp *beta, LinOp *x) const override |
| void | apply_with_initial_guess_impl (const LinOp *b, LinOp *x, initial_guess_mode guess) const override |
| void | apply_with_initial_guess_impl (const LinOp *alpha, const LinOp *b, const LinOp *beta, LinOp *x, initial_guess_mode guess) const override |
| void | set_relaxation_factor (std::shared_ptr< const matrix::Dense< ValueType > > new_factor) |
| Ir (std::shared_ptr< const Executor > exec) | |
| Ir (const Factory *factory, std::shared_ptr< const LinOp > system_matrix) | |
Protected Member Functions inherited from gko::EnableLinOp< ConcreteLinOp, PolymorphicBase > | |
| ConcreteLinOp * | self () noexcept |
| const ConcreteLinOp * | self () const noexcept |
Protected Member Functions inherited from gko::EnablePolymorphicObject< ConcreteObject, PolymorphicBase > | |
| std::unique_ptr< PolymorphicObject > | create_default_impl (std::shared_ptr< const Executor > exec) const override |
| PolymorphicObject * | copy_from_impl (const PolymorphicObject *other) override |
| PolymorphicObject * | copy_from_impl (std::unique_ptr< PolymorphicObject > other) override |
| PolymorphicObject * | move_from_impl (PolymorphicObject *other) override |
| PolymorphicObject * | move_from_impl (std::unique_ptr< PolymorphicObject > other) override |
| PolymorphicObject * | clear_impl () override |
Protected Member Functions inherited from gko::PolymorphicObject | |
| PolymorphicObject (std::shared_ptr< const Executor > exec) | |
| PolymorphicObject (const PolymorphicObject &other) | |
Protected Member Functions inherited from gko::log::EnableLogging< PolymorphicObject > | |
| void | log (Params &&... params) const |
Protected Member Functions inherited from gko::solver::EnableSolverBase< DerivedType, MatrixType > | |
| void | set_system_matrix (std::shared_ptr< const MatrixType > new_system_matrix) |
| void | setup_workspace () const |
Protected Member Functions inherited from gko::solver::SolverBase< MatrixType > | |
| void | set_system_matrix_base (std::shared_ptr< const MatrixType > system_matrix) |
Protected Member Functions inherited from gko::solver::EnableApplyWithInitialGuess< DerivedType > | |
| EnableApplyWithInitialGuess (initial_guess_mode guess=initial_guess_mode::provided) | |
| void | apply_with_initial_guess (const LinOp *b, LinOp *x, initial_guess_mode guess) const override |
| void | apply_with_initial_guess (const LinOp *alpha, const LinOp *b, const LinOp *beta, LinOp *x, initial_guess_mode guess) const override |
| DerivedType * | self () noexcept |
| const DerivedType * | self () const noexcept |
Protected Member Functions inherited from gko::solver::ApplyWithInitialGuess | |
| void | apply_with_initial_guess (ptr_param< const LinOp > b, ptr_param< LinOp > x, initial_guess_mode guess) const |
| void | apply_with_initial_guess (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x, initial_guess_mode guess) const |
| initial_guess_mode | get_default_initial_guess () const |
| ApplyWithInitialGuess (initial_guess_mode guess=initial_guess_mode::provided) | |
| void | set_default_initial_guess (initial_guess_mode guess) |
Friends | |
| class | EnableLinOp< Ir > |
| class | EnablePolymorphicObject< Ir, LinOp > |
| class | EnableApplyWithInitialGuess< Ir > |
Additional Inherited Members | |
Protected Attributes inherited from gko::log::EnableLogging< PolymorphicObject > | |
| std::vector< std::shared_ptr< const Logger > > | loggers_ |
Detailed Description
class gko::solver::Ir< ValueType >
Iterative refinement (IR) is an iterative method that uses another coarse method to approximate the error of the current solution via the current residual. Moreover, it can be also considered as preconditioned Richardson iteration with relaxation factor = 1.
For any approximation of the solution solution to the system Ax = b, the residual is defined as: residual = b - A solution. The error in solution, e = x - solution (with x being the exact solution) can be obtained as the solution to the residual equation Ae = residual, since A e = Ax - A solution = b - A solution = residual. Then, the real solution is computed as x = relaxation_factor * solution + e. Instead of accurately solving the residual equation Ae = residual, the solution of the system e can be approximated to obtain the approximation error using a coarse method solver, which is used to update solution, and the entire process is repeated with the updated solution. This yields the iterative refinement method:
With relaxation_factor equal to 1 (default), the solver is Iterative Refinement, with relaxation_factor equal to a value other than 1, the solver is a Richardson iteration, with possibility for additional preconditioning.
Assuming that solver has accuracy c, i.e., | e - error | <= c | e |, iterative refinement will converge with a convergence rate of c. Indeed, from e - error = x - solution - error = x - solution* (where solution* denotes the value stored in solution after the update) and e = inv(A) residual = inv(A)b - inv(A) A solution = x - solution it follows that | x - solution* | <= c | x - solution |.
Unless otherwise specified via the solver factory parameter, this implementation uses the identity operator (i.e. the solver that approximates the solution of a system Ax = b by setting x := b) as the default inner solver. Such a setting results in a relaxation method known as the Richardson iteration with parameter 1, which is guaranteed to converge for matrices whose spectrum is strictly contained within the unit disc around 1 (i.e., all its eigenvalues lambda have to satisfy the equation `|relaxation_factor * lambda - 1| < 1).
- Template Parameters
-
ValueType precision of matrix elements
Constructor & Destructor Documentation
◆ Ir() [1/2]
| gko::solver::Ir< ValueType >::Ir | ( | const Ir< ValueType > & | ) |
Copy-constructs an IR solver. Inherits the executor, shallow-copies inner solver, stopping criterion and system matrix.
◆ Ir() [2/2]
| gko::solver::Ir< ValueType >::Ir | ( | Ir< ValueType > && | ) |
Move-constructs an IR solver. Preserves the executor, moves inner solver, stopping criterion and system matrix. The moved-from object is empty (0x0 and nullptr inner solver, stopping criterion and system matrix)
Member Function Documentation
◆ apply_uses_initial_guess()
|
inlineoverride |
Return true as iterative solvers use the data in x as an initial guess.
- Returns
- true as iterative solvers use the data in x as an initial guess.
References gko::solver::ApplyWithInitialGuess::get_default_initial_guess(), and gko::solver::provided.
◆ apply_with_initial_guess_impl() [1/2]
|
overrideprotectedvirtual |
The class should override this method and must modify the input vectors according to the initial_guess_mode
Implements gko::solver::EnableApplyWithInitialGuess< DerivedType >.
◆ apply_with_initial_guess_impl() [2/2]
|
overrideprotectedvirtual |
The class should override this method and must modify the input vectors according to the initial_guess_mode
Implements gko::solver::EnableApplyWithInitialGuess< DerivedType >.
◆ conj_transpose()
|
overridevirtual |
Returns a LinOp representing the conjugate transpose of the Transposable object.
- Returns
- a pointer to the new conjugate transposed object
Implements gko::Transposable.
◆ get_solver()
|
inline |
Returns the solver operator used as the inner solver.
- Returns
- the solver operator used as the inner solver
◆ operator=() [1/2]
| Ir & gko::solver::Ir< ValueType >::operator= | ( | const Ir< ValueType > & | ) |
Copy-assigns an IR solver. Preserves the executor, shallow-copies inner solver, stopping criterion and system matrix. If the executors mismatch, clones inner solver, stopping criterion and system matrix onto this executor.
◆ operator=() [2/2]
| Ir & gko::solver::Ir< ValueType >::operator= | ( | Ir< ValueType > && | ) |
Move-assigns an IR solver. Preserves the executor, moves inner solver, stopping criterion and system matrix. If the executors mismatch, clones inner solver, stopping criterion and system matrix onto this executor. The moved-from object is empty (0x0 and nullptr inner solver, stopping criterion and system matrix)
◆ parse()
|
static |
Create the parameters from the property_tree. Because this is directly tied to the specific type, the value/index type settings within config are ignored and type_descriptor is only used for children configs.
- Parameters
-
config the property tree for setting context the registry td_for_child the type descriptor for children configs. The default uses the value type of this class.
- Returns
- parameters
◆ set_solver()
| void gko::solver::Ir< ValueType >::set_solver | ( | std::shared_ptr< const LinOp > | new_solver | ) |
Sets the solver operator used as the inner solver.
- Parameters
-
new_solver the new inner solver
◆ transpose()
|
overridevirtual |
Returns a LinOp representing the transpose of the Transposable object.
- Returns
- a pointer to the new transposed object
Implements gko::Transposable.
The documentation for this class was generated from the following file:
- ginkgo/core/solver/ir.hpp
Generated by
Public Types inherited from