Sacado Package Browser (Single Doxygen Collection)  Version of the Day
Sacado_Tay_CacheTaylorTraits.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Sacado Package
5 // Copyright (2006) Sandia Corporation
6 //
7 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8 // the U.S. Government retains certain rights in this software.
9 //
10 // This library is free software; you can redistribute it and/or modify
11 // it under the terms of the GNU Lesser General Public License as
12 // published by the Free Software Foundation; either version 2.1 of the
13 // License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23 // USA
24 // Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
25 // (etphipp@sandia.gov).
26 //
27 // ***********************************************************************
28 // @HEADER
29 
30 #ifndef SACADO_TAYLOR_DTAYLORTRAITS_HPP
31 #define SACADO_TAYLOR_DTAYLORTRAITS_HPP
32 
33 #include "Sacado_Traits.hpp"
34 
35 // Forward declarations
36 namespace Sacado {
37  namespace Tay {
38  template <typename T> class CacheTaylor;
39  template <typename T> class Expr;
40  }
41 }
42 
43 namespace Sacado {
44 
46  SACADO_AD_PROMOTE_SPEC( Tay, CacheTaylor )
47 
48 
50 
51 
52  template <typename T>
53  struct ScalarType< Tay::CacheTaylor<T> > {
54  typedef typename ScalarType<T>::type type;
55  };
56 
58  template <typename T>
59  struct ValueType< Tay::CacheTaylor<T> > {
60  typedef T type;
61  };
62 
64  template <typename T>
65  struct IsADType< Tay::CacheTaylor<T> > {
66  static const bool value = true;
67  };
68 
70  template <typename T>
71  struct IsScalarType< Tay::CacheTaylor<T> > {
72  static const bool value = false;
73  };
74 
76  template <typename T>
77  struct Value< Tay::CacheTaylor<T> > {
78  typedef typename ValueType< Tay::CacheTaylor<T> >::type value_type;
79  static const value_type& eval(const Tay::CacheTaylor<T>& x) {
80  return x.val(); }
81  };
82 
84  template <typename T>
85  struct ScalarValue< Tay::CacheTaylor<T> > {
86  typedef typename ValueType< Tay::CacheTaylor<T> >::type value_type;
87  typedef typename ScalarType< Tay::CacheTaylor<T> >::type scalar_type;
88  static const scalar_type& eval(const Tay::CacheTaylor<T>& x) {
89  return ScalarValue<value_type>::eval(x.val()); }
90  };
91 
93  template <typename T>
94  struct StringName< Tay::CacheTaylor<T> > {
95  static std::string eval() {
96  return std::string("Sacado::Tay::CacheTaylor< ") +
97  StringName<T>::eval() + " >"; }
98  };
99 
101  template <typename T>
102  struct IsEqual< Tay::CacheTaylor<T> > {
103  static bool eval(const Tay::CacheTaylor<T>& x,
104  const Tay::CacheTaylor<T>& y) {
105  return x.isEqualTo(y);
106  }
107  };
108 
110  template <typename T>
111  struct IsStaticallySized< Tay::CacheTaylor<T> > {
112  static const bool value = false;
113  };
114 
115 } // namespace Sacado
116 
117 //
118 // Define Teuchos traits classes
119 //
120 
121 // Promotion traits
122 #ifdef HAVE_SACADO_TEUCHOSNUMERICS
123 #include "Teuchos_PromotionTraits.hpp"
124 namespace Teuchos {
125  template <typename ValueT>
126  struct PromotionTraits< Sacado::Tay::CacheTaylor<ValueT>,
127  Sacado::Tay::CacheTaylor<ValueT> > {
130  promote;
131  };
132 
134  template <typename ValueT, typename R>
135  struct PromotionTraits< Sacado::Tay::CacheTaylor<ValueT>, R > {
136  typedef typename Sacado::Promote< Sacado::Tay::CacheTaylor<ValueT>, R >::type
137  promote;
138  };
139 
141  template <typename L, typename ValueT>
142  struct PromotionTraits< L, Sacado::Tay::CacheTaylor<ValueT> > {
143  public:
145  promote;
146  };
147 }
148 #endif
149 
150 // Scalar traits
151 #ifdef HAVE_SACADO_TEUCHOSCORE
153 namespace Teuchos {
154  template <typename ValueT>
155  struct ScalarTraits< Sacado::Tay::CacheTaylor<ValueT> > :
156  public Sacado::Tay::ScalarTraitsImp< Sacado::Tay::CacheTaylor<ValueT> >
157  {};
158 }
159 #endif
160 
161 // Serialization traits
162 #ifdef HAVE_SACADO_TEUCHOSCOMM
164 namespace Teuchos {
165  template <typename Ordinal, typename ValueT>
166  struct SerializationTraits<Ordinal, Sacado::Tay::CacheTaylor<ValueT> > :
167  public Sacado::Tay::SerializationTraitsImp< Ordinal,
168  Sacado::Tay::CacheTaylor<ValueT> >
169  {};
170 
171  template <typename Ordinal, typename ValueT>
172  struct ValueTypeSerializer<Ordinal, Sacado::Tay::CacheTaylor<ValueT> > :
173  public Sacado::Tay::SerializerImp< Ordinal,
174  Sacado::Tay::CacheTaylor<ValueT>,
175  ValueTypeSerializer<Ordinal,ValueT> >
176  {
177  typedef Sacado::Tay::CacheTaylor<ValueT> TayType;
178  typedef ValueTypeSerializer<Ordinal,ValueT> ValueSerializer;
179  typedef Sacado::Tay::SerializerImp< Ordinal,TayType,ValueSerializer> Base;
180  ValueTypeSerializer(const Teuchos::RCP<const ValueSerializer>& vs,
181  Ordinal sz = 0) :
182  Base(vs, sz) {}
183  };
184 }
185 #endif
186 
187 #endif // SACADO_TAYLOR_DTAYLORTRAITS_HPP
int Ordinal
#define SACADO_EXPR_PROMOTE_SPEC(NS)
#define SACADO_AD_PROMOTE_SPEC(NS, AD)
#define T
Definition: Sacado_rad.hpp:573
bool isEqualTo(const Expr< S > &x) const
Returns whether two Taylor objects have the same values.
Forward-mode AD class using dynamic memory allocation.
Base template specification for IsADType.
static const bool value
static bool eval(const Tay::CacheTaylor< T > &x, const Tay::CacheTaylor< T > &y)
Base template specification for testing equivalence.
Base template specification for IsScalarType.
static const bool value
Base template specification for testing whether type is statically sized.
Base template specification for Promote.
Base template specification for ScalarType.
ScalarType< Tay::CacheTaylor< T > >::type scalar_type
static const scalar_type & eval(const Tay::CacheTaylor< T > &x)
ValueType< Tay::CacheTaylor< T > >::type value_type
Base template specification for ScalarValue.
static KOKKOS_INLINE_FUNCTION const T & eval(const T &x)
Base template specification for string names of types.
static std::string eval()
Base template specification for ValueType.
ValueType< Tay::CacheTaylor< T > >::type value_type
static const value_type & eval(const Tay::CacheTaylor< T > &x)
Base template specification for Value.