42 #ifndef SACADO_UQ_PCE_HPP
43 #define SACADO_UQ_PCE_HPP
47 #ifdef HAVE_STOKHOS_SACADO
49 #include "Kokkos_Macros.hpp"
51 #include "Sacado_Traits.hpp"
52 #include "Sacado_mpl_apply.hpp"
60 #include <initializer_list>
65 template <
typename Storage>
66 KOKKOS_INLINE_FUNCTION
77 template <
typename Storage >
80 template <
class>
friend class PCE;
91 typedef typename storage_type::volatile_pointer volatile_pointer;
93 typedef typename storage_type::const_volatile_pointer const_volatile_pointer;
95 typedef typename storage_type::volatile_reference volatile_reference;
97 typedef typename storage_type::const_volatile_reference const_volatile_reference;
100 typedef typename ScalarType<value_type>::type
scalar_type;
110 template <
typename S>
119 KOKKOS_DEFAULTED_FUNCTION
126 KOKKOS_INLINE_FUNCTION
127 PCE(
const value_type& x) : cijk_(), s_(1, x) {}
133 template <
typename M>
134 KOKKOS_INLINE_FUNCTION
136 cijk_(cijkVal), s_(cijk_.dimension()) {}
142 template <
typename M>
143 KOKKOS_INLINE_FUNCTION
152 template <
typename M>
153 KOKKOS_INLINE_FUNCTION
156 cijk_(cijkVal), s_(sz,v,owned) {}
159 KOKKOS_INLINE_FUNCTION
166 KOKKOS_INLINE_FUNCTION
167 PCE(
const volatile PCE& x) :
168 cijk_(const_cast<const my_cijk_type&>(x.cijk_)),
178 PCE(std::initializer_list<value_type> l) :
179 cijk_(), s_(l.size(), l.begin()) {}
182 KOKKOS_DEFAULTED_FUNCTION
186 KOKKOS_INLINE_FUNCTION
187 void init(const_reference v) { s_.init(v); }
190 KOKKOS_INLINE_FUNCTION
191 void init(const_reference v)
volatile { s_.init(v); }
194 KOKKOS_INLINE_FUNCTION
195 void init(const_pointer v) { s_.init(v); }
198 KOKKOS_INLINE_FUNCTION
199 void init(const_pointer v)
volatile { s_.init(v); }
202 template <
typename S>
203 KOKKOS_INLINE_FUNCTION
204 void init(
const PCE<S>& v) { s_.init(v.coeff()); }
207 template <
typename S>
208 KOKKOS_INLINE_FUNCTION
209 void init(
const PCE<S>& v)
volatile { s_.init(v.coeff()); }
212 KOKKOS_INLINE_FUNCTION
213 void load(pointer v) { s_.load(v); }
216 KOKKOS_INLINE_FUNCTION
217 void load(pointer v)
volatile { s_.load(v); }
220 template <
typename S>
221 KOKKOS_INLINE_FUNCTION
222 void load(PCE<S>& v) { s_.load(v.coeff()); }
225 template <
typename S>
226 KOKKOS_INLINE_FUNCTION
227 void load(PCE<S>& v)
volatile { s_.load(v.coeff()); }
233 template <
typename M>
234 KOKKOS_INLINE_FUNCTION
237 s_.resize(cijk_.dimension());
244 template <
typename M>
245 KOKKOS_INLINE_FUNCTION
248 s_.resize(cijk_.dimension());
255 template <
typename M>
256 KOKKOS_INLINE_FUNCTION
266 template <
typename M>
267 KOKKOS_INLINE_FUNCTION
283 KOKKOS_INLINE_FUNCTION
284 void copyForWrite() { }
298 KOKKOS_INLINE_FUNCTION
302 KOKKOS_INLINE_FUNCTION
306 KOKKOS_INLINE_FUNCTION
308 return std::sqrt(this->two_norm_squared());
312 KOKKOS_INLINE_FUNCTION
316 KOKKOS_INLINE_FUNCTION
320 KOKKOS_INLINE_FUNCTION
321 bool isEqualTo(
const PCE& x)
const;
324 KOKKOS_INLINE_FUNCTION
325 bool isEqualTo(
const PCE& x)
const volatile;
333 KOKKOS_INLINE_FUNCTION
337 KOKKOS_INLINE_FUNCTION
341 KOKKOS_INLINE_FUNCTION
342 PCE<Storage>& operator=(
const PCE<Storage>& x);
345 KOKKOS_INLINE_FUNCTION
346 PCE<Storage>& operator=(
const volatile PCE<Storage>& x);
349 KOKKOS_INLINE_FUNCTION
350 PCE<Storage>& operator=(
const PCE<Storage>& x)
volatile;
353 KOKKOS_INLINE_FUNCTION
354 PCE<Storage>& operator=(
const volatile PCE<Storage>& x)
volatile;
357 template <
typename S>
358 KOKKOS_INLINE_FUNCTION
359 PCE<Storage>& operator=(
const PCE<S>& x) {
381 PCE& operator=(std::initializer_list<value_type> l) {
383 if (lsz != s_.size())
385 s_.init(l.begin(), lsz);
394 operator=(std::initializer_list<value_type> l)
volatile {
396 if (lsz != s_.size())
398 s_.init(l.begin(), lsz);
399 return const_cast<PCE&
>(*this);
416 KOKKOS_INLINE_FUNCTION
417 my_cijk_type
cijk()
const {
return cijk_; }
420 KOKKOS_INLINE_FUNCTION
421 my_cijk_type
cijk()
const volatile {
422 return const_cast<const my_cijk_type&
>(cijk_);
433 KOKKOS_INLINE_FUNCTION
434 const_volatile_reference
val()
const volatile {
return s_[0]; }
437 KOKKOS_INLINE_FUNCTION
438 const_reference
val()
const {
return s_[0]; }
441 KOKKOS_INLINE_FUNCTION
442 volatile_reference
val()
volatile {
return s_[0]; }
445 KOKKOS_INLINE_FUNCTION
446 reference
val() {
return s_[0]; }
456 KOKKOS_INLINE_FUNCTION
460 KOKKOS_INLINE_FUNCTION
464 KOKKOS_INLINE_FUNCTION
465 bool hasFastAccess(
ordinal_type sz)
const {
return s_.size()>=sz;}
468 KOKKOS_INLINE_FUNCTION
470 return s_.size()>=sz;
474 KOKKOS_INLINE_FUNCTION
475 const_pointer coeff()
const {
return s_.coeff();}
478 KOKKOS_INLINE_FUNCTION
479 const_volatile_pointer coeff()
const volatile {
return s_.coeff();}
482 KOKKOS_INLINE_FUNCTION
483 volatile_pointer coeff()
volatile {
return s_.coeff();}
486 KOKKOS_INLINE_FUNCTION
487 pointer coeff() {
return s_.coeff();}
490 KOKKOS_INLINE_FUNCTION
495 KOKKOS_INLINE_FUNCTION
500 KOKKOS_INLINE_FUNCTION
505 KOKKOS_INLINE_FUNCTION
510 KOKKOS_INLINE_FUNCTION
515 KOKKOS_INLINE_FUNCTION
537 KOKKOS_INLINE_FUNCTION
538 pointer begin() {
return s_.coeff(); }
541 KOKKOS_INLINE_FUNCTION
542 const_pointer begin()
const {
return s_.coeff(); }
545 KOKKOS_INLINE_FUNCTION
546 volatile_pointer begin()
volatile {
return s_.coeff(); }
549 KOKKOS_INLINE_FUNCTION
550 const_volatile_pointer begin()
const volatile {
return s_.coeff(); }
553 KOKKOS_INLINE_FUNCTION
554 const_pointer cbegin()
const {
return s_.coeff(); }
557 KOKKOS_INLINE_FUNCTION
558 const_volatile_pointer cbegin()
const volatile {
return s_.coeff(); }
561 KOKKOS_INLINE_FUNCTION
562 pointer end() {
return s_.coeff() + s_.size(); }
565 KOKKOS_INLINE_FUNCTION
566 const_pointer end()
const {
return s_.coeff() + s_.size(); }
569 KOKKOS_INLINE_FUNCTION
570 volatile_pointer end()
volatile {
return s_.coeff() + s_.size(); }
573 KOKKOS_INLINE_FUNCTION
574 const_volatile_pointer end()
const volatile {
return s_.coeff() + s_.size(); }
577 KOKKOS_INLINE_FUNCTION
578 const_pointer cend()
const {
return s_.coeff()+ s_.size(); }
581 KOKKOS_INLINE_FUNCTION
582 const_volatile_pointer cend()
const volatile {
return s_.coeff()+ s_.size(); }
592 KOKKOS_INLINE_FUNCTION
596 KOKKOS_INLINE_FUNCTION
597 PCE
operator + ()
const volatile {
return *
this; }
600 KOKKOS_INLINE_FUNCTION
604 KOKKOS_INLINE_FUNCTION
608 KOKKOS_INLINE_FUNCTION
615 KOKKOS_INLINE_FUNCTION
616 PCE& operator += (
const value_type x)
volatile {
618 return const_cast<PCE&
>(*this);
622 KOKKOS_INLINE_FUNCTION
629 KOKKOS_INLINE_FUNCTION
630 PCE& operator -= (
const value_type x)
volatile {
632 return const_cast<PCE&
>(*this);
636 KOKKOS_INLINE_FUNCTION
640 KOKKOS_INLINE_FUNCTION
641 PCE& operator *= (
const value_type x)
volatile;
644 KOKKOS_INLINE_FUNCTION
648 KOKKOS_INLINE_FUNCTION
649 PCE& operator /= (
const value_type x)
volatile;
652 KOKKOS_INLINE_FUNCTION
653 PCE& operator += (
const PCE& x);
656 KOKKOS_INLINE_FUNCTION
657 PCE& operator += (
const volatile PCE& x) {
658 return *
this +=
const_cast<const PCE&
>(x);
662 KOKKOS_INLINE_FUNCTION
663 PCE& operator += (
const PCE& x)
volatile {
664 return const_cast<PCE&
>(*this) += x;
668 KOKKOS_INLINE_FUNCTION
669 PCE& operator += (
const volatile PCE& x)
volatile {
670 return const_cast<PCE&
>(*this) +=
const_cast<const PCE&
>(x);
674 KOKKOS_INLINE_FUNCTION
675 PCE& operator -= (
const PCE& x);
678 KOKKOS_INLINE_FUNCTION
679 PCE& operator -= (
const volatile PCE& x) {
680 return *
this -=
const_cast<const PCE&
>(x);
684 KOKKOS_INLINE_FUNCTION
685 PCE& operator -= (
const PCE& x)
volatile {
686 return const_cast<PCE&
>(*this) -= x;
690 KOKKOS_INLINE_FUNCTION
691 PCE& operator -= (
const volatile PCE& x)
volatile {
692 return const_cast<PCE&
>(*this) -=
const_cast<const PCE&
>(x);
696 KOKKOS_INLINE_FUNCTION
697 PCE& operator *= (
const PCE& x);
700 KOKKOS_INLINE_FUNCTION
701 PCE& operator *= (
const volatile PCE& x) {
702 return *
this *=
const_cast<const PCE&
>(x);
706 KOKKOS_INLINE_FUNCTION
707 PCE& operator *= (
const PCE& x)
volatile {
708 return const_cast<PCE&
>(*this) *= x;
712 KOKKOS_INLINE_FUNCTION
713 PCE& operator *= (
const volatile PCE& x)
volatile {
714 return const_cast<PCE&
>(*this) *=
const_cast<const PCE&
>(x);
718 KOKKOS_INLINE_FUNCTION
719 PCE& operator /= (
const PCE& x);
722 KOKKOS_INLINE_FUNCTION
723 PCE& operator /= (
const volatile PCE& x) {
724 return *
this /=
const_cast<const PCE&
>(x);
728 KOKKOS_INLINE_FUNCTION
729 PCE& operator /= (
const PCE& x)
volatile {
730 return const_cast<PCE&
>(*this) /= x;
734 KOKKOS_INLINE_FUNCTION
735 PCE& operator /= (
const volatile PCE& x)
volatile {
736 return const_cast<PCE&
>(*this) /=
const_cast<const PCE&
>(x);
740 KOKKOS_INLINE_FUNCTION
747 KOKKOS_INLINE_FUNCTION
748 volatile PCE& operator++()
volatile {
754 KOKKOS_INLINE_FUNCTION
755 PCE operator++(
int) {
762 KOKKOS_INLINE_FUNCTION
763 PCE operator++(
int)
volatile {
770 KOKKOS_INLINE_FUNCTION
777 KOKKOS_INLINE_FUNCTION
778 volatile PCE& operator--()
volatile {
784 KOKKOS_INLINE_FUNCTION
785 PCE operator--(
int) {
792 KOKKOS_INLINE_FUNCTION
793 PCE operator--(
int)
volatile {
805 typedef typename my_cijk_type::size_type cijk_size_type;
821 template <
typename Storage>
822 KOKKOS_INLINE_FUNCTION
823 void CG_divide(
const PCE<Storage>& a,
const PCE<Storage>& b, PCE<Storage>& c);
826 template <
typename Storage>
827 KOKKOS_INLINE_FUNCTION
829 operator+(
const PCE<Storage>& a,
const PCE<Storage>& b);
831 template <
typename Storage>
832 KOKKOS_INLINE_FUNCTION
834 operator+(
const volatile PCE<Storage>& a,
const PCE<Storage>& b) {
835 return const_cast<const PCE<Storage>&
>(a) + b;
838 template <
typename Storage>
839 KOKKOS_INLINE_FUNCTION
841 operator+(
const PCE<Storage>& a,
const volatile PCE<Storage>& b) {
842 return a +
const_cast<const PCE<Storage>&
>(b);
845 template <
typename Storage>
846 KOKKOS_INLINE_FUNCTION
848 operator+(
const volatile PCE<Storage>& a,
const volatile PCE<Storage>& b) {
849 return const_cast<const PCE<Storage>&
>(a) +
850 const_cast<const PCE<Storage>&
>(b);
853 template <
typename Storage>
854 KOKKOS_INLINE_FUNCTION
857 const PCE<Storage>& b);
859 template <
typename Storage>
860 KOKKOS_INLINE_FUNCTION
865 template <
typename Storage>
866 KOKKOS_INLINE_FUNCTION
868 operator-(
const PCE<Storage>& a,
const PCE<Storage>& b);
870 template <
typename Storage> PCE<Storage>
871 KOKKOS_INLINE_FUNCTION
873 const PCE<Storage>& b);
875 template <
typename Storage>
876 KOKKOS_INLINE_FUNCTION
881 template <
typename Storage>
882 KOKKOS_INLINE_FUNCTION
884 operator*(
const PCE<Storage>& a,
const PCE<Storage>& b);
886 template <
typename Storage>
887 KOKKOS_INLINE_FUNCTION
890 const PCE<Storage>& b);
892 template <
typename Storage> PCE<Storage>
893 KOKKOS_INLINE_FUNCTION
897 template <
typename Storage>
898 KOKKOS_INLINE_FUNCTION
900 operator/(
const PCE<Storage>& a,
const PCE<Storage>& b);
902 template <
typename Storage>
903 KOKKOS_INLINE_FUNCTION
906 const PCE<Storage>& b);
908 template <
typename Storage>
909 KOKKOS_INLINE_FUNCTION
914 template <
typename Storage>
915 KOKKOS_INLINE_FUNCTION
917 exp(
const PCE<Storage>& a);
919 template <
typename Storage>
920 KOKKOS_INLINE_FUNCTION
922 log(
const PCE<Storage>& a);
924 template <
typename Storage>
925 KOKKOS_INLINE_FUNCTION
927 log(PCE<Storage>& c,
const PCE<Storage>& a);
929 template <
typename Storage>
930 KOKKOS_INLINE_FUNCTION
932 log10(
const PCE<Storage>& a);
934 template <
typename Storage>
935 KOKKOS_INLINE_FUNCTION
937 sqrt(
const PCE<Storage>& a);
939 template <
typename Storage>
940 KOKKOS_INLINE_FUNCTION
942 cbrt(
const PCE<Storage>& a);
944 template <
typename Storage>
945 KOKKOS_INLINE_FUNCTION
947 pow(
const PCE<Storage>& a,
const PCE<Storage>& b);
949 template <
typename Storage>
950 KOKKOS_INLINE_FUNCTION
954 template <
typename Storage> PCE<Storage>
955 KOKKOS_INLINE_FUNCTION
956 pow(
const PCE<Storage>& a,
959 template <
typename Storage>
960 KOKKOS_INLINE_FUNCTION
962 cos(
const PCE<Storage>& a);
964 template <
typename Storage>
965 KOKKOS_INLINE_FUNCTION
967 sin(
const PCE<Storage>& a);
969 template <
typename Storage>
970 KOKKOS_INLINE_FUNCTION
972 tan(
const PCE<Storage>& a);
974 template <
typename Storage>
975 KOKKOS_INLINE_FUNCTION
977 cosh(
const PCE<Storage>& a);
979 template <
typename Storage>
980 KOKKOS_INLINE_FUNCTION
982 sinh(
const PCE<Storage>& a);
984 template <
typename Storage>
985 KOKKOS_INLINE_FUNCTION
987 tanh(
const PCE<Storage>& a);
989 template <
typename Storage>
990 KOKKOS_INLINE_FUNCTION
992 acos(
const PCE<Storage>& a);
994 template <
typename Storage>
995 KOKKOS_INLINE_FUNCTION
997 asin(
const PCE<Storage>& a);
999 template <
typename Storage>
1000 KOKKOS_INLINE_FUNCTION
1002 atan(
const PCE<Storage>& a);
1004 template <
typename Storage>
1005 KOKKOS_INLINE_FUNCTION
1007 atan2(
const PCE<Storage>& a,
const PCE<Storage>& b);
1009 template <
typename Storage>
1010 KOKKOS_INLINE_FUNCTION
1013 const PCE<Storage>& b);
1015 template <
typename Storage>
1016 KOKKOS_INLINE_FUNCTION
1018 atan2(
const PCE<Storage>& a,
1021 template <
typename Storage>
1022 KOKKOS_INLINE_FUNCTION
1024 acosh(
const PCE<Storage>& a);
1026 template <
typename Storage>
1027 KOKKOS_INLINE_FUNCTION
1029 asinh(
const PCE<Storage>& a);
1031 template <
typename Storage>
1032 KOKKOS_INLINE_FUNCTION
1034 atanh(
const PCE<Storage>& a);
1036 template <
typename Storage>
1037 KOKKOS_INLINE_FUNCTION
1039 abs(
const PCE<Storage>& a);
1041 template <
typename Storage>
1042 KOKKOS_INLINE_FUNCTION
1044 fabs(
const PCE<Storage>& a);
1046 template <
typename Storage>
1047 KOKKOS_INLINE_FUNCTION
1049 ceil(
const PCE<Storage>& a);
1056 template <
typename Storage>
1057 KOKKOS_INLINE_FUNCTION
1060 const PCE<Storage>& b);
1062 template <
typename Storage>
1063 KOKKOS_INLINE_FUNCTION
1065 max(
const PCE<Storage>& a,
1073 template <
typename Storage>
1074 KOKKOS_INLINE_FUNCTION
1077 const PCE<Storage>& b);
1079 template <
typename Storage>
1080 KOKKOS_INLINE_FUNCTION
1082 min(
const PCE<Storage>& a,
1085 template <
typename Storage>
1086 KOKKOS_INLINE_FUNCTION
1088 operator==(
const PCE<Storage>& a,
const PCE<Storage>& b);
1090 template <
typename Storage>
1091 KOKKOS_INLINE_FUNCTION
1094 const PCE<Storage>& b);
1096 template <
typename Storage>
1097 KOKKOS_INLINE_FUNCTION
1102 template <
typename Storage>
1103 KOKKOS_INLINE_FUNCTION
1105 operator!=(
const PCE<Storage>& a,
const PCE<Storage>& b);
1107 template <
typename Storage>
1108 KOKKOS_INLINE_FUNCTION
1111 const PCE<Storage>& b);
1113 template <
typename Storage>
1114 KOKKOS_INLINE_FUNCTION
1119 template <
typename Storage>
1120 KOKKOS_INLINE_FUNCTION
1122 operator<=(const PCE<Storage>& a,
1123 const PCE<Storage>& b);
1125 template <
typename Storage>
1126 KOKKOS_INLINE_FUNCTION
1129 const PCE<Storage>& b);
1131 template <
typename Storage>
1132 KOKKOS_INLINE_FUNCTION
1134 operator<=(const PCE<Storage>& a,
1137 template <
typename Storage>
1138 KOKKOS_INLINE_FUNCTION
1140 operator>=(
const PCE<Storage>& a,
const PCE<Storage>& b);
1142 template <
typename Storage>
1143 KOKKOS_INLINE_FUNCTION
1146 const PCE<Storage>& b);
1148 template <
typename Storage>
1149 KOKKOS_INLINE_FUNCTION
1154 template <
typename Storage>
1155 KOKKOS_INLINE_FUNCTION
1157 operator<(const PCE<Storage>& a,
const PCE<Storage>& b);
1159 template <
typename Storage>
1160 KOKKOS_INLINE_FUNCTION
1163 const PCE<Storage>& b);
1165 template <
typename Storage>
1166 KOKKOS_INLINE_FUNCTION
1168 operator<(const PCE<Storage>& a,
1171 template <
typename Storage>
1172 KOKKOS_INLINE_FUNCTION
1174 operator>(
const PCE<Storage>& a,
const PCE<Storage>& b);
1176 template <
typename Storage>
1177 KOKKOS_INLINE_FUNCTION
1180 const PCE<Storage>& b);
1182 template <
typename Storage>
1183 KOKKOS_INLINE_FUNCTION
1188 template <
typename Storage>
1190 operator << (std::ostream& os, const PCE<Storage>& a);
1192 template <
typename Storage>
1197 struct PCEPartition {
1201 template<
typename iType0 ,
typename iType1 >
1202 KOKKOS_INLINE_FUNCTION
1203 PCEPartition(
const iType0 & i0 ,
const iType1 & i1 ) :
1204 begin(i0), end(i1) {}
1261 template <
typename S>
1262 void memcpy(PCE<S>* dst,
const PCE<S>* src,
const size_t sz) {
1263 const size_t n = sz /
sizeof(PCE<S>);
1264 for (
size_t i=0; i<n; ++i)
1271 template <
typename T>
struct is_uq_pce {
1272 static const bool value =
false;
1274 template <
typename S>
struct is_uq_pce< UQ::PCE<S> > {
1275 static const bool value =
true;
1277 template <
typename T>
struct is_uq_pce< const T > {
1278 static const bool value = is_uq_pce<T>::value;
1280 template <
typename T>
struct is_uq_pce< T* > {
1281 static const bool value = is_uq_pce<T>::value;
1283 template <
typename T>
struct is_uq_pce< T[] > {
1284 static const bool value = is_uq_pce<T>::value;
1286 template <
typename T,
unsigned N>
struct is_uq_pce< T[N] > {
1287 static const bool value = is_uq_pce<T>::value;
1291 template <
typename Storage>
1292 KOKKOS_INLINE_FUNCTION
1299 const ordinal_type sz = x.size();
1300 if (sz == 1)
return true;
1303 const value_type zero = 0;
1304 for (ordinal_type i=1; i<sz; ++i)
1305 if (x.fastAccessCoeff(i) != zero)
return false;
1315 #include "Kokkos_NumericTraits.hpp"
1319 template <
typename Storage>
1320 struct reduction_identity< Sacado::UQ::PCE<Storage> > {
1323 typedef reduction_identity<scalar> RIS;
1324 KOKKOS_FORCEINLINE_FUNCTION constexpr
static pce
sum() {
1327 KOKKOS_FORCEINLINE_FUNCTION constexpr
static pce prod() {
1328 return pce(RIS::prod());
1330 KOKKOS_FORCEINLINE_FUNCTION constexpr
static pce
max() {
1333 KOKKOS_FORCEINLINE_FUNCTION constexpr
static pce
min() {
1340 #endif // HAVE_STOKHOS_SACADO
1342 #endif // SACADO_PCE_ORTHOGPOLY_HPP
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)
Stokhos::StandardStorage< int, double > storage_type
const double & const_reference
KOKKOS_INLINE_FUNCTION PCE< Storage > sinh(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > pow(const PCE< Storage > &a, const PCE< Storage > &b)
Kokkos::DefaultExecutionSpace execution_space
KOKKOS_INLINE_FUNCTION PCE< Storage > tanh(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > cbrt(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION bool operator!=(const PCE< Storage > &a, const PCE< Storage > &b)
KOKKOS_INLINE_FUNCTION PCE< Storage > acos(const PCE< Storage > &a)
atan2(expr1.val(), expr2.val())
KOKKOS_INLINE_FUNCTION PCE< Storage > min(const typename PCE< Storage >::value_type &a, const PCE< Storage > &b)
Sparse product tensor with replicated entries to provide subsets with a given coordinate.
KOKKOS_INLINE_FUNCTION bool operator>(const PCE< Storage > &a, const PCE< Storage > &b)
std::istream & operator>>(std::istream &is, PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > operator/(const PCE< Storage > &a, const PCE< Storage > &b)
void CG_divide(const PCE< Storage > &a, const PCE< Storage > &b, PCE< Storage > &c)
KOKKOS_INLINE_FUNCTION PCE< Storage > ceil(const PCE< Storage > &a)
const double * const_pointer
KOKKOS_INLINE_FUNCTION PCE< Storage > operator-(const PCE< Storage > &a, const PCE< Storage > &b)
KOKKOS_INLINE_FUNCTION bool operator>=(const PCE< Storage > &a, const PCE< Storage > &b)
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)
KOKKOS_INLINE_FUNCTION bool is_constant(const T &x)
KOKKOS_INLINE_FUNCTION bool operator==(const PCE< Storage > &a, const PCE< Storage > &b)
KOKKOS_INLINE_FUNCTION PCE< Storage > abs(const PCE< Storage > &a)
expr1 expr1 expr1 expr2 expr1 expr1 c expr2 expr1 c fastAccessCoeff(j)-expr2.val(j)
KOKKOS_INLINE_FUNCTION PCE< Storage > atan(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > exp(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION constexpr std::enable_if< is_view_uq_pce< view_type >::value, typename CijkType< view_type >::type >::type cijk(const view_type &view)
KOKKOS_INLINE_FUNCTION PCE< Storage > sin(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > operator+(const PCE< Storage > &a, const PCE< Storage > &b)
KOKKOS_INLINE_FUNCTION PCE< Storage > operator*(const PCE< Storage > &a, const PCE< Storage > &b)
KOKKOS_INLINE_FUNCTION PCE< Storage > log(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > log10(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > asin(const PCE< Storage > &a)
KOKKOS_INLINE_FUNCTION PCE< Storage > cos(const PCE< Storage > &a)
std::enable_if< Kokkos::is_view_uq_pce< Kokkos::View< RD, RP...> >::value &&Kokkos::is_view_uq_pce< Kokkos::View< XD, XP...> >::value >::type sum(const Kokkos::View< RD, RP...> &r, const Kokkos::View< XD, XP...> &x)