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_CacheTaylorTraits.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_TAYLOR_DTAYLORTRAITS_HPP
11 #define SACADO_TAYLOR_DTAYLORTRAITS_HPP
12 
13 #include "Sacado_Traits.hpp"
14 
15 // Forward declarations
16 namespace Sacado {
17  namespace Tay {
18  template <typename T> class CacheTaylor;
19  template <typename T> class Expr;
20  }
21 }
22 
23 namespace Sacado {
24 
26  SACADO_AD_PROMOTE_SPEC( Tay, CacheTaylor )
27 
28 
30 
32  template <typename T>
33  struct ScalarType< Tay::CacheTaylor<T> > {
34  typedef typename ScalarType<T>::type type;
35  };
36 
38  template <typename T>
39  struct ValueType< Tay::CacheTaylor<T> > {
40  typedef T type;
41  };
42 
44  template <typename T>
45  struct IsADType< Tay::CacheTaylor<T> > {
46  static const bool value = true;
47  };
48 
50  template <typename T>
51  struct IsScalarType< Tay::CacheTaylor<T> > {
52  static const bool value = false;
53  };
54 
56  template <typename T>
57  struct Value< Tay::CacheTaylor<T> > {
58  typedef typename ValueType< Tay::CacheTaylor<T> >::type value_type;
59  static const value_type& eval(const Tay::CacheTaylor<T>& x) {
60  return x.val(); }
61  };
62 
64  template <typename T>
65  struct ScalarValue< Tay::CacheTaylor<T> > {
66  typedef typename ValueType< Tay::CacheTaylor<T> >::type value_type;
67  typedef typename ScalarType< Tay::CacheTaylor<T> >::type scalar_type;
68  static const scalar_type& eval(const Tay::CacheTaylor<T>& x) {
69  return ScalarValue<value_type>::eval(x.val()); }
70  };
71 
73  template <typename T>
74  struct StringName< Tay::CacheTaylor<T> > {
75  static std::string eval() {
76  return std::string("Sacado::Tay::CacheTaylor< ") +
77  StringName<T>::eval() + " >"; }
78  };
79 
81  template <typename T>
82  struct IsEqual< Tay::CacheTaylor<T> > {
83  static bool eval(const Tay::CacheTaylor<T>& x,
84  const Tay::CacheTaylor<T>& y) {
85  return x.isEqualTo(y);
86  }
87  };
88 
90  template <typename T>
91  struct IsStaticallySized< Tay::CacheTaylor<T> > {
92  static const bool value = false;
93  };
94 
95 } // namespace Sacado
96 
97 //
98 // Define Teuchos traits classes
99 //
100 
101 // Promotion traits
102 #ifdef HAVE_SACADO_TEUCHOSNUMERICS
104 namespace Teuchos {
105  template <typename ValueT>
106  struct PromotionTraits< Sacado::Tay::CacheTaylor<ValueT>,
107  Sacado::Tay::CacheTaylor<ValueT> > {
110  promote;
111  };
112 
114  template <typename ValueT, typename R>
115  struct PromotionTraits< Sacado::Tay::CacheTaylor<ValueT>, R > {
116  typedef typename Sacado::Promote< Sacado::Tay::CacheTaylor<ValueT>, R >::type
117  promote;
118  };
119 
121  template <typename L, typename ValueT>
122  struct PromotionTraits< L, Sacado::Tay::CacheTaylor<ValueT> > {
123  public:
125  promote;
126  };
127 }
128 #endif
129 
130 // Scalar traits
131 #ifdef HAVE_SACADO_TEUCHOSCORE
133 namespace Teuchos {
134  template <typename ValueT>
135  struct ScalarTraits< Sacado::Tay::CacheTaylor<ValueT> > :
136  public Sacado::Tay::ScalarTraitsImp< Sacado::Tay::CacheTaylor<ValueT> >
137  {};
138 }
139 #endif
140 
141 // Serialization traits
142 #ifdef HAVE_SACADO_TEUCHOSCOMM
144 namespace Teuchos {
145  template <typename Ordinal, typename ValueT>
146  struct SerializationTraits<Ordinal, Sacado::Tay::CacheTaylor<ValueT> > :
147  public Sacado::Tay::SerializationTraitsImp< Ordinal,
148  Sacado::Tay::CacheTaylor<ValueT> >
149  {};
150 
151  template <typename Ordinal, typename ValueT>
152  struct ValueTypeSerializer<Ordinal, Sacado::Tay::CacheTaylor<ValueT> > :
153  public Sacado::Tay::SerializerImp< Ordinal,
154  Sacado::Tay::CacheTaylor<ValueT>,
155  ValueTypeSerializer<Ordinal,ValueT> >
156  {
157  typedef Sacado::Tay::CacheTaylor<ValueT> TayType;
158  typedef ValueTypeSerializer<Ordinal,ValueT> ValueSerializer;
159  typedef Sacado::Tay::SerializerImp< Ordinal,TayType,ValueSerializer> Base;
160  ValueTypeSerializer(const Teuchos::RCP<const ValueSerializer>& vs,
161  Ordinal sz = 0) :
162  Base(vs, sz) {}
163  };
164 }
165 #endif
166 
167 #endif // SACADO_TAYLOR_DTAYLORTRAITS_HPP
static SACADO_INLINE_FUNCTION const T & eval(const T &x)
static std::string eval()
Base template specification for ScalarValue.
Base template specification for ScalarType.
const T & val() const
Returns value.
Forward-mode AD class using dynamic memory allocation.
Base template specification for string names of types.
bool isEqualTo(const Expr< S > &x) const
Returns whether two Taylor objects have the same values.
ValueType< Tay::CacheTaylor< T > >::type value_type
Base template specification for IsADType.
Base template specification for Value.
#define SACADO_AD_PROMOTE_SPEC(NS, AD)
ScalarType< Tay::CacheTaylor< T > >::type scalar_type
#define T
Definition: Sacado_rad.hpp:553
static const bool value
#define SACADO_EXPR_PROMOTE_SPEC(NS)
ValueType< Tay::CacheTaylor< T > >::type value_type
Base template specification for testing equivalence.
int Ordinal
static bool eval(const Tay::CacheTaylor< T > &x, const Tay::CacheTaylor< T > &y)
static const value_type & eval(const Tay::CacheTaylor< T > &x)
static const bool value
Base template specification for IsScalarType.
Base template specification for ValueType.
Base template specification for Promote.
static const scalar_type & eval(const Tay::CacheTaylor< T > &x)
const double y
Base template specification for testing whether type is statically sized.