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 //
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 
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
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
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:573
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.