42 #include "Sacado_cmath.hpp" 46 #include <math_functions.h> 49 #define MP_UNARYOP_MACRO(OPNAME,OPER) \ 53 template <typename O, typename T, int N, typename D> \ 54 KOKKOS_INLINE_FUNCTION \ 55 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 56 OPNAME (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a) \ 58 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 59 for (O i=0; i<a.size(); ++i) \ 60 c.fastAccessCoeff(i) = OPER(a.fastAccessCoeff(i)); \ 64 template <typename O, typename T, int N, typename D> \ 65 KOKKOS_INLINE_FUNCTION \ 66 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 67 OPNAME (const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a) \ 69 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 70 for (O i=0; i<a.size(); ++i) \ 71 c.fastAccessCoeff(i) = OPER(a.fastAccessCoeff(i)); \ 100 #undef MP_UNARYOP_MACRO 102 #define MP_BINARYOP_MACRO(OPNAME,OPER) \ 106 template <typename O, typename T, int N, typename D> \ 107 KOKKOS_INLINE_FUNCTION \ 108 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 109 OPNAME (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 110 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 112 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 113 for (O i=0; i<a.size(); ++i) \ 114 c.fastAccessCoeff(i) = \ 115 a.fastAccessCoeff(i) OPER b.fastAccessCoeff(i); \ 119 template <typename O, typename T, int N, typename D> \ 120 KOKKOS_INLINE_FUNCTION \ 121 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 122 OPNAME (const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 123 const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 125 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 126 for (O i=0; i<a.size(); ++i) \ 127 c.fastAccessCoeff(i) = \ 128 a.fastAccessCoeff(i) OPER b.fastAccessCoeff(i); \ 132 template <typename O, typename T, int N, typename D> \ 133 KOKKOS_INLINE_FUNCTION \ 134 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 135 OPNAME (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 136 const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 138 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 139 for (O i=0; i<a.size(); ++i) \ 140 c.fastAccessCoeff(i) = \ 141 a.fastAccessCoeff(i) OPER b.fastAccessCoeff(i); \ 145 template <typename O, typename T, int N, typename D> \ 146 KOKKOS_INLINE_FUNCTION \ 147 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 148 OPNAME (const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 149 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 151 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 152 for (O i=0; i<a.size(); ++i) \ 153 c.fastAccessCoeff(i) = \ 154 a.fastAccessCoeff(i) OPER b.fastAccessCoeff(i); \ 158 template <typename O, typename T, int N, typename D> \ 159 KOKKOS_INLINE_FUNCTION \ 160 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 161 OPNAME (const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& a, \ 162 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 164 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 165 for (O i=0; i<b.size(); ++i) \ 166 c.fastAccessCoeff(i) = \ 167 a OPER b.fastAccessCoeff(i); \ 171 template <typename O, typename T, int N, typename D> \ 172 KOKKOS_INLINE_FUNCTION \ 173 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 174 OPNAME (const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& a, \ 175 const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 177 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 178 for (O i=0; i<b.size(); ++i) \ 179 c.fastAccessCoeff(i) = \ 180 a OPER b.fastAccessCoeff(i); \ 184 template <typename O, typename T, int N, typename D> \ 185 KOKKOS_INLINE_FUNCTION \ 186 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 187 OPNAME (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 188 const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& b) \ 190 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 191 for (O i=0; i<a.size(); ++i) \ 192 c.fastAccessCoeff(i) = \ 193 a.fastAccessCoeff(i) OPER b; \ 197 template <typename O, typename T, int N, typename D> \ 198 KOKKOS_INLINE_FUNCTION \ 199 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 200 OPNAME (const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 201 const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& b) \ 203 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 204 for (O i=0; i<a.size(); ++i) \ 205 c.fastAccessCoeff(i) = \ 206 a.fastAccessCoeff(i) OPER b; \ 217 #undef MP_BINARYOP_MACRO 219 #define MP_BINARYOP_MACRO(OPNAME,OPER) \ 223 template <typename O, typename T, int N, typename D> \ 224 KOKKOS_INLINE_FUNCTION \ 225 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 226 OPNAME (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 227 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 229 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 230 for (O i=0; i<a.size(); ++i) \ 231 c.fastAccessCoeff(i) = \ 232 OPER( a.fastAccessCoeff(i) , b.fastAccessCoeff(i) ); \ 236 template <typename O, typename T, int N, typename D> \ 237 KOKKOS_INLINE_FUNCTION \ 238 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 239 OPNAME (const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 240 const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 242 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 243 for (O i=0; i<a.size(); ++i) \ 244 c.fastAccessCoeff(i) = \ 245 OPER( a.fastAccessCoeff(i) , b.fastAccessCoeff(i) ); \ 249 template <typename O, typename T, int N, typename D> \ 250 KOKKOS_INLINE_FUNCTION \ 251 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 252 OPNAME (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 253 const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 255 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 256 for (O i=0; i<a.size(); ++i) \ 257 c.fastAccessCoeff(i) = \ 258 OPER( a.fastAccessCoeff(i) , b.fastAccessCoeff(i) ); \ 262 template <typename O, typename T, int N, typename D> \ 263 KOKKOS_INLINE_FUNCTION \ 264 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 265 OPNAME (const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 266 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 268 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 269 for (O i=0; i<a.size(); ++i) \ 270 c.fastAccessCoeff(i) = \ 271 OPER( a.fastAccessCoeff(i) , b.fastAccessCoeff(i) ); \ 275 template <typename O, typename T, int N, typename D> \ 276 KOKKOS_INLINE_FUNCTION \ 277 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 278 OPNAME (const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& a, \ 279 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 281 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 282 for (O i=0; i<b.size(); ++i) \ 283 c.fastAccessCoeff(i) = \ 284 OPER( a , b.fastAccessCoeff(i) ); \ 288 template <typename O, typename T, int N, typename D> \ 289 KOKKOS_INLINE_FUNCTION \ 290 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 291 OPNAME (const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& a, \ 292 const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 294 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 295 for (O i=0; i<b.size(); ++i) \ 296 c.fastAccessCoeff(i) = \ 297 OPER( a , b.fastAccessCoeff(i) ); \ 301 template <typename O, typename T, int N, typename D> \ 302 KOKKOS_INLINE_FUNCTION \ 303 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 304 OPNAME (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 305 const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& b) \ 307 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 308 for (O i=0; i<a.size(); ++i) \ 309 c.fastAccessCoeff(i) = \ 310 OPER( a.fastAccessCoeff(i) , b ); \ 314 template <typename O, typename T, int N, typename D> \ 315 KOKKOS_INLINE_FUNCTION \ 316 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > \ 317 OPNAME (const volatile Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 318 const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& b) \ 320 Vector< Stokhos::StaticFixedStorage<O,T,N,D> > c; \ 321 for (O i=0; i<a.size(); ++i) \ 322 c.fastAccessCoeff(i) = \ 323 OPER( a.fastAccessCoeff(i) , b ); \ 339 #undef MP_BINARYOP_MACRO 343 #define MP_RELOP_MACRO(OP) \ 347 template <typename O, typename T, int N, typename D> \ 348 KOKKOS_INLINE_FUNCTION \ 350 operator OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 351 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 353 return a.val() OP b.val(); \ 356 template <typename O, typename T, int N, typename D> \ 357 KOKKOS_INLINE_FUNCTION \ 359 operator OP (const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& a, \ 360 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 362 return a OP b.val(); \ 365 template <typename O, typename T, int N, typename D> \ 366 KOKKOS_INLINE_FUNCTION \ 368 operator OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 369 const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& b) \ 371 return a.val() OP b; \ 387 #undef MP_RELOP_MACRO 393 template <
typename O,
typename T,
int N,
typename D>
394 KOKKOS_INLINE_FUNCTION
410 template <
typename O,
typename T,
int N,
typename D>
411 KOKKOS_INLINE_FUNCTION
414 for (
int i=0; i<
x.size(); i++)
415 is_zero = is_zero && (
x.coeff(i) == 0.0);
423 #define PCE_BOOL_MACRO(OP) \ 427 template <typename O, typename T, int N, typename D> \ 428 KOKKOS_INLINE_FUNCTION \ 430 operator OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 431 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 433 return toBool(a) OP toBool(b); \ 436 template <typename O, typename T, int N, typename D> \ 437 KOKKOS_INLINE_FUNCTION \ 439 operator OP (const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& a, \ 440 const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& b) \ 442 return a OP toBool(b); \ 445 template <typename O, typename T, int N, typename D> \ 446 KOKKOS_INLINE_FUNCTION \ 448 operator OP (const Vector< Stokhos::StaticFixedStorage<O,T,N,D> >& a, \ 449 const typename Vector< Stokhos::StaticFixedStorage<O,T,N,D> >::value_type& b) \ 451 return toBool(a) OP b; \ 459 #undef PCE_BOOL_MACRO KOKKOS_INLINE_FUNCTION PCE< Storage > sqrt(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > fabs(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > tan(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > sinh(const PCE< Storage > &a)
Statically allocated storage class.
KOKKOS_INLINE_FUNCTION PCE< Storage > pow(const PCE< Storage > &a, const PCE< Storage > &b)
OrthogPoly< T, Storage > atanh(const OrthogPoly< T, Storage > &a)
KOKKOS_INLINE_FUNCTION bool toBool(const Expr< T > &xx)
KOKKOS_INLINE_FUNCTION PCE< Storage > tanh(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > cbrt(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > acos(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > min(const typename PCE< Storage >::value_type &a, const PCE< Storage > &b)
KOKKOS_INLINE_FUNCTION bool operator!(const Expr< T > &expr)
const IndexType const IndexType const IndexType const IndexType const ValueType const ValueType * x
OrthogPoly< T, Storage > acosh(const OrthogPoly< T, Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > max(const typename PCE< Storage >::value_type &a, const PCE< Storage > &b)
KOKKOS_INLINE_FUNCTION PCE< Storage > cosh(const PCE< Storage > &a)
#define MP_UNARYOP_MACRO(OPNAME, OPER)
KOKKOS_INLINE_FUNCTION PCE< Storage > abs(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > atan(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > exp(const PCE< Storage > &a)
OrthogPoly< T, Storage > asinh(const OrthogPoly< T, Storage > &a)
#define MP_RELOP_MACRO(OP)
KOKKOS_INLINE_FUNCTION PCE< Storage > sin(const PCE< Storage > &a)
#define PCE_BOOL_MACRO(OP)
KOKKOS_INLINE_FUNCTION PCE< Storage > log(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > log10(const PCE< Storage > &a)
#define MP_BINARYOP_MACRO(OPNAME, OPER)
KOKKOS_INLINE_FUNCTION PCE< Storage > asin(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > cos(const PCE< Storage > &a)