5#ifndef GKO_PUBLIC_CORE_STOP_RESIDUAL_NORM_HPP_
6#define GKO_PUBLIC_CORE_STOP_RESIDUAL_NORM_HPP_
11#include <ginkgo/core/base/array.hpp>
12#include <ginkgo/core/base/math.hpp>
13#include <ginkgo/core/base/types.hpp>
14#include <ginkgo/core/base/utils.hpp>
15#include <ginkgo/core/matrix/dense.hpp>
16#include <ginkgo/core/stop/criterion.hpp>
37enum class mode { absolute, initial_resnorm, rhs_norm };
49template <
typename ValueType>
54 GKO_ASSERT_SUPPORTED_VALUE_TYPE;
61 bool check_impl(
uint8 stoppingId,
bool setFinalized,
65 explicit ResidualNormBase(std::shared_ptr<const gko::Executor> exec)
67 device_storage_{exec, 2}
70 explicit ResidualNormBase(std::shared_ptr<const gko::Executor> exec,
72 absolute_type reduction_factor,
mode baseline);
75 std::unique_ptr<NormVector> starting_tau_{};
76 std::unique_ptr<NormVector> u_dense_tau_{};
81 mode baseline_{mode::rhs_norm};
82 std::shared_ptr<const LinOp> system_matrix_{};
83 std::shared_ptr<const LinOp> b_{};
85 std::shared_ptr<const Vector> one_{};
86 std::shared_ptr<const Vector> neg_one_{};
112template <
typename ValueType = default_precision>
113class ResidualNorm :
public ResidualNormBase<ValueType> {
125 5 * std ::numeric_limits<remove_complex<ValueType>>::epsilon()};
129 this->reduction_factor = value;
139 GKO_ENABLE_CRITERION_FACTORY(ResidualNorm<ValueType>, parameters, Factory);
143 explicit ResidualNorm(std::shared_ptr<const gko::Executor> exec)
144 : ResidualNormBase<ValueType>(exec)
148 : ResidualNormBase<ValueType>(
149 factory->get_executor(), args,
150 factory->get_parameters().reduction_factor,
151 factory->get_parameters().baseline),
152 parameters_{factory->get_parameters()}
174template <
typename ValueType = default_precision>
175class ImplicitResidualNorm :
public ResidualNormBase<ValueType> {
187 5 * std ::numeric_limits<remove_complex<ValueType>>::epsilon()};
191 this->reduction_factor = value;
201 GKO_ENABLE_CRITERION_FACTORY(ImplicitResidualNorm<ValueType>, parameters,
208 bool check_impl(
uint8 stoppingId,
bool setFinalized,
212 explicit ImplicitResidualNorm(std::shared_ptr<const gko::Executor> exec)
213 : ResidualNormBase<ValueType>(exec)
216 explicit ImplicitResidualNorm(
const Factory* factory,
218 : ResidualNormBase<ValueType>(
219 factory->get_executor(), args,
220 factory->get_parameters().reduction_factor,
221 factory->get_parameters().baseline),
222 parameters_{factory->get_parameters()}
230GKO_BEGIN_DISABLE_DEPRECATION_WARNINGS
252template <
typename ValueType = default_precision>
254 "Please use the class ResidualNorm with the factory parameter baseline = "
255 "mode::initial_resnorm") ResidualNormReduction
256 :
public ResidualNormBase<ValueType> {
268 5 * std ::numeric_limits<remove_complex<ValueType>>::epsilon()};
272 this->reduction_factor = value;
276 GKO_ENABLE_CRITERION_FACTORY(ResidualNormReduction<ValueType>, parameters,
281 explicit ResidualNormReduction(std::shared_ptr<const gko::Executor> exec)
282 : ResidualNormBase<ValueType>(exec)
285 explicit ResidualNormReduction(
const Factory* factory,
287 : ResidualNormBase<ValueType>(
288 factory->get_executor(), args,
289 factory->get_parameters().reduction_factor,
290 mode::initial_resnorm),
291 parameters_{factory->get_parameters()}
314template <
typename ValueType = default_precision>
316 "Please use the class ResidualNorm with the factory parameter baseline = "
317 "mode::rhs_norm") RelativeResidualNorm
318 :
public ResidualNormBase<ValueType> {
330 5 * std ::numeric_limits<remove_complex<ValueType>>::epsilon()};
335 this->tolerance = value;
339 GKO_ENABLE_CRITERION_FACTORY(RelativeResidualNorm<ValueType>, parameters,
344 explicit RelativeResidualNorm(std::shared_ptr<const gko::Executor> exec)
345 : ResidualNormBase<ValueType>(exec)
348 explicit RelativeResidualNorm(
const Factory* factory,
350 : ResidualNormBase<ValueType>(factory->get_executor(), args,
351 factory->get_parameters().tolerance,
353 parameters_{factory->get_parameters()}
375template <
typename ValueType = default_precision>
377 "Please use the class ResidualNorm with the factory parameter baseline = "
378 "mode::absolute") AbsoluteResidualNorm
379 :
public ResidualNormBase<ValueType> {
390 5 * std ::numeric_limits<remove_complex<ValueType>>::epsilon()};
394 this->tolerance = value;
398 GKO_ENABLE_CRITERION_FACTORY(AbsoluteResidualNorm<ValueType>, parameters,
403 explicit AbsoluteResidualNorm(std::shared_ptr<const gko::Executor> exec)
404 : ResidualNormBase<ValueType>(exec)
407 explicit AbsoluteResidualNorm(
const Factory* factory,
409 : ResidualNormBase<ValueType>(factory->get_executor(), args,
410 factory->get_parameters().tolerance,
412 parameters_{factory->get_parameters()}
417GKO_END_DISABLE_DEPRECATION_WARNINGS
This mixin inherits from (a subclass of) PolymorphicObject and provides a base implementation of a ne...
Definition polymorphic_object.hpp:668
An array is a container which encapsulates fixed-sized arrays, stored on the Executor tied to the arr...
Definition array.hpp:166
Dense is a matrix format which explicitly stores all values of the matrix.
Definition dense.hpp:120
Definition residual_norm.hpp:399
The Updater class serves for convenient argument passing to the Criterion's check function.
Definition criterion.hpp:55
The Criterion class is a base class for all stopping criteria.
Definition criterion.hpp:36
Definition residual_norm.hpp:202
Definition residual_norm.hpp:340
Definition residual_norm.hpp:277
Definition residual_norm.hpp:139
#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
mode
The mode for the residual norm criterion.
Definition residual_norm.hpp:37
The Stopping criterion namespace.
Definition logger.hpp:50
The Ginkgo namespace.
Definition abstract_factory.hpp:20
std::uint8_t uint8
8-bit unsigned integral type.
Definition types.hpp:119
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:264
Definition residual_norm.hpp:385
remove_complex< ValueType > tolerance
Absolute residual norm goal.
Definition residual_norm.hpp:389
This struct is used to pass parameters to the EnableDefaultCriterionFactoryCriterionFactory::generate...
Definition criterion.hpp:205
Definition residual_norm.hpp:182
remove_complex< ValueType > reduction_factor
Implicit Residual norm goal.
Definition residual_norm.hpp:186
mode baseline
The quantity the reduction is relative to.
Definition residual_norm.hpp:199
Definition residual_norm.hpp:325
remove_complex< ValueType > tolerance
Relative residual norm goal.
Definition residual_norm.hpp:329
Definition residual_norm.hpp:263
remove_complex< ValueType > reduction_factor
Factor by which the residual norm will be reduced.
Definition residual_norm.hpp:267
Definition residual_norm.hpp:120
remove_complex< ValueType > reduction_factor
Residual norm reduction factor.
Definition residual_norm.hpp:124
mode baseline
The quantity the reduction is relative to.
Definition residual_norm.hpp:137