Ginkgo Generated from branch based on master. Ginkgo version 1.8.0
A numerical linear algebra library targeting many-core architectures
Loading...
Searching...
No Matches
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
20namespace gko {
21namespace batch {
22namespace preconditioner {
23
24
49template <typename ValueType = default_precision, typename IndexType = int32>
50class Jacobi final : public EnableBatchLinOp<Jacobi<ValueType, IndexType>> {
51 friend class EnableBatchLinOp<Jacobi>;
53
54public:
55 using EnableBatchLinOp<Jacobi>::convert_to;
56 using EnableBatchLinOp<Jacobi>::move_to;
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
196private:
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_
This mixin inherits from (a subclass of) PolymorphicObject and provides a base implementation of a ne...
Definition polymorphic_object.hpp:663
An array is a container which encapsulates fixed-sized arrays, stored on the Executor tied to the arr...
Definition logger.hpp:25
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:683
size_type get_size() const noexcept
Returns the number of elements in the array.
Definition array.hpp:657
Definition batch_lin_op.hpp:60
The EnableBatchLinOp mixin can be used to provide sensible default implementations of the majority of...
Definition batch_lin_op.hpp:253
Csr is a general sparse matrix format that stores the column indices for each nonzero entry and a cum...
Definition batch_csr.hpp:50
Definition batch_jacobi.hpp:193
A block-Jacobi preconditioner is a block-diagonal linear operator, obtained by inverting the diagonal...
Definition batch_jacobi.hpp:50
const index_type * get_const_block_pointers() const noexcept
Returns the block pointers.
Definition batch_jacobi.hpp:67
uint32 get_max_block_size() const noexcept
Returns the max block size.
Definition batch_jacobi.hpp:99
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
const index_type * get_const_blocks_cumulative_offsets() const noexcept
Returns the cumulative blocks storage array.
Definition batch_jacobi.hpp:89
size_type get_num_blocks() const noexcept
Returns the number of blocks in an individual batch entry.
Definition batch_jacobi.hpp:109
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
size_type get_num_stored_elements() const noexcept
Returns the number of elements explicitly stored in the dense blocks.
Definition batch_jacobi.hpp:143
CSR is a matrix format which stores only the nonzero coefficients by compressing each row of the matr...
Definition sparsity_csr.hpp:22
#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:359
#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
#define GKO_FACTORY_PARAMETER_SCALAR(_name, _default)
Creates a scalar factory parameter in the factory parameters structure.
Definition abstract_factory.hpp:445
#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
#define GKO_FACTORY_PARAMETER_VECTOR(_name,...)
Creates a vector factory parameter in the factory parameters structure.
Definition abstract_factory.hpp:461
The Ginkgo namespace.
Definition abstract_factory.hpp:20
std::uint32_t uint32
32-bit unsigned integral type.
Definition types.hpp:126
std::size_t size_type
Integral type used for allocation quantities.
Definition types.hpp:86
uint32 max_block_size
Maximal size of diagonal blocks.
Definition batch_jacobi.hpp:162