ROL
ROL_ScalarTraits.hpp
Go to the documentation of this file.
1// @HEADER
2// ************************************************************************
3//
4// Rapid Optimization Library (ROL) Package
5// Copyright (2014) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact lead developers:
38// Drew Kouri (dpkouri@sandia.gov) and
39// Denis Ridzal (dridzal@sandia.gov)
40//
41// ************************************************************************
42// @HEADER
43
44#pragma once
45#ifndef ROL_SCALARTRAITS_HPP
46#define ROL_SCALARTRAITS_HPP
47
48#include <limits>
49
50
51namespace ROL {
52
53template<typename Real>
55 using type = Real;
56};
57
58template<typename Real>
59struct ScalarTraits_Magnitude<std::complex<Real>> {
60 using type = Real;
61};
62
63
64template<typename Real>
66
68
69 static constexpr Real zero() noexcept { return static_cast<Real>(0.0); }
70 static constexpr Real half() noexcept { return static_cast<Real>(0.5); }
71 static constexpr Real one() noexcept { return static_cast<Real>(1.0); }
72 static constexpr Real two() noexcept { return static_cast<Real>(2.0); }
73
74 static constexpr Real eps() noexcept {
75 return std::numeric_limits<Real>::epsilon();
76 }
77
78 static constexpr Real rmin() noexcept {
79 return std::numeric_limits<Real>::min();
80 }
81
82 static constexpr Real rmax() noexcept {
83 return std::numeric_limits<Real>::max();
84 }
85
86 static constexpr Real two_pi() noexcept {
87 return static_cast<Real>( 6.283185307179586476925286766559005768L );
88 }
89
90 static constexpr Real pi() noexcept {
91 return static_cast<Real>( 3.141592653589793238462643383279502884L );
92 }
93
94 static constexpr Real half_pi() noexcept {
95 return static_cast<Real>( 1.570796326794896619231321691639751442L );
96 }
97
98 static constexpr Real quarter_pi() noexcept {
99 return static_cast<Real>( 7.85398163397448309615660845819875721e-1L );
100 }
101
102 static constexpr Real sqrt_two_pi() noexcept {
103 return static_cast<Real>( 2.506628274631000502415765284811045252L );
104 }
105
106 static constexpr Real sqrt_pi() noexcept {
107 return static_cast<Real>( 1.772453850905516027298167483341145182L );
108 }
109
110 static constexpr Real sqrt_half_pi() noexcept {
111 return static_cast<Real>( 1.253314137315500251207882642405522626L );
112 }
113
114 static constexpr Real sqrt_two() noexcept {
115 return static_cast<Real>( 1.414213562373095048801688724209698078L );
116 }
117
118};
119
120
121} // namespace ROL
122
123#endif // ROL_SCALARTRAITS_HPP
124
static constexpr Real sqrt_pi() noexcept
static constexpr Real one() noexcept
static constexpr Real rmin() noexcept
static constexpr Real quarter_pi() noexcept
static constexpr Real two() noexcept
typename ScalarTraits_Magnitude< Real >::type magnitudeType
static constexpr Real half() noexcept
static constexpr Real half_pi() noexcept
static constexpr Real pi() noexcept
static constexpr Real sqrt_half_pi() noexcept
static constexpr Real rmax() noexcept
static constexpr Real sqrt_two() noexcept
static constexpr Real sqrt_two_pi() noexcept
static constexpr Real zero() noexcept
static constexpr Real eps() noexcept
static constexpr Real two_pi() noexcept