 |
Ginkgo
Generated from pipelines/2171896597 branch based on develop. Ginkgo version 1.11.0
A numerical linear algebra library targeting many-core architectures
|
5 #ifndef GKO_PUBLIC_CORE_BASE_COMPOSITION_HPP_
6 #define GKO_PUBLIC_CORE_BASE_COMPOSITION_HPP_
12 #include <ginkgo/core/base/executor.hpp>
13 #include <ginkgo/core/base/lin_op.hpp>
38 template <
typename ValueType = default_precision>
44 GKO_ASSERT_SUPPORTED_VALUE_TYPE;
47 using value_type = ValueType;
61 std::unique_ptr<LinOp>
transpose()
const override;
93 void add_operators() {}
95 template <
typename... Rest>
96 void add_operators(std::shared_ptr<const LinOp> oper, Rest&&... rest)
98 if (!operators_.empty()) {
99 GKO_ASSERT_CONFORMANT(
this, oper);
102 operators_.push_back(std::move(oper));
103 if (operators_.back()->get_executor() != exec) {
104 operators_.back() =
gko::clone(exec, operators_.back());
106 this->set_size(dim<2>{operators_.front()->get_size()[0],
107 operators_.back()->get_size()[1]});
108 add_operators(std::forward<Rest>(rest)...);
116 explicit Composition(std::shared_ptr<const Executor> exec)
129 template <
typename Iterator,
130 typename = std::void_t<
131 typename std::iterator_traits<Iterator>::iterator_category>>
135 throw OutOfBoundsError(__FILE__, __LINE__, 1, 0);
137 return (*begin)->get_executor();
141 for (
auto it = begin; it != end; ++it) {
154 template <
typename... Rest>
155 explicit Composition(std::shared_ptr<const LinOp> oper, Rest&&... rest)
158 add_operators(std::move(oper), std::forward<Rest>(rest)...);
161 void apply_impl(
const LinOp* b,
LinOp* x)
const override;
164 LinOp* x)
const override;
167 std::vector<std::shared_ptr<const LinOp>> operators_;
168 mutable array<ValueType> storage_;
178 template <
typename ValueType = default_precision>
181 using value_type = ValueType;
206 if (composition_ ==
nullptr) {
209 return composition_->get_operators().at(index);
217 template <
typename...
LinOp>
218 void set_composition(
LinOp&&... linop)
225 std::shared_ptr<Composition<ValueType>> composition_;
232 #endif // GKO_PUBLIC_CORE_BASE_COMPOSITION_HPP_
Composition & operator=(const Composition &)
Copy-assigns a Composition.
The UseComposition class can be used to store the composition information in LinOp.
Definition: composition.hpp:179
Definition: lin_op.hpp:117
This mixin implements a static create() method on ConcreteType that dynamically allocates the memory,...
Definition: polymorphic_object.hpp:767
Linear operators which support transposition should implement the Transposable interface.
Definition: lin_op.hpp:433
std::size_t size_type
Integral type used for allocation quantities.
Definition: types.hpp:90
std::shared_ptr< Composition< ValueType > > get_composition() const
Returns the composition operators.
Definition: composition.hpp:187
detail::cloned_type< Pointer > clone(const Pointer &p)
Creates a unique clone of the object pointed to by p.
Definition: utils_helper.hpp:173
The Ginkgo namespace.
Definition: abstract_factory.hpp:20
The Composition class can be used to compose linear operators op1, op2, ..., opn and obtain the opera...
Definition: composition.hpp:39
Composition(const Composition &)
Copy-constructs a Composition.
const std::vector< std::shared_ptr< const LinOp > > & get_operators() const noexcept
Returns a list of operators of the composition.
Definition: composition.hpp:55
std::shared_ptr< const LinOp > get_operator_at(size_type index) const
Returns the operator at index-th position of composition.
Definition: composition.hpp:204
std::unique_ptr< LinOp > conj_transpose() const override
Returns a LinOp representing the conjugate transpose of the Transposable object.
std::shared_ptr< const Executor > get_executor() const noexcept
Returns the Executor of the object.
Definition: polymorphic_object.hpp:243
The EnableLinOp mixin can be used to provide sensible default implementations of the majority of the ...
Definition: lin_op.hpp:877
std::unique_ptr< LinOp > transpose() const override
Returns a LinOp representing the transpose of the Transposable object.
LinOp(const LinOp &)=default
Copy-constructs a LinOp.
This mixin inherits from (a subclass of) PolymorphicObject and provides a base implementation of a ne...
Definition: polymorphic_object.hpp:667