Ginkgo  Generated from pipelines/1556235455 branch based on develop. Ginkgo version 1.9.0
A numerical linear algebra library targeting many-core architectures
convergence.hpp
1 // SPDX-FileCopyrightText: 2017 - 2024 The Ginkgo authors
2 //
3 // SPDX-License-Identifier: BSD-3-Clause
4 
5 #ifndef GKO_PUBLIC_CORE_LOG_CONVERGENCE_HPP_
6 #define GKO_PUBLIC_CORE_LOG_CONVERGENCE_HPP_
7 
8 
9 #include <memory>
10 
11 #include <ginkgo/core/log/logger.hpp>
12 #include <ginkgo/core/matrix/dense.hpp>
13 #include <ginkgo/core/stop/criterion.hpp>
14 
15 
16 namespace gko {
22 namespace log {
23 
24 
36 template <typename ValueType = default_precision>
37 class Convergence : public Logger {
38 public:
40  const stop::Criterion* criterion, const size_type& num_iterations,
41  const LinOp* residual, const LinOp* residual_norm,
42  const LinOp* solution, const uint8& stopping_id,
43  const bool& set_finalized, const array<stopping_status>* status,
44  const bool& one_changed, const bool& all_stopped) const override;
45 
47  const stop::Criterion* criterion, const size_type& num_iterations,
48  const LinOp* residual, const LinOp* residual_norm,
49  const LinOp* implicit_sq_resnorm, const LinOp* solution,
50  const uint8& stopping_id, const bool& set_finalized,
51  const array<stopping_status>* status, const bool& one_changed,
52  const bool& all_stopped) const override;
53 
54  void on_iteration_complete(const LinOp* solver, const LinOp* b,
55  const LinOp* x, const size_type& num_iterations,
56  const LinOp* residual,
57  const LinOp* residual_norm,
58  const LinOp* implicit_resnorm_sq,
59  const array<stopping_status>* status,
60  bool stopped) const override;
61 
72  GKO_DEPRECATED("use single-parameter create")
73  static std::unique_ptr<Convergence> create(
74  std::shared_ptr<const Executor>,
75  const mask_type& enabled_events = Logger::criterion_events_mask |
76  Logger::iteration_complete_mask)
77  {
78  return std::unique_ptr<Convergence>(new Convergence(enabled_events));
79  }
80 
90  static std::unique_ptr<Convergence> create(
91  const mask_type& enabled_events = Logger::criterion_events_mask |
92  Logger::iteration_complete_mask)
93  {
94  return std::unique_ptr<Convergence>(new Convergence(enabled_events));
95  }
96 
102  bool has_converged() const noexcept { return convergence_status_; }
103 
107  void reset_convergence_status() { this->convergence_status_ = false; }
108 
114  const size_type& get_num_iterations() const noexcept
115  {
116  return num_iterations_;
117  }
118 
124  const LinOp* get_residual() const noexcept { return residual_.get(); }
125 
131  const LinOp* get_residual_norm() const noexcept
132  {
133  return residual_norm_.get();
134  }
135 
141  const LinOp* get_implicit_sq_resnorm() const noexcept
142  {
143  return implicit_sq_resnorm_.get();
144  }
145 
146 protected:
154  GKO_DEPRECATED("use single-parameter constructor")
155  explicit Convergence(
156  std::shared_ptr<const gko::Executor>,
157  const mask_type& enabled_events = Logger::criterion_events_mask |
158  Logger::iteration_complete_mask)
159  : Logger(enabled_events)
160  {}
161 
168  explicit Convergence(
169  const mask_type& enabled_events = Logger::criterion_events_mask |
170  Logger::iteration_complete_mask)
171  : Logger(enabled_events)
172  {}
173 
174 private:
175  mutable bool convergence_status_{false};
176  mutable size_type num_iterations_{};
177  mutable std::unique_ptr<LinOp> residual_{};
178  mutable std::unique_ptr<LinOp> residual_norm_{};
179  mutable std::unique_ptr<LinOp> implicit_sq_resnorm_{};
180 };
181 
182 
183 } // namespace log
184 } // namespace gko
185 
186 
187 #endif // GKO_PUBLIC_CORE_LOG_CONVERGENCE_HPP_
gko::uint8
std::uint8_t uint8
8-bit unsigned integral type.
Definition: types.hpp:115
gko::log::profile_event_category::solver
Solver events.
gko::log::Convergence::get_residual
const LinOp * get_residual() const noexcept
Returns the residual.
Definition: convergence.hpp:124
gko::log::Convergence::create
static std::unique_ptr< Convergence > create(std::shared_ptr< const Executor >, const mask_type &enabled_events=Logger::criterion_events_mask|Logger::iteration_complete_mask)
Creates a convergence logger.
Definition: convergence.hpp:73
gko::LinOp
Definition: lin_op.hpp:117
gko::log::Convergence::get_num_iterations
const size_type & get_num_iterations() const noexcept
Returns the number of iterations.
Definition: convergence.hpp:114
gko::log::Convergence::reset_convergence_status
void reset_convergence_status()
Resets the convergence status to false.
Definition: convergence.hpp:107
gko::log::Convergence::get_implicit_sq_resnorm
const LinOp * get_implicit_sq_resnorm() const noexcept
Returns the implicit squared residual norm.
Definition: convergence.hpp:141
gko::log::profile_event_category::criterion
Stopping criterion events.
gko::size_type
std::size_t size_type
Integral type used for allocation quantities.
Definition: types.hpp:86
gko
The Ginkgo namespace.
Definition: abstract_factory.hpp:20
gko::array
An array is a container which encapsulates fixed-sized arrays, stored on the Executor tied to the arr...
Definition: array.hpp:26
gko::log::Logger::criterion_events_mask
static constexpr mask_type criterion_events_mask
Bitset Mask which activates all criterion events.
Definition: logger.hpp:635
gko::log::Convergence
Convergence is a Logger which logs data strictly from the criterion_check_completed event.
Definition: convergence.hpp:37
gko::log::Convergence::create
static std::unique_ptr< Convergence > create(const mask_type &enabled_events=Logger::criterion_events_mask|Logger::iteration_complete_mask)
Creates a convergence logger.
Definition: convergence.hpp:90
gko::log::Convergence::has_converged
bool has_converged() const noexcept
Returns true if the solver has converged.
Definition: convergence.hpp:102
gko::log::Logger
Definition: logger.hpp:75
gko::log::Convergence::on_criterion_check_completed
void on_criterion_check_completed(const stop::Criterion *criterion, const size_type &num_iterations, const LinOp *residual, const LinOp *residual_norm, const LinOp *solution, const uint8 &stopping_id, const bool &set_finalized, const array< stopping_status > *status, const bool &one_changed, const bool &all_stopped) const override
stop::Criterion's check completed event.
gko::stop::Criterion
The Criterion class is a base class for all stopping criteria.
Definition: criterion.hpp:36
gko::Executor
The first step in using the Ginkgo library consists of creating an executor.
Definition: executor.hpp:615
gko::log::Convergence::get_residual_norm
const LinOp * get_residual_norm() const noexcept
Returns the residual norm.
Definition: convergence.hpp:131
gko::log::Convergence::on_iteration_complete
void on_iteration_complete(const LinOp *solver, const LinOp *b, const LinOp *x, const size_type &num_iterations, const LinOp *residual, const LinOp *residual_norm, const LinOp *implicit_resnorm_sq, const array< stopping_status > *status, bool stopped) const override
Register the iteration_complete event which logs every completed iterations.