42 #ifndef SACADO_UQ_PCE_TRAITS_HPP 43 #define SACADO_UQ_PCE_TRAITS_HPP 45 #include "Sacado_Traits.hpp" 46 #include "Sacado_mpl_apply.hpp" 51 template <
typename S>
class PCE;
58 SACADO_AD_PROMOTE_SPEC( UQ, PCE )
62 struct ScalarType< UQ::PCE<S> > {
68 struct ValueType< UQ::PCE<S> > {
74 struct IsADType< UQ::PCE<S> > {
75 static const bool value =
true;
80 struct IsScalarType< UQ::PCE<S> > {
81 static const bool value =
false;
86 struct Value< UQ::PCE<S> > {
87 typedef typename ValueType< UQ::PCE<S> >::type
value_type;
88 KOKKOS_INLINE_FUNCTION
95 struct ScalarValue< UQ::PCE<S> > {
96 typedef typename ValueType< UQ::PCE<S> >::type
value_type;
98 KOKKOS_INLINE_FUNCTION
100 return ScalarValue<value_type>::eval(
x.val()); }
104 template <
typename S>
105 struct StringName< UQ::PCE<S> > {
107 return std::string(
"Sacado::UQ::PCE< ") +
108 StringName<S>::eval() +
" >"; }
112 template <
typename S>
113 struct IsEqual< UQ::PCE<S> > {
114 KOKKOS_INLINE_FUNCTION
117 return x.isEqualTo(
y);
122 template <
typename S>
123 struct IsStaticallySized< UQ::PCE<S> > {
124 static const bool value = S::is_static;
130 #ifdef HAVE_SACADO_TEUCHOS 131 #include "Teuchos_PromotionTraits.hpp" 132 #include "Teuchos_ScalarTraits.hpp" 134 #include "Teuchos_SerializationTraits.hpp" 139 template <
typename S>
140 struct PromotionTraits<
Sacado::UQ::PCE<S>,
142 typedef typename Sacado::Promote< Sacado::UQ::PCE<S>,
148 template <
typename S,
typename R>
149 struct PromotionTraits<
Sacado::UQ::PCE<S>, R > {
150 typedef typename Sacado::Promote< Sacado::UQ::PCE<S>, R >::type
155 template <
typename L,
typename S>
156 struct PromotionTraits< L,
Sacado::UQ::PCE<S> > {
158 typedef typename Sacado::Promote< L, Sacado::UQ::PCE<S> >::type
163 template <
typename S>
164 struct ScalarTraits<
Sacado::UQ::PCE<S> > :
165 public Sacado::UQ::PCEScalarTraitsImp< Sacado::UQ::PCE<S> > {};
168 template <
typename TypeTo,
typename S>
169 struct ValueTypeConversionTraits< TypeTo,
Sacado::UQ::PCE<S> > :
170 public Sacado::UQ::PCEValueTypeConversionTraitsImp< TypeTo,
171 Sacado::UQ::PCE<S> > {};
174 template <
typename Ordinal,
typename S>
176 public Sacado::UQ::PCESerializationTraitsImp< Ordinal,
181 template <
typename Ordinal,
typename S>
183 public Sacado::UQ::PCESerializerImp< Ordinal,
185 ValueTypeSerializer<Ordinal,typename S::value_type> >
188 typedef ValueTypeSerializer<Ordinal,typename S::value_type> ValueSerializer;
189 typedef Sacado::UQ::PCESerializerImp< Ordinal,PCEType,ValueSerializer> Base;
190 typedef typename Base::cijk_type cijk_type;
191 ValueTypeSerializer(
const cijk_type&
cijk,
192 const Teuchos::RCP<const ValueSerializer>& vs) :
201 #endif // HAVE_SACADO_TEUCHOS 203 #endif // SACADO_UQ_PCE_TRAITS_HPP ScalarType< UQ::PCE< S > >::type scalar_type
static std::string eval()
static KOKKOS_INLINE_FUNCTION bool eval(const UQ::PCE< S > &x, const UQ::PCE< S > &y)
ValueType< UQ::PCE< S > >::type value_type
ScalarType< typename UQ::PCE< S >::value_type >::type type
const IndexType const IndexType const IndexType const IndexType const ValueType const ValueType * x
UQ::PCE< S >::value_type type
static KOKKOS_INLINE_FUNCTION const scalar_type & eval(const UQ::PCE< S > &x)
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)
Sacado::UQ::PCE< storage_type > PCEType
static KOKKOS_INLINE_FUNCTION const value_type & eval(const UQ::PCE< S > &x)
ValueType< UQ::PCE< S > >::type value_type
const IndexType const IndexType const IndexType const IndexType const ValueType const ValueType ValueType * y