Tempus
Version of the Day
Time Integration
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Tempus_NumericalUtils.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ****************************************************************************
3
// Tempus: Copyright (2017) Sandia Corporation
4
//
5
// Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6
// ****************************************************************************
7
// @HEADER
8
9
#ifndef Tempus_NumericalUtils_hpp
10
#define Tempus_NumericalUtils_hpp
11
12
#include "Teuchos_ScalarTraits.hpp"
13
14
#include "Tempus_config.hpp"
15
16
17
namespace
Tempus
{
18
20
template
<
typename
Scalar>
21
const
Scalar
numericalTol
() {
22
const
Scalar
numericalTol
=
23
Teuchos::ScalarTraits<Scalar>::eps() *
24
typename
Teuchos::ScalarTraits<Scalar>::magnitudeType(100.0);
25
return
numericalTol
;
26
}
27
29
template
<
typename
Scalar>
30
bool
approxZero
(Scalar value,
31
Scalar tol = Teuchos::ScalarTraits<Scalar>::sfmin())
32
{
33
typedef
Teuchos::ScalarTraits<Scalar> ST;
34
return
ST::magnitude(value) <= ST::magnitude(tol);
35
}
36
38
template
<
typename
Scalar>
39
bool
approxEqualAbsTol
(Scalar a, Scalar b, Scalar absTol)
40
{
41
return
Teuchos::ScalarTraits<Scalar>::magnitude(a-b) < std::abs(absTol);
42
}
43
45
template
<
typename
Scalar>
46
bool
approxEqual
(Scalar a, Scalar b, Scalar relTol =
numericalTol<Scalar>
())
47
{
48
const
Scalar min = std::min(std::abs(a),std::abs(b));
49
Scalar absTol = min * std::abs(relTol);
50
if
(absTol == Scalar(0.0)) absTol = Teuchos::ScalarTraits<Scalar>::sfmin();
51
return
approxEqualAbsTol
(a, b, absTol);
52
}
53
55
template
<
typename
Scalar>
56
bool
approxEqualScale
(Scalar a, Scalar b, Scalar scale,
57
Scalar relTol =
numericalTol<Scalar>
())
58
{
59
return
approxEqualAbsTol
(a, b, scale*relTol);
60
}
61
62
}
// namespace Tempus
63
64
#endif
// Tempus_NumericalUtils_hpp
Tempus
Definition
Tempus_AdjointAuxSensitivityModelEvaluator_decl.hpp:21
Tempus::approxEqual
bool approxEqual(Scalar a, Scalar b, Scalar relTol=numericalTol< Scalar >())
Test if values are approximately equal within the relative tolerance.
Definition
Tempus_NumericalUtils.hpp:46
Tempus::approxEqualScale
bool approxEqualScale(Scalar a, Scalar b, Scalar scale, Scalar relTol=numericalTol< Scalar >())
Test if values are approximately equal within the relative tolerance given a scale.
Definition
Tempus_NumericalUtils.hpp:56
Tempus::approxZero
bool approxZero(Scalar value, Scalar tol=Teuchos::ScalarTraits< Scalar >::sfmin())
Test if value is approximately zero within tolerance.
Definition
Tempus_NumericalUtils.hpp:30
Tempus::approxEqualAbsTol
bool approxEqualAbsTol(Scalar a, Scalar b, Scalar absTol)
Test if values are approximately equal within the absolute tolerance.
Definition
Tempus_NumericalUtils.hpp:39
Tempus::numericalTol
const Scalar numericalTol()
Numerical Tolerance (approx. max. significant digits minus two).
Definition
Tempus_NumericalUtils.hpp:21
Generated by
1.17.0