Ginkgo  Generated from pipelines/1556235455 branch based on develop. Ginkgo version 1.9.0
A numerical linear algebra library targeting many-core architectures
batch_jacobi.hpp
1 // SPDX-FileCopyrightText: 2017 - 2024 The Ginkgo authors
2 //
3 // SPDX-License-Identifier: BSD-3-Clause
4 
5 #ifndef GKO_PUBLIC_CORE_PRECONDITIONER_BATCH_JACOBI_HPP_
6 #define GKO_PUBLIC_CORE_PRECONDITIONER_BATCH_JACOBI_HPP_
7 
8 
9 #include <ginkgo/core/base/array.hpp>
10 #include <ginkgo/core/base/batch_lin_op.hpp>
11 #include <ginkgo/core/base/batch_multi_vector.hpp>
12 #include <ginkgo/core/base/exception_helpers.hpp>
13 #include <ginkgo/core/base/lin_op.hpp>
14 #include <ginkgo/core/base/types.hpp>
15 #include <ginkgo/core/matrix/batch_csr.hpp>
16 #include <ginkgo/core/matrix/batch_dense.hpp>
17 #include <ginkgo/core/matrix/csr.hpp>
18 
19 
20 namespace gko {
21 namespace batch {
22 namespace preconditioner {
23 
24 
49 template <typename ValueType = default_precision, typename IndexType = int32>
50 class Jacobi final : public EnableBatchLinOp<Jacobi<ValueType, IndexType>> {
51  friend class EnableBatchLinOp<Jacobi>;
53 
54 public:
57  using value_type = ValueType;
58  using index_type = IndexType;
60 
67  const index_type* get_const_block_pointers() const noexcept
68  {
69  return block_pointers_.get_const_data();
70  }
71 
78  const index_type* get_const_map_block_to_row() const noexcept
79  {
80  return map_block_to_row_.get_const_data();
81  }
82 
89  const index_type* get_const_blocks_cumulative_offsets() const noexcept
90  {
91  return blocks_cumulative_offsets_.get_const_data();
92  }
93 
99  uint32 get_max_block_size() const noexcept
100  {
101  return parameters_.max_block_size;
102  }
103 
109  size_type get_num_blocks() const noexcept { return num_blocks_; }
110 
129  const value_type* get_const_blocks() const noexcept
130  {
131  return blocks_.get_const_data();
132  }
133 
144  {
145  return blocks_.get_size();
146  }
147 
149  {
163 
191  nullptr);
192  };
195 
196 private:
197  explicit Jacobi(std::shared_ptr<const Executor> exec);
198 
199  explicit Jacobi(const Factory* factory,
200  std::shared_ptr<const BatchLinOp> system_matrix);
201 
202  void generate_precond(const BatchLinOp* const system_matrix);
203 
204  size_type compute_storage_space(const size_type num_batch) const noexcept;
205 
206  void detect_blocks(
207  const gko::matrix::Csr<ValueType, IndexType>* system_matrix);
208 
209  array<index_type> block_pointers_;
210  size_type num_blocks_;
211  array<value_type> blocks_;
212  array<index_type> map_block_to_row_;
213  array<index_type> blocks_cumulative_offsets_;
214 };
215 
216 
217 } // namespace preconditioner
218 } // namespace batch
219 } // namespace gko
220 
221 
222 #endif // GKO_PUBLIC_CORE_PRECONDITIONER_BATCH_JACOBI_HPP_
gko::batch::EnableBatchLinOp
The EnableBatchLinOp mixin can be used to provide sensible default implementations of the majority of...
Definition: batch_lin_op.hpp:250
gko::matrix::Csr
CSR is a matrix format which stores only the nonzero coefficients by compressing each row of the matr...
Definition: matrix.hpp:28
gko::batch::preconditioner::Jacobi::get_num_blocks
size_type get_num_blocks() const noexcept
Returns the number of blocks in an individual batch entry.
Definition: batch_jacobi.hpp:109
gko::batch::BatchLinOp
Definition: batch_lin_op.hpp:59
gko::batch::preconditioner::Jacobi::get_max_block_size
uint32 get_max_block_size() const noexcept
Returns the max block size.
Definition: batch_jacobi.hpp:99
gko::batch::preconditioner::Jacobi::Factory
Definition: batch_jacobi.hpp:193
gko::size_type
std::size_t size_type
Integral type used for allocation quantities.
Definition: types.hpp:86
gko::batch::matrix::Csr
Csr is a general sparse matrix format that stores the column indices for each nonzero entry and a cum...
Definition: batch_csr.hpp:47
gko::batch::preconditioner::Jacobi::get_const_blocks_cumulative_offsets
const index_type * get_const_blocks_cumulative_offsets() const noexcept
Returns the cumulative blocks storage array.
Definition: batch_jacobi.hpp:89
GKO_FACTORY_PARAMETER_SCALAR
#define GKO_FACTORY_PARAMETER_SCALAR(_name, _default)
Creates a scalar factory parameter in the factory parameters structure.
Definition: abstract_factory.hpp:445
gko
The Ginkgo namespace.
Definition: abstract_factory.hpp:20
gko::batch::preconditioner::Jacobi::get_const_map_block_to_row
const index_type * get_const_map_block_to_row() const noexcept
Returns the mapping between the blocks and the row id.
Definition: batch_jacobi.hpp:78
gko::array< index_type >
gko::uint32
std::uint32_t uint32
32-bit unsigned integral type.
Definition: types.hpp:126
gko::batch::preconditioner::Jacobi
A block-Jacobi preconditioner is a block-diagonal linear operator, obtained by inverting the diagonal...
Definition: batch_jacobi.hpp:50
gko::batch::preconditioner::Jacobi::get_const_blocks
const value_type * get_const_blocks() const noexcept
Returns the pointer to the memory used for storing the block data.
Definition: batch_jacobi.hpp:129
gko::batch::preconditioner::Jacobi::parameters_type::max_block_size
uint32 max_block_size
Maximal size of diagonal blocks.
Definition: batch_jacobi.hpp:162
gko::batch::preconditioner::Jacobi::get_num_stored_elements
size_type get_num_stored_elements() const noexcept
Returns the number of elements explicitly stored in the dense blocks.
Definition: batch_jacobi.hpp:143
GKO_ENABLE_BUILD_METHOD
#define GKO_ENABLE_BUILD_METHOD(_factory_name)
Defines a build method for the factory, simplifying its construction by removing the repetitive typin...
Definition: abstract_factory.hpp:394
GKO_CREATE_FACTORY_PARAMETERS
#define GKO_CREATE_FACTORY_PARAMETERS(_parameters_name, _factory_name)
This Macro will generate a new type containing the parameters for the factory _factory_name.
Definition: abstract_factory.hpp:280
GKO_ENABLE_BATCH_LIN_OP_FACTORY
#define GKO_ENABLE_BATCH_LIN_OP_FACTORY(_batch_lin_op, _parameters_name, _factory_name)
This macro will generate a default implementation of a BatchLinOpFactory for the BatchLinOp subclass ...
Definition: batch_lin_op.hpp:358
gko::array::get_const_data
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:682
GKO_FACTORY_PARAMETER_VECTOR
#define GKO_FACTORY_PARAMETER_VECTOR(_name,...)
Creates a vector factory parameter in the factory parameters structure.
Definition: abstract_factory.hpp:461
gko::batch::preconditioner::Jacobi::get_const_block_pointers
const index_type * get_const_block_pointers() const noexcept
Returns the block pointers.
Definition: batch_jacobi.hpp:67
gko::array::get_size
size_type get_size() const noexcept
Returns the number of elements in the array.
Definition: array.hpp:656
gko::EnablePolymorphicObject
This mixin inherits from (a subclass of) PolymorphicObject and provides a base implementation of a ne...
Definition: polymorphic_object.hpp:661