OGS
ConvergenceCriterionDeltaX.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <optional>
7
10
11namespace NumLib
12{
20{
21public:
22 ConvergenceCriterionDeltaX(std::optional<double>&& absolute_tolerance,
23 std::optional<double>&& relative_tolerance,
24 const MathLib::VecNormType norm_type);
25
26 bool hasDeltaXCheck() const override { return true; }
27 bool hasResidualCheck() const override { return false; }
28 bool hasNonNegativeDamping() const override { return false; }
29
30 void checkDeltaX(const GlobalVector& minus_delta_x,
31 GlobalVector const& x) override;
32 void checkResidual(const GlobalVector& /*residual*/) override {}
33 double getDampingFactor(GlobalVector const& /*minus_delta_x*/,
34 GlobalVector const& /*x*/,
35 double damping_scalar) override
36 {
37 return damping_scalar;
38 }
39
40 void reset() override { this->_satisfied = true; }
41
42private:
43 const std::optional<double> _abstol;
44 const std::optional<double> _reltol;
45};
46
47std::unique_ptr<ConvergenceCriterionDeltaX> createConvergenceCriterionDeltaX(
48 BaseLib::ConfigTree const& config);
49
50} // namespace NumLib
MathLib::EigenVector GlobalVector
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)
ConvergenceCriterion(const MathLib::VecNormType norm_type)
std::unique_ptr< ConvergenceCriterionDeltaX > createConvergenceCriterionDeltaX(const BaseLib::ConfigTree &config)