Ginkgo Generated from branch based on main. Ginkgo version 1.10.0
A numerical linear algebra library targeting many-core architectures
Loading...
Searching...
No Matches
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
16namespace gko {
22namespace log {
23
24
36template <typename ValueType = default_precision>
37class Convergence : public Logger {
38public:
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
146protected:
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
174private:
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_
The first step in using the Ginkgo library consists of creating an executor.
Definition executor.hpp:615
Definition lin_op.hpp:117
An array is a container which encapsulates fixed-sized arrays, stored on the Executor tied to the arr...
Definition array.hpp:166
Convergence is a Logger which logs data strictly from the criterion_check_completed event.
Definition convergence.hpp:37
bool has_converged() const noexcept
Returns true if the solver has converged.
Definition convergence.hpp:102
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
const size_type & get_num_iterations() const noexcept
Returns the number of iterations.
Definition convergence.hpp:114
void on_criterion_check_completed(const stop::Criterion *criterion, const size_type &num_iterations, const LinOp *residual, const LinOp *residual_norm, const LinOp *implicit_sq_resnorm, 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.
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.
const LinOp * get_residual() const noexcept
Returns the residual.
Definition convergence.hpp:124
const LinOp * get_residual_norm() const noexcept
Returns the residual norm.
Definition convergence.hpp:131
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.
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
void reset_convergence_status()
Resets the convergence status to false.
Definition convergence.hpp:107
const LinOp * get_implicit_sq_resnorm() const noexcept
Returns the implicit squared residual norm.
Definition convergence.hpp:141
Definition logger.hpp:74
static constexpr mask_type criterion_events_mask
Bitset Mask which activates all criterion events.
Definition logger.hpp:673
The Criterion class is a base class for all stopping criteria.
Definition criterion.hpp:36
The logger namespace .
Definition convergence.hpp:22
@ criterion
Stopping criterion events.
Definition profiler_hook.hpp:36
@ solver
Solver events.
Definition profiler_hook.hpp:34
The Ginkgo namespace.
Definition abstract_factory.hpp:20
std::uint8_t uint8
8-bit unsigned integral type.
Definition types.hpp:119
std::size_t size_type
Integral type used for allocation quantities.
Definition types.hpp:90
STL namespace.