33#ifndef GKO_PUBLIC_CORE_MATRIX_COO_HPP_
34#define GKO_PUBLIC_CORE_MATRIX_COO_HPP_
37#include <ginkgo/core/base/array.hpp>
38#include <ginkgo/core/base/lin_op.hpp>
50template <
typename ValueType,
typename IndexType>
53template <
typename ValueType>
56template <
typename ValueType,
typename IndexType>
59template <
typename ValueType,
typename IndexType>
77template <
typename ValueType = default_precision,
typename IndexType =
int32>
80 public ConvertibleTo<Coo<next_precision<ValueType>, IndexType>>,
87 remove_complex<Coo<ValueType, IndexType>>> {
90 friend class Csr<ValueType, IndexType>;
91 friend class Dense<ValueType>;
94 friend class Hybrid<ValueType, IndexType>;
107 using value_type = ValueType;
108 using index_type = IndexType;
221 this->validate_application_parameters(b.
get(), x.
get());
233 this->validate_application_parameters(b.
get(), x.
get());
252 this->validate_application_parameters(b.
get(), x.
get());
253 GKO_ASSERT_EQUAL_DIMENSIONS(alpha,
dim<2>(1, 1));
267 this->validate_application_parameters(b.
get(), x.
get());
268 GKO_ASSERT_EQUAL_DIMENSIONS(alpha,
dim<2>(1, 1));
289 std::shared_ptr<const Executor> exec,
const dim<2>& size,
290 gko::detail::const_array_view<ValueType>&& values,
291 gko::detail::const_array_view<IndexType>&& col_idxs,
292 gko::detail::const_array_view<IndexType>&& row_idxs)
296 return std::unique_ptr<const Coo>(
new Coo{
297 exec, size, gko::detail::array_const_cast(std::move(values)),
298 gko::detail::array_const_cast(std::move(col_idxs)),
299 gko::detail::array_const_cast(std::move(row_idxs))});
310 Coo(std::shared_ptr<const Executor> exec,
const dim<2>& size =
dim<2>{},
312 : EnableLinOp<Coo>(exec, size),
340 Coo(std::shared_ptr<const Executor> exec,
const dim<2>& size,
342 : EnableLinOp<Coo>(exec, size),
360 void apply_impl(
const LinOp* b, LinOp* x)
const override;
362 void apply_impl(
const LinOp* alpha,
const LinOp* b,
const LinOp* beta,
363 LinOp* x)
const override;
365 void apply2_impl(
const LinOp* b, LinOp* x)
const;
367 void apply2_impl(
const LinOp* alpha,
const LinOp* b, LinOp* x)
const;
370 array<value_type> values_;
371 array<index_type> col_idxs_;
372 array<index_type> row_idxs_;
ConvertibleTo interface is used to mark that the implementer can be converted to the object of Result...
Definition polymorphic_object.hpp:499
The EnableAbsoluteComputation mixin provides the default implementations of compute_absolute_linop an...
Definition lin_op.hpp:823
This mixin implements a static create() method on ConcreteType that dynamically allocates the memory,...
Definition polymorphic_object.hpp:776
The EnableLinOp mixin can be used to provide sensible default implementations of the majority of the ...
Definition lin_op.hpp:908
This mixin inherits from (a subclass of) PolymorphicObject and provides a base implementation of a ne...
Definition polymorphic_object.hpp:691
Definition lin_op.hpp:146
std::shared_ptr< const Executor > get_executor() const noexcept
Returns the Executor of the object.
Definition polymorphic_object.hpp:263
A LinOp implementing this interface can read its data from a matrix_data structure.
Definition lin_op.hpp:634
A LinOp implementing this interface can write its data to a matrix_data structure.
Definition lin_op.hpp:689
value_type * get_data() noexcept
Returns a pointer to the block of memory used to store the elements of the array.
Definition array.hpp:646
const value_type * get_const_data() const noexcept
Returns a constant pointer to the block of memory used to store the elements of the array.
Definition array.hpp:655
size_type get_num_elems() const noexcept
Returns the number of elements in the array.
Definition array.hpp:637
This type is a device-side equivalent to matrix_data.
Definition device_matrix_data.hpp:63
COO stores a matrix in the coordinate matrix format.
Definition coo.hpp:87
index_type * get_col_idxs() noexcept
Returns the column indexes of the matrix.
Definition coo.hpp:166
const index_type * get_const_col_idxs() const noexcept
Returns the column indexes of the matrix.
Definition coo.hpp:175
void read(const device_mat_data &data) override
Reads a matrix from a device_matrix_data structure.
static std::unique_ptr< const Coo > create_const(std::shared_ptr< const Executor > exec, const dim< 2 > &size, gko::detail::const_array_view< ValueType > &&values, gko::detail::const_array_view< IndexType > &&col_idxs, gko::detail::const_array_view< IndexType > &&row_idxs)
Creates a constant (immutable) Coo matrix from a set of constant arrays.
Definition coo.hpp:288
void read(device_mat_data &&data) override
Reads a matrix from a device_matrix_data structure.
const LinOp * apply2(ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< LinOp > x) const
Definition coo.hpp:264
LinOp * apply2(ptr_param< const LinOp > b, ptr_param< LinOp > x)
Applies Coo matrix axpy to a vector (or a sequence of vectors).
Definition coo.hpp:219
LinOp * apply2(ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< LinOp > x)
Performs the operation x = alpha * Coo * b + x.
Definition coo.hpp:249
void compute_absolute_inplace() override
Compute absolute inplace on each element.
const value_type * get_const_values() const noexcept
Returns the values of the matrix.
Definition coo.hpp:156
void read(const mat_data &data) override
Reads a matrix from a matrix_data structure.
const index_type * get_const_row_idxs() const noexcept
Definition coo.hpp:194
const LinOp * apply2(ptr_param< const LinOp > b, ptr_param< LinOp > x) const
Definition coo.hpp:231
std::unique_ptr< absolute_type > compute_absolute() const override
Gets the AbsoluteLinOp.
void write(mat_data &data) const override
Writes a matrix to a matrix_data structure.
size_type get_num_stored_elements() const noexcept
Returns the number of elements explicitly stored in the matrix.
Definition coo.hpp:204
std::unique_ptr< Diagonal< ValueType > > extract_diagonal() const override
Extracts the diagonal entries of the matrix into a vector.
index_type * get_row_idxs() noexcept
Returns the row indexes of the matrix.
Definition coo.hpp:185
value_type * get_values() noexcept
Returns the values of the matrix.
Definition coo.hpp:147
CSR is a matrix format which stores only the nonzero coefficients by compressing each row of the matr...
Definition csr.hpp:146
Dense is a matrix format which explicitly stores all values of the matrix.
Definition dense.hpp:136
HYBRID is a matrix format which splits the matrix into ELLPACK and COO format.
Definition hybrid.hpp:81
This class is used for function parameters in the place of raw pointers.
Definition utils_helper.hpp:71
T * get() const
Definition utils_helper.hpp:105
The Ginkgo namespace.
Definition abstract_factory.hpp:48
constexpr T one()
Returns the multiplicative identity for T.
Definition math.hpp:803
typename detail::remove_complex_s< T >::type remove_complex
Obtain the type which removed the complex of complex/scalar type or the template parameter of class b...
Definition math.hpp:354
typename detail::next_precision_impl< T >::type next_precision
Obtains the next type in the singly-linked precision list.
Definition math.hpp:490
typename detail::to_complex_s< T >::type to_complex
Obtain the type which adds the complex of complex/scalar type or the template parameter of class by a...
Definition math.hpp:373
std::size_t size_type
Integral type used for allocation quantities.
Definition types.hpp:120
detail::temporary_clone< detail::pointee< Ptr > > make_temporary_clone(std::shared_ptr< const Executor > exec, Ptr &&ptr)
Creates a temporary_clone.
Definition temporary_clone.hpp:207
A type representing the dimensions of a multidimensional object.
Definition dim.hpp:55
This structure is used as an intermediate data type to store a sparse matrix.
Definition matrix_data.hpp:155