Sacado Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Sacado_cmath.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Sacado Package
5 // Copyright (2006) Sandia Corporation
6 //
7 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8 // the U.S. Government retains certain rights in this software.
9 //
10 // This library is free software; you can redistribute it and/or modify
11 // it under the terms of the GNU Lesser General Public License as
12 // published by the Free Software Foundation; either version 2.1 of the
13 // License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23 // USA
24 // Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
25 // (etphipp@sandia.gov).
26 //
27 // ***********************************************************************
28 // @HEADER
29 
30 #ifndef SACADO_CMATH_HPP
31 #define SACADO_CMATH_HPP
32 
33 #include <cmath> // for most math functions
34 #include "Sacado_ConfigDefs.h"
35 
36 // Define some math functions that aren't usually in cmath
37 #if !( (defined(_GLIBCXX_USE_C99_MATH_TR1) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || defined(HAVE_SACADO_CXX11) || defined(HAS_C99_TR1_CMATH) || defined(USER_DISABLE_SACADO_TR1_CMATH) )
38 namespace std {
39  inline float acosh(float x) {
40  return std::log(x + std::sqrt(x*x - float(1.0))); }
41  inline float asinh(float x) {
42  return std::log(x + std::sqrt(x*x + float(1.0))); }
43  inline float atanh(float x) {
44  return float(0.5)*std::log((float(1.0)+x)/(float(1.0)-x)); }
45 
46  inline double acosh(double x) {
47  return std::log(x + std::sqrt(x*x - double(1.0))); }
48  inline double asinh(double x) {
49  return std::log(x + std::sqrt(x*x + double(1.0))); }
50  inline double atanh(double x) {
51  return double(0.5)*std::log((double(1.0)+x)/(double(1.0)-x)); }
52 }
53 #endif // HAS_C99_TR1_CMATH
54 
55 namespace Sacado {
56 
57  // Replacement for ternary operator, for scalar types that don't implement
58  // logical operations that return bool, e.g., a simd scalar type that returns
59  // a simd bool. Sacado overloaded operators use this internally when ever
60  // the ternary operator would be used. It can also be used by client code.
61  template <typename Cond, typename T>
63  T if_then_else(const Cond cond, const T& a, const T& b) {
64  return cond ? a : b;
65  }
66 
67  // Special version of sqrt(x) that avoids the NaN if x==0 in the derivative.
68  // The default implementation just calls the standard sqrt(x).
69  template <typename T>
71  T safe_sqrt(const T& x) {
72  using std::sqrt;
73  return sqrt(x);
74  }
75 
76 }
77 
78 #endif // SACADO_CMATH_HPP
asinh(expr.val())
atanh(expr.val())
#define KOKKOS_INLINE_FUNCTION
#define T
Definition: Sacado_rad.hpp:573
KOKKOS_INLINE_FUNCTION T safe_sqrt(const T &x)
sqrt(expr.val())
log(expr.val())
acosh(expr.val())
KOKKOS_INLINE_FUNCTION T if_then_else(const Cond cond, const T &a, const T &b)