Loading [MathJax]/extensions/tex2jax.js
OGS
ConvergenceCriterionDeltaX.h
Go to the documentation of this file.
1
11#pragma once
12
13#include <optional>
14
17
18namespace NumLib
19{
27{
28public:
29 ConvergenceCriterionDeltaX(std::optional<double>&& absolute_tolerance,
30 std::optional<double>&& relative_tolerance,
31 const MathLib::VecNormType norm_type);
32
33 bool hasDeltaXCheck() const override { return true; }
34 bool hasResidualCheck() const override { return false; }
35 bool hasNonNegativeDamping() const override { return false; }
36
37 void checkDeltaX(const GlobalVector& minus_delta_x,
38 GlobalVector const& x) override;
39 void checkResidual(const GlobalVector& /*residual*/) override {}
40 double getDampingFactor(GlobalVector const& /*minus_delta_x*/,
41 GlobalVector const& /*x*/,
42 double damping_scalar) override
43 {
44 return damping_scalar;
45 }
46
47 void reset() override { this->_satisfied = true; }
48
49private:
50 const std::optional<double> _abstol;
51 const std::optional<double> _reltol;
52};
53
54std::unique_ptr<ConvergenceCriterionDeltaX> createConvergenceCriterionDeltaX(
55 BaseLib::ConfigTree const& config);
56
57} // namespace NumLib
Global vector based on Eigen vector.
Definition EigenVector.h:25
void checkResidual(const GlobalVector &) override
Check if the residual satisfies the convergence criterion.
double getDampingFactor(GlobalVector const &, GlobalVector const &, double damping_scalar) override
void checkDeltaX(const GlobalVector &minus_delta_x, GlobalVector const &x) override
ConvergenceCriterionDeltaX(std::optional< double > &&absolute_tolerance, std::optional< double > &&relative_tolerance, const MathLib::VecNormType norm_type)
std::unique_ptr< ConvergenceCriterionDeltaX > createConvergenceCriterionDeltaX(const BaseLib::ConfigTree &config)