BlockOperator Class Reference

BlockOperator Class Reference#

Reference API: gko::BlockOperator Class Reference
Reference API

#include <ginkgo/core/base/block_operator.hpp>

Inheritance diagram for gko::BlockOperator:
[legend]

Public Member Functions

dim< 2 > get_block_size () const
 
const LinOpblock_at (size_type i, size_type j) const
 
 BlockOperator (const BlockOperator &other)
 
 BlockOperator (BlockOperator &&other) noexcept
 
BlockOperatoroperator= (const BlockOperator &other)
 
BlockOperatoroperator= (BlockOperator &&other)
 
- Public Member Functions inherited from gko::EnableLinOp< BlockOperator >
const BlockOperatorapply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const
 
BlockOperatorapply (ptr_param< const LinOp > b, ptr_param< LinOp > x)
 
const BlockOperatorapply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) const
 
BlockOperatorapply (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
PolymorphicObjectoperator= (const PolymorphicObject &)
 
std::unique_ptr< PolymorphicObjectcreate_default (std::shared_ptr< const Executor > exec) const
 
std::unique_ptr< PolymorphicObjectcreate_default () const
 
std::unique_ptr< PolymorphicObjectclone (std::shared_ptr< const Executor > exec) const
 
std::unique_ptr< PolymorphicObjectclone () const
 
PolymorphicObjectcopy_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)
 
PolymorphicObjectcopy_from (const std::shared_ptr< const PolymorphicObject > &other)
 
PolymorphicObjectmove_from (ptr_param< PolymorphicObject > other)
 
PolymorphicObjectclear ()
 
std::shared_ptr< const Executorget_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 std::unique_ptr< BlockOperatorcreate (std::shared_ptr< const Executor > exec)
 
static std::unique_ptr< BlockOperatorcreate (std::shared_ptr< const Executor > exec, std::vector< std::vector< std::shared_ptr< const LinOp > > > blocks)
 

Friends

class EnablePolymorphicObject< BlockOperator, LinOp >
 

Additional Inherited Members

- Public Types inherited from gko::EnablePolymorphicAssignment< ConcreteType, ResultType >
using result_type = ResultType
 
- Public Types inherited from gko::ConvertibleTo< ResultType >
using result_type = ResultType
 
- Protected Member Functions inherited from gko::EnableLinOp< BlockOperator >
BlockOperatorself () noexcept
 
const BlockOperatorself () const noexcept
 
- Protected Member Functions inherited from gko::EnablePolymorphicObject< ConcreteObject, PolymorphicBase >
std::unique_ptr< PolymorphicObjectcreate_default_impl (std::shared_ptr< const Executor > exec) const override
 
PolymorphicObjectcopy_from_impl (const PolymorphicObject *other) override
 
PolymorphicObjectcopy_from_impl (std::unique_ptr< PolymorphicObject > other) override
 
PolymorphicObjectmove_from_impl (PolymorphicObject *other) override
 
PolymorphicObjectmove_from_impl (std::unique_ptr< PolymorphicObject > other) override
 
PolymorphicObjectclear_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 Attributes inherited from gko::log::EnableLogging< PolymorphicObject >
std::vector< std::shared_ptr< const Logger > > loggers_
 

Detailed Description

A BlockOperator represents a linear operator that is partitioned into multiple blocks.

For example, a BlockOperator can be used to define the operator:

| A B |
| C D |

where A, B, C, D itself are matrices of compatible size. This can be created with:

++
std::shared_ptr<LinOp> A = ...;
std::shared_ptr<LinOp> B = ...;
std::shared_ptr<LinOp> C = ...;
std::shared_ptr<LinOp> D = ...;
auto bop = BlockOperator::create(exec, {{A, B}, {C, D}});
static std::unique_ptr< BlockOperator > create(std::shared_ptr< const Executor > exec)

The requirements on the individual blocks passed to the create method are:

  • In each block-row, all blocks have the same number of rows
  • In each block-column, all blocks have the same number of columns
  • Each block-row must have the same number of blocks It is possible to set blocks to zero, by passing in a nullptr. But every block-row and block-column must contain at least one non-nullptr block.

The constructor will store all passed in blocks on the same executor as the BlockOperator, which will requires copying any block that is associated with a different executor.

Constructor & Destructor Documentation

◆ BlockOperator() [1/2]

gko::BlockOperator::BlockOperator ( const BlockOperator other)

Copy constructs a BlockOperator. The executor of other is used for this. The blocks of other are deep-copied into this, using clone.

◆ BlockOperator() [2/2]

gko::BlockOperator::BlockOperator ( BlockOperator &&  other)
noexcept

Move constructs a BlockOperator. The executor of other is used for this. All remaining data of other is moved into this. After this operation, other will be empty.

Member Function Documentation

◆ block_at()

const LinOp * gko::BlockOperator::block_at ( size_type  i,
size_type  j 
) const
inline

Const access to a specific block.

Parameters
iblock row.
jblock column.
Returns
the block stored at (i, j).

◆ create() [1/2]

static std::unique_ptr< BlockOperator > gko::BlockOperator::create ( std::shared_ptr< const Executor exec)
static

Create empty BlockOperator.

Parameters
execthe executor of this.
Returns
empty BlockOperator.

◆ create() [2/2]

static std::unique_ptr< BlockOperator > gko::BlockOperator::create ( std::shared_ptr< const Executor exec,
std::vector< std::vector< std::shared_ptr< const LinOp > > >  blocks 
)
static

Create BlockOperator from the given blocks.

Parameters
execthe executor of this.
blocksthe blocks of this operator. The blocks will be used in a row-major form.
Returns
BlockOperator with the given blocks.

◆ get_block_size()

dim< 2 > gko::BlockOperator::get_block_size ( ) const
inline

Get the block dimension of this, i.e. the number of blocks per row and column.

Returns
The block dimension of this.

◆ operator=() [1/2]

BlockOperator & gko::BlockOperator::operator= ( BlockOperator &&  other)

Move assigns a BlockOperator. The executor of this is not modified. All data of other (except its executor) is moved into this. If the executor of this and other differ, the blocks will be copied to the executor of this. After this operation, other will be empty.

◆ operator=() [2/2]

BlockOperator & gko::BlockOperator::operator= ( const BlockOperator other)

Copy assigns a BlockOperator. The executor of this is not modified. The blocks of other are deep-copied into this, using clone.


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