Isai< IsaiType, ValueType, IndexType > Class Template Reference#
|
Reference API
|
#include <ginkgo/core/preconditioner/isai.hpp>
Classes | |
| class | Factory |
| struct | parameters_type |
Public Types | |
| using | value_type = ValueType |
| using | index_type = IndexType |
| using | transposed_type = Isai< IsaiType==isai_type::general ? isai_type::general :IsaiType==isai_type::spd ? isai_type::spd :IsaiType==isai_type::lower ? isai_type::upper :isai_type::lower, ValueType, IndexType > |
| using | Comp = Composition< ValueType > |
| using | Csr = matrix::Csr< ValueType, IndexType > |
| using | Dense = matrix::Dense< ValueType > |
Public Types inherited from gko::EnablePolymorphicAssignment< ConcreteType, ResultType > | |
| using | result_type = ResultType |
Public Types inherited from gko::ConvertibleTo< ResultType > | |
| using | result_type = ResultType |
Public Member Functions | |
| std::shared_ptr< const typename std::conditional< IsaiType==isai_type::spd, Comp, Csr >::type > | get_approximate_inverse () const |
| Isai & | operator= (const Isai &other) |
| Isai & | operator= (Isai &&other) |
| Isai (const Isai &other) | |
| Isai (Isai &&other) | |
| const parameters_type & | get_parameters () const |
| std::unique_ptr< LinOp > | transpose () const override |
| std::unique_ptr< LinOp > | conj_transpose () const override |
Public Member Functions inherited from gko::EnableLinOp< Isai< IsaiType, ValueType, IndexType > > | |
| const Isai< IsaiType, ValueType, IndexType > * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const |
| Isai< IsaiType, ValueType, IndexType > * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) |
| const Isai< IsaiType, ValueType, IndexType > * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) const |
| Isai< IsaiType, ValueType, IndexType > * | 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< ConcreteType, ResultType > | |
| void | convert_to (result_type *result) const override |
| void | move_to (result_type *result) override |
Public Member Functions inherited from gko::ConvertibleTo< ResultType > | |
| void | convert_to (ptr_param< result_type > result) const |
| void | move_to (ptr_param< result_type > result) |
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, IndexType >()) |
Static Public Attributes | |
| static constexpr isai_type | type {IsaiType} |
Protected Member Functions | |
| Isai (std::shared_ptr< const Executor > exec) | |
| Isai (const Factory *factory, std::shared_ptr< const LinOp > system_matrix) | |
| void | apply_impl (const LinOp *b, LinOp *x) const override |
| void | apply_impl (const LinOp *alpha, const LinOp *b, const LinOp *beta, LinOp *x) const override |
Protected Member Functions inherited from gko::EnableLinOp< Isai< IsaiType, ValueType, IndexType > > | |
| Isai< IsaiType, ValueType, IndexType > * | self () noexcept |
| const Isai< IsaiType, ValueType, IndexType > * | 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 |
Additional Inherited Members | |
Protected Attributes inherited from gko::log::EnableLogging< PolymorphicObject > | |
| std::vector< std::shared_ptr< const Logger > > | loggers_ |
Detailed Description
class gko::preconditioner::Isai< IsaiType, ValueType, IndexType >
The Incomplete Sparse Approximate Inverse (ISAI) Preconditioner generates an approximate inverse matrix for a given square matrix A, lower triangular matrix L, upper triangular matrix U or symmetric positive (spd) matrix B.
Using the preconditioner computes \(aiA * x\), \(aiU * x\), \(aiL * x\) or \(aiC^T * aiC * x\) (depending on the type of the Isai) for a given vector x (may have multiple right hand sides). aiA, aiU and aiL are the approximate inverses for A, U and L respectively. aiC is an approximation to C, the exact Cholesky factor of B (This is commonly referred to as a Factorized Sparse Approximate Inverse, short FSPAI).
The sparsity pattern used for the approximate inverse of A, L and U is the same as the sparsity pattern of the respective matrix. For B, the sparsity pattern used for the approximate inverse is the same as the sparsity pattern of the lower triangular half of B.
Note that, except for the spd case, for a matrix A generally ISAI(A)^T != ISAI(A^T).
For more details on the algorithm, see the paper Incomplete Sparse Approximate Inverses for Parallel Preconditioning, which is the basis for this work.
- Note
- GPU implementations can only handle the vector unit width
width(warp size for CUDA) as number of elements per row in the sparse matrix. If there are more thanwidthelements per row, the remaining elements will be ignored.
- Template Parameters
-
IsaiType determines if the ISAI is generated for a general square matrix, a lower triangular matrix, an upper triangular matrix or an spd matrix ValueType precision of matrix elements IndexType precision of matrix indexes
Constructor & Destructor Documentation
◆ Isai() [1/3]
| gko::preconditioner::Isai< IsaiType, ValueType, IndexType >::Isai | ( | const Isai< IsaiType, ValueType, IndexType > & | other | ) |
Copy-constructs an ISAI preconditioner. Inherits the executor, shallow-copies the matrix and parameters.
◆ Isai() [2/3]
| gko::preconditioner::Isai< IsaiType, ValueType, IndexType >::Isai | ( | Isai< IsaiType, ValueType, IndexType > && | other | ) |
Move-constructs an ISAI preconditioner. Inherits the executor, moves the matrix and parameters. The moved-from object is empty (0x0 with nullptr matrix and default parameters)
◆ Isai() [3/3]
|
inlineexplicitprotected |
Creates an Isai preconditioner from a matrix using an Isai::Factory.
- Parameters
-
factory the factory to use to create the preconditioner system_matrix the matrix for which an ISAI is to be computed
References gko::preconditioner::Isai< IsaiType, ValueType, IndexType >::parameters_type::excess_limit, gko::share(), gko::preconditioner::Isai< IsaiType, ValueType, IndexType >::parameters_type::skip_sorting, and gko::preconditioner::Isai< IsaiType, ValueType, IndexType >::parameters_type::sparsity_power.
Member Function Documentation
◆ 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_approximate_inverse()
|
inline |
Returns the approximate inverse of the given matrix (either a CSR matrix for IsaiType general, upper or lower or a composition of two CSR matrices for IsaiType spd).
- Returns
- the generated approximate inverse
References gko::as().
◆ operator=() [1/2]
| Isai & gko::preconditioner::Isai< IsaiType, ValueType, IndexType >::operator= | ( | const Isai< IsaiType, ValueType, IndexType > & | other | ) |
Copy-assigns an ISAI preconditioner. Preserves the executor, shallow-copies the matrix and parameters. Creates a clone of the matrix if it is on the wrong executor.
◆ operator=() [2/2]
| Isai & gko::preconditioner::Isai< IsaiType, ValueType, IndexType >::operator= | ( | Isai< IsaiType, ValueType, IndexType > && | other | ) |
Move-assigns an ISAI preconditioner. Preserves the executor, moves the matrix and parameters. Creates a clone of the matrix if it is on the wrong executor. The moved-from object is empty (0x0 with nullptr matrix and default parameters)
◆ 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/index type of this class.
- Returns
- parameters
◆ 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/preconditioner/isai.hpp
Generated by
Public Types inherited from