42 #ifndef SACADO_MP_VECTOR_TRAITS_HPP 43 #define SACADO_MP_VECTOR_TRAITS_HPP 45 #include "Sacado_Traits.hpp" 46 #include "Sacado_mpl_apply.hpp" 57 template <
typename S>
class Vector;
64 SACADO_AD_PROMOTE_SPEC( MP, Vector )
68 struct ScalarType< MP::Vector<S> > {
74 struct ValueType< MP::Vector<S> > {
80 struct IsADType< MP::Vector<S> > {
81 static const bool value =
true;
86 struct IsScalarType< MP::Vector<S> > {
87 static const bool value = S::is_static;
92 struct Value< MP::Vector<S> > {
93 typedef typename ValueType< MP::Vector<S> >::type
value_type;
94 KOKKOS_INLINE_FUNCTION
100 template <
typename S>
101 struct ScalarValue< MP::Vector<S> > {
102 typedef typename ValueType< MP::Vector<S> >::type
value_type;
104 KOKKOS_INLINE_FUNCTION
106 return ScalarValue<value_type>::eval(
x.val()); }
110 template <
typename S>
111 struct StringName< MP::Vector<S> > {
113 return std::string(
"Sacado::MP::Vector< ") +
114 StringName<S>::eval() +
" >"; }
118 template <
typename S>
119 struct IsEqual< MP::Vector<S> > {
120 KOKKOS_INLINE_FUNCTION
123 return x.isEqualTo(
y);
128 template <
typename S>
129 struct IsStaticallySized< MP::Vector<S> > {
130 static const bool value = S::is_static;
136 #ifdef HAVE_SACADO_TEUCHOS 138 #include "Teuchos_PromotionTraits.hpp" 139 #include "Teuchos_ScalarTraits.hpp" 141 #include "Teuchos_SerializationTraits.hpp" 142 #include "Teuchos_as.hpp" 147 template <
typename S>
148 struct PromotionTraits<
Sacado::MP::Vector<S>,
150 typedef typename Sacado::Promote< Sacado::MP::Vector<S>,
156 template <
typename S,
typename R>
157 struct PromotionTraits<
Sacado::MP::Vector<S>, R > {
158 typedef typename Sacado::Promote< Sacado::MP::Vector<S>, R >::type
163 template <
typename L,
typename S>
164 struct PromotionTraits< L,
Sacado::MP::Vector<S> > {
166 typedef typename Sacado::Promote< L, Sacado::MP::Vector<S> >::type
171 #if defined(HAVE_STOKHOS_ENSEMBLE_REDUCT) 172 template <
typename S>
173 struct ScalarTraits<
Sacado::MP::Vector<S> > :
174 public Sacado::MP::ScalarTraitsImp<S,true> {};
176 template <
typename S>
177 struct ScalarTraits<
Sacado::MP::Vector<S> > :
178 public Sacado::MP::ScalarTraitsImp<S,false> {};
182 template <
typename Ordinal,
typename S>
183 struct SerializationTraits<
Ordinal,
Sacado::MP::Vector<S> > :
184 public Sacado::MP::SerializationTraitsImp< Ordinal,
185 Sacado::MP::Vector<S>,
189 template <
typename Ordinal,
typename S>
190 struct ValueTypeSerializer<
Ordinal,
Sacado::MP::Vector<S> > :
191 public Sacado::MP::SerializerImp< Ordinal,
192 Sacado::MP::Vector<S>,
193 ValueTypeSerializer<Ordinal,typename Sacado::MP::Vector<S>::value_type> >
197 typedef ValueTypeSerializer<Ordinal,value_type> ValueSerializer;
198 typedef Sacado::MP::SerializerImp< Ordinal,VecType,ValueSerializer> Base;
199 ValueTypeSerializer(
const Teuchos::RCP<const ValueSerializer>& vs,
205 template<
class TypeTo,
class StorageFrom>
206 class ValueTypeConversionTraits< TypeTo,
Sacado::MP::Vector<StorageFrom> > {
210 static TypeTo convert (
const TypeFrom& t) {
213 return Teuchos::as<TypeTo>(t.coeff(0));
217 static TypeTo safeConvert (
const TypeFrom& t) {
223 return Teuchos::as<TypeTo>(t.coeff(0));
227 template<
class TypeTo,
class ExprFrom>
228 class ValueTypeConversionTraits< TypeTo,
Sacado::MP::Expr<ExprFrom> > {
232 static TypeTo convert (
const TypeFrom& t) {
235 return Teuchos::as<TypeTo>(t.derived().coeff(0));
239 static TypeTo safeConvert (
const TypeFrom& t) {
245 return Teuchos::as<TypeTo>(t.derived().coeff(0));
254 #endif // HAVE_SACADO_TEUCHOS 256 #endif // SACADO_MP_VECTORTRAITS_HPP static KOKKOS_INLINE_FUNCTION const scalar_type & eval(const MP::Vector< S > &x)
static std::string eval()
static KOKKOS_INLINE_FUNCTION const value_type & eval(const MP::Vector< S > &x)
MP::Vector< S >::value_type type
ValueType< MP::Vector< S > >::type value_type
ScalarType< typename MP::Vector< S >::value_type >::type type
const IndexType const IndexType const IndexType const IndexType const ValueType const ValueType * x
ScalarType< MP::Vector< S > >::type scalar_type
static KOKKOS_INLINE_FUNCTION bool eval(const MP::Vector< S > &x, const MP::Vector< S > &y)
ValueType< MP::Vector< S > >::type value_type
const IndexType const IndexType const IndexType const IndexType const ValueType const ValueType ValueType * y