33#ifndef GKO_PUBLIC_CORE_MATRIX_ELL_HPP_
34#define GKO_PUBLIC_CORE_MATRIX_ELL_HPP_
37#include <ginkgo/core/base/array.hpp>
38#include <ginkgo/core/base/lin_op.hpp>
45template <
typename ValueType>
48template <
typename ValueType,
typename IndexType>
51template <
typename ValueType,
typename IndexType>
54template <
typename ValueType,
typename IndexType>
79template <
typename ValueType = default_precision,
typename IndexType =
int32>
82 public ConvertibleTo<Ell<next_precision<ValueType>, IndexType>>,
89 remove_complex<Ell<ValueType, IndexType>>> {
92 friend class Dense<ValueType>;
93 friend class Coo<ValueType, IndexType>;
94 friend class Csr<ValueType, IndexType>;
97 friend class Hybrid<ValueType, IndexType>;
110 using value_type = ValueType;
111 using index_type = IndexType;
188 return num_stored_elements_per_row_;
220 return values_.
get_data()[this->linearize_index(row,
idx)];
268 std::shared_ptr<const Executor> exec,
const dim<2>& size,
269 gko::detail::const_array_view<ValueType>&& values,
270 gko::detail::const_array_view<IndexType>&& col_idxs,
275 return std::unique_ptr<const Ell>(
new Ell{
276 exec, size, gko::detail::array_const_cast(std::move(values)),
277 gko::detail::array_const_cast(std::move(col_idxs)),
317 Ell(std::shared_ptr<const Executor> exec,
const dim<2>& size =
dim<2>{})
318 :
Ell(std::
move(exec), size, size[1])
330 Ell(std::shared_ptr<const Executor> exec,
const dim<2>& size,
344 Ell(std::shared_ptr<const Executor> exec,
const dim<2>& size,
346 : EnableLinOp<
Ell>(exec, size),
374 template <
typename ValuesArray,
typename ColIdxsArray>
375 Ell(std::shared_ptr<const Executor> exec,
const dim<2>& size,
378 : EnableLinOp<
Ell>(exec, size),
384 GKO_ASSERT_EQ(num_stored_elements_per_row_ * stride_,
386 GKO_ASSERT_EQ(num_stored_elements_per_row_ * stride_,
401 void apply_impl(
const LinOp* b, LinOp* x)
const override;
403 void apply_impl(
const LinOp* alpha,
const LinOp* b,
const LinOp* beta,
404 LinOp* x)
const override;
408 return row + stride_ * col;
412 array<value_type> values_;
413 array<index_type> col_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
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
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
ELL is a matrix format where stride with explicit zeros is used such that all rows have the same numb...
Definition ell.hpp:89
value_type & val_at(size_type row, size_type idx) noexcept
Returns the idx-th non-zero element of the row-th row .
Definition ell.hpp:218
size_type get_num_stored_elements_per_row() const noexcept
Returns the number of stored elements per row.
Definition ell.hpp:186
size_type get_stride() const noexcept
Returns the stride of the matrix.
Definition ell.hpp:196
index_type col_at(size_type row, size_type idx) const noexcept
Returns the idx-th column index of the row-th row .
Definition ell.hpp:249
value_type * get_values() noexcept
Returns the values of the matrix.
Definition ell.hpp:148
void read(const mat_data &data) override
Reads a matrix from a matrix_data structure.
value_type val_at(size_type row, size_type idx) const noexcept
Returns the idx-th non-zero element of the row-th row .
Definition ell.hpp:226
Ell & operator=(Ell &&)
Move-assigns an Ell matrix.
void compute_absolute_inplace() override
Compute absolute inplace on each element.
void read(const device_mat_data &data) override
Reads a matrix from a device_matrix_data structure.
std::unique_ptr< Diagonal< ValueType > > extract_diagonal() const override
Extracts the diagonal entries of the matrix into a vector.
index_type * get_col_idxs() noexcept
Returns the column indexes of the matrix.
Definition ell.hpp:167
Ell(Ell &&)
Move-constructs an Ell matrix.
std::unique_ptr< absolute_type > compute_absolute() const override
Gets the AbsoluteLinOp.
Ell(const Ell &)
Copy-constructs an Ell matrix.
const index_type * get_const_col_idxs() const noexcept
Returns the column indexes of the matrix.
Definition ell.hpp:176
static std::unique_ptr< const Ell > 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, size_type num_stored_elements_per_row, size_type stride)
Creates a constant (immutable) Ell matrix from a set of constant arrays.
Definition ell.hpp:267
Ell & operator=(const Ell &)
Copy-assigns an Ell matrix.
const value_type * get_const_values() const noexcept
Returns the values of the matrix.
Definition ell.hpp:157
index_type & col_at(size_type row, size_type idx) noexcept
Returns the idx-th column index of the row-th row .
Definition ell.hpp:241
void read(device_mat_data &&data) override
Reads a matrix from a device_matrix_data structure.
size_type get_num_stored_elements() const noexcept
Returns the number of elements explicitly stored in the matrix.
Definition ell.hpp:203
void write(mat_data &data) const override
Writes a matrix to a matrix_data structure.
HYBRID is a matrix format which splits the matrix into ELLPACK and COO format.
Definition hybrid.hpp:81
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
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