Sacado Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Sacado_Tay_TaylorTraits.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Sacado Package
4 //
5 // Copyright 2006 NTESS and the Sacado contributors.
6 // SPDX-License-Identifier: LGPL-2.1-or-later
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef SACADO_TAY_TAYLORTRAITS_HPP
11 #define SACADO_TAY_TAYLORTRAITS_HPP
12 
13 #include "Sacado_Traits.hpp"
14 
15 // Forward declarations
16 namespace Sacado {
17  namespace Tay {
18  template <typename T> class Taylor;
19  }
20 }
21 
22 namespace Sacado {
23 
25  SACADO_AD_PROMOTE_SPEC( Tay, Taylor )
26 
27 
28  template <typename T>
29  struct ScalarType< Tay::Taylor<T> > {
30  typedef typename ScalarType<T>::type type;
31  };
32 
34  template <typename T>
35  struct ValueType< Tay::Taylor<T> > {
36  typedef T type;
37  };
38 
40  template <typename T>
41  struct IsADType< Tay::Taylor<T> > {
42  static const bool value = true;
43  };
44 
46  template <typename T>
47  struct IsScalarType< Tay::Taylor<T> > {
48  static const bool value = false;
49  };
50 
52  template <typename T>
53  struct Value< Tay::Taylor<T> > {
54  typedef typename ValueType< Tay::Taylor<T> >::type value_type;
55  static const value_type& eval(const Tay::Taylor<T>& x) {
56  return x.val(); }
57  };
58 
60  template <typename T>
61  struct ScalarValue< Tay::Taylor<T> > {
62  typedef typename ValueType< Tay::Taylor<T> >::type value_type;
63  typedef typename ScalarType< Tay::Taylor<T> >::type scalar_type;
64  static const scalar_type& eval(const Tay::Taylor<T>& x) {
65  return ScalarValue<value_type>::eval(x.val()); }
66  };
67 
69  template <typename T>
70  struct StringName< Tay::Taylor<T> > {
71  static std::string eval() {
72  return std::string("Sacado::Tay::Taylor< ") +
73  StringName<T>::eval() + " >"; }
74  };
75 
77  template <typename T>
78  struct IsEqual< Tay::Taylor<T> > {
79  static bool eval(const Tay::Taylor<T>& x, const Tay::Taylor<T>& y) {
80  return x.isEqualTo(y);
81  }
82  };
83 
85  template <typename T>
86  struct IsStaticallySized< Tay::Taylor<T> > {
87  static const bool value = false;
88  };
89 
90 } // namespace Sacado
91 
92 //
93 // Define Teuchos traits classes
94 //
95 
96 // Promotion traits
97 #ifdef HAVE_SACADO_TEUCHOSNUMERICS
99 namespace Teuchos {
100  template <typename ValueT>
101  struct PromotionTraits< Sacado::Tay::Taylor<ValueT>,
102  Sacado::Tay::Taylor<ValueT> > {
105  promote;
106  };
107 
109  template <typename ValueT, typename R>
110  struct PromotionTraits< Sacado::Tay::Taylor<ValueT>, R > {
111  typedef typename Sacado::Promote< Sacado::Tay::Taylor<ValueT>, R >::type
112  promote;
113  };
114 
116  template <typename L, typename ValueT>
117  struct PromotionTraits< L, Sacado::Tay::Taylor<ValueT> > {
118  public:
119  typedef typename Sacado::Promote< L, Sacado::Tay::Taylor<ValueT> >::type
120  promote;
121  };
122 }
123 #endif
124 
125 // Scalar traits
126 #ifdef HAVE_SACADO_TEUCHOSCORE
128 namespace Teuchos {
129  template <typename ValueT>
130  struct ScalarTraits< Sacado::Tay::Taylor<ValueT> > :
131  public Sacado::Tay::ScalarTraitsImp< Sacado::Tay::Taylor<ValueT> >
132  {};
133 }
134 #endif
135 
136 // Serialization traits
137 #ifdef HAVE_SACADO_TEUCHOSCOMM
139 namespace Teuchos {
140  template <typename Ordinal, typename ValueT>
141  struct SerializationTraits<Ordinal, Sacado::Tay::Taylor<ValueT> > :
142  public Sacado::Tay::SerializationTraitsImp< Ordinal,
143  Sacado::Tay::Taylor<ValueT> >
144  {};
145 
146  template <typename Ordinal, typename ValueT>
147  struct ValueTypeSerializer<Ordinal, Sacado::Tay::Taylor<ValueT> > :
148  public Sacado::Tay::SerializerImp< Ordinal,
149  Sacado::Tay::Taylor<ValueT>,
150  ValueTypeSerializer<Ordinal,ValueT> >
151  {
152  typedef Sacado::Tay::Taylor<ValueT> TayType;
153  typedef ValueTypeSerializer<Ordinal,ValueT> ValueSerializer;
154  typedef Sacado::Tay::SerializerImp< Ordinal,TayType,ValueSerializer> Base;
155  ValueTypeSerializer(const Teuchos::RCP<const ValueSerializer>& vs,
156  Ordinal sz = 0) :
157  Base(vs, sz) {}
158  };
159 }
160 #endif
161 
162 #endif // SACADO_TAYLOR_SIMPLETAYLORTRAITS_HPP
static SACADO_INLINE_FUNCTION const T & eval(const T &x)
static std::string eval()
static const scalar_type & eval(const Tay::Taylor< T > &x)
Base template specification for ScalarValue.
Base template specification for ScalarType.
Base template specification for string names of types.
static const value_type & eval(const Tay::Taylor< T > &x)
Base template specification for IsADType.
static bool eval(const Tay::Taylor< T > &x, const Tay::Taylor< T > &y)
Base template specification for Value.
ValueType< Tay::Taylor< T > >::type value_type
#define SACADO_AD_PROMOTE_SPEC(NS, AD)
ValueType< Tay::Taylor< T > >::type value_type
#define T
Definition: Sacado_rad.hpp:553
static const bool value
Base template specification for testing equivalence.
bool isEqualTo(const Taylor &x) const
Returns whether two Taylor objects have the same values.
const T & val() const
Returns value.
int Ordinal
ScalarType< Tay::Taylor< T > >::type scalar_type
Taylor polynomial class.
static const bool value
Base template specification for IsScalarType.
Base template specification for ValueType.
Base template specification for Promote.
const double y
Base template specification for testing whether type is statically sized.