9#ifndef Tempus_NumericalUtils_hpp
10#define Tempus_NumericalUtils_hpp
12#include "Teuchos_ScalarTraits.hpp"
14#include "Tempus_config.hpp"
20 template <
typename Scalar>
23 Teuchos::ScalarTraits<Scalar>::eps() *
24 typename Teuchos::ScalarTraits<Scalar>::magnitudeType(100.0);
29 template <
typename Scalar>
31 Scalar tol = Teuchos::ScalarTraits<Scalar>::sfmin())
33 typedef Teuchos::ScalarTraits<Scalar> ST;
34 return ST::magnitude(value) <= ST::magnitude(tol);
38 template <
typename Scalar>
41 return Teuchos::ScalarTraits<Scalar>::magnitude(a-b) < std::abs(absTol);
45 template <
typename Scalar>
46 bool approxEqual(Scalar a, Scalar b, Scalar relTol = numericalTol<Scalar>())
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();
55 template <
typename Scalar>
57 Scalar relTol = numericalTol<Scalar>())
bool approxEqual(Scalar a, Scalar b, Scalar relTol=numericalTol< Scalar >())
Test if values are approximately equal within the relative tolerance.
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.
bool approxZero(Scalar value, Scalar tol=Teuchos::ScalarTraits< Scalar >::sfmin())
Test if value is approximately zero within tolerance.
bool approxEqualAbsTol(Scalar a, Scalar b, Scalar absTol)
Test if values are approximately equal within the absolute tolerance.
const Scalar numericalTol()
Numerical Tolerance (approx. max. significant digits minus two)