OGS
ConvergenceCriterion.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 <memory>
7
8#include "DampingPolicy.h"
9#include "MathLib/LinAlg/LinAlg.h" // For MathLib::VecNormType
11
12namespace BaseLib
13{
14class ConfigTree;
15} // namespace BaseLib
16
17namespace NumLib
18{
26{
27public:
29 : _norm_type(norm_type)
30 {
31 }
32
38 virtual bool hasDeltaXCheck() const = 0;
39
45 virtual bool hasResidualCheck() const = 0;
46
49 virtual DampingPolicy const* dampingPolicy() const { return nullptr; }
50
60 virtual void checkDeltaX(GlobalVector const& minus_delta_x,
61 GlobalVector const& x) = 0;
62
64 virtual void checkResidual(GlobalVector const& residual) = 0;
65
68 virtual void preFirstIteration() { _is_first_iteration = true; }
69
72 virtual void setNoFirstIteration() { _is_first_iteration = false; }
73
81 virtual void reset()
82 {
83 _satisfied = true;
84 _is_first_iteration = false;
85 };
86
88 virtual bool isSatisfied() const { return _satisfied; };
89
91
92 virtual ~ConvergenceCriterion() = default;
93
94protected:
95 bool _satisfied = true;
98};
99
101std::unique_ptr<ConvergenceCriterion> createConvergenceCriterion(
102 BaseLib::ConfigTree const& config);
103
107bool checkRelativeTolerance(double const reltol,
108 double const numerator,
109 double const denominator);
110
111} // namespace NumLib
MathLib::EigenVector GlobalVector
virtual DampingPolicy const * dampingPolicy() const
MathLib::VecNormType getVectorNormType() const
virtual void checkResidual(GlobalVector const &residual)=0
Check if the residual satisfies the convergence criterion.
virtual bool hasResidualCheck() const =0
virtual bool isSatisfied() const
Tell if the convergence criterion is satisfied.
ConvergenceCriterion(const MathLib::VecNormType norm_type)
virtual void checkDeltaX(GlobalVector const &minus_delta_x, GlobalVector const &x)=0
virtual bool hasDeltaXCheck() const =0
const MathLib::VecNormType _norm_type
virtual ~ConvergenceCriterion()=default
bool checkRelativeTolerance(const double reltol, const double numerator, const double denominator)
std::unique_ptr< ConvergenceCriterion > createConvergenceCriterion(const BaseLib::ConfigTree &config)
Creates a convergence criterion from the given configuration.