Stokhos Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Sacado_MP_Vector_SFS_ops.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Stokhos Package
4 //
5 // Copyright 2009 NTESS and the Stokhos contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #include "Sacado_cmath.hpp"
11 #include <ostream> // for std::ostream
12 
13 #ifdef __CUDACC__
14  #include <cuda_runtime_api.h>
15  // including math functions via math_functions.h is deprecated in cuda version >= 10.0
16  // the deprecation warning indicates to use cuda_runtime_api.h instead
17  #if CUDART_VERSION < 10000
18  #include <math_functions.h>
19  #endif
20 #endif
21 
22 #define OPNAME operator+
23 #define OPER +
25 #undef OPNAME
26 #undef OPER
27 
28 #define OPNAME operator-
29 #define OPER -
31 #undef OPNAME
32 #undef OPER
33 
34 #define OPNAME exp
36 #undef OPNAME
37 
38 #define OPNAME log
40 #undef OPNAME
41 
42 #define OPNAME log10
44 #undef OPNAME
45 
46 #define OPNAME sqrt
48 #undef OPNAME
49 
50 #define OPNAME cbrt
52 #undef OPNAME
53 
54 #define OPNAME cos
56 #undef OPNAME
57 
58 #define OPNAME sin
60 #undef OPNAME
61 
62 #define OPNAME tan
64 #undef OPNAME
65 
66 #define OPNAME acos
68 #undef OPNAME
69 
70 #define OPNAME asin
72 #undef OPNAME
73 
74 #define OPNAME atan
76 #undef OPNAME
77 
78 #define OPNAME cosh
80 #undef OPNAME
81 
82 #define OPNAME sinh
84 #undef OPNAME
85 
86 #define OPNAME tanh
88 #undef OPNAME
89 
90 #define OPNAME acosh
92 #undef OPNAME
93 
94 #define OPNAME asinh
96 #undef OPNAME
97 
98 #define OPNAME atanh
100 #undef OPNAME
101 
102 #define OPNAME abs
104 #undef OPNAME
105 
106 #define OPNAME fabs
108 #undef OPNAME
109 
110 #define OPNAME ceil
112 #undef OPNAME
113 
114 #define OPNAME operator+
115 #define OPER +
117 #undef OPNAME
118 #undef OPER
119 
120 #define OPNAME operator-
121 #define OPER -
123 #undef OPNAME
124 #undef OPER
125 
126 #define OPNAME operator*
127 #define OPER *
129 #undef OPNAME
130 #undef OPER
131 
132 #define OPNAME operator/
133 #define OPER /
135 #undef OPNAME
136 #undef OPER
137 
138 #define OPNAME atan2
140 #undef OPNAME
141 
142 #define OPNAME pow
144 #undef OPNAME
145 
146 #define OPNAME max
148 #undef OPNAME
149 
150 #define OPNAME min
152 #undef OPNAME
153 
154 //#ifdef __CUDACC__
155 //MP_BINARYOP_MACRO(max, ::max)
156 //MP_BINARYOP_MACRO(min, ::min)
157 //#else
158 //MP_BINARYOP_MACRO(max, std::max)
159 //MP_BINARYOP_MACRO(min, std::min)
160 //#endif
161 
162 //-------------------------- Relational Operators -----------------------
163 
164 #define MP_RELOP_MACRO(OP) \
165 namespace Sacado { \
166  namespace MP { \
167  \
168  template <typename O, typename T, int N, typename D> \
169  KOKKOS_INLINE_FUNCTION \
170  bool \
171  operator OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \
172  const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \
173  { \
174  return a.val() OP b.val(); \
175  } \
176  \
177  template <typename O, typename T, int N, typename D> \
178  KOKKOS_INLINE_FUNCTION \
179  bool \
180  operator OP (const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& a, \
181  const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \
182  { \
183  return a OP b.val(); \
184  } \
185  \
186  template <typename O, typename T, int N, typename D> \
187  KOKKOS_INLINE_FUNCTION \
188  bool \
189  operator OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \
190  const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& b) \
191  { \
192  return a.val() OP b; \
193  } \
194  } \
195 }
196 
197 MP_RELOP_MACRO(==)
198 MP_RELOP_MACRO(!=)
201 MP_RELOP_MACRO(<=)
202 MP_RELOP_MACRO(>=)
203 MP_RELOP_MACRO(<<=)
204 MP_RELOP_MACRO(>>=)
207 
208 #undef MP_RELOP_MACRO
209 
210 namespace Sacado {
211 
212  namespace MP {
213 
214  template <typename O, typename T, int N, typename D>
215  KOKKOS_INLINE_FUNCTION
217  {
218  return ! a.val();
219  }
220 
221  } // namespace MP
222 
223 } // namespace Sacado
224 
225 
226 //-------------------------- Boolean Operators -----------------------
227 namespace Sacado {
228 
229  namespace MP {
230 
231  template <typename O, typename T, int N, typename D>
232  KOKKOS_INLINE_FUNCTION
234  bool is_zero = true;
235  for (int i=0; i<x.size(); i++)
236  is_zero = is_zero && (x.coeff(i) == 0.0);
237  return !is_zero;
238  }
239 
240  } // namespace MP
241 
242 } // namespace Sacado
243 
244 #define PCE_BOOL_MACRO(OP) \
245 namespace Sacado { \
246  namespace MP { \
247  \
248  template <typename O, typename T, int N, typename D> \
249  KOKKOS_INLINE_FUNCTION \
250  bool \
251  operator OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \
252  const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \
253  { \
254  return toBool(a) OP toBool(b); \
255  } \
256  \
257  template <typename O, typename T, int N, typename D> \
258  KOKKOS_INLINE_FUNCTION \
259  bool \
260  operator OP (const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& a, \
261  const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \
262  { \
263  return a OP toBool(b); \
264  } \
265  \
266  template <typename O, typename T, int N, typename D> \
267  KOKKOS_INLINE_FUNCTION \
268  bool \
269  operator OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \
270  const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& b) \
271  { \
272  return toBool(a) OP b; \
273  } \
274  } \
275 }
276 
277 PCE_BOOL_MACRO(&&)
278 PCE_BOOL_MACRO(||)
279 
280 #undef PCE_BOOL_MACRO
Statically allocated storage class.
KOKKOS_INLINE_FUNCTION bool toBool(const Expr< T > &xx)
KOKKOS_INLINE_FUNCTION bool operator!(const Expr< T > &expr)
#define MP_RELOP_MACRO(OP)
#define PCE_BOOL_MACRO(OP)