Sacado Package Browser (Single Doxygen Collection)  Version of the Day
Sacado_Tay_TaylorTraits.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Sacado Package
5 // Copyright (2006) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
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_TAY_TAYLORTRAITS_HPP
31 #define SACADO_TAY_TAYLORTRAITS_HPP
32 
33 #include "Sacado_Traits.hpp"
34 
35 // Forward declarations
36 namespace Sacado {
37  namespace Tay {
38  template <typename T> class Taylor;
39  }
40 }
41 
42 namespace Sacado {
43 
45  SACADO_AD_PROMOTE_SPEC( Tay, Taylor )
46 
47 
48  template <typename T>
49  struct ScalarType< Tay::Taylor<T> > {
50  typedef typename ScalarType<T>::type type;
51  };
52 
54  template <typename T>
55  struct ValueType< Tay::Taylor<T> > {
56  typedef T type;
57  };
58 
60  template <typename T>
61  struct IsADType< Tay::Taylor<T> > {
62  static const bool value = true;
63  };
64 
66  template <typename T>
67  struct IsScalarType< Tay::Taylor<T> > {
68  static const bool value = false;
69  };
70 
72  template <typename T>
73  struct Value< Tay::Taylor<T> > {
74  typedef typename ValueType< Tay::Taylor<T> >::type value_type;
75  static const value_type& eval(const Tay::Taylor<T>& x) {
76  return x.val(); }
77  };
78 
80  template <typename T>
81  struct ScalarValue< Tay::Taylor<T> > {
82  typedef typename ValueType< Tay::Taylor<T> >::type value_type;
83  typedef typename ScalarType< Tay::Taylor<T> >::type scalar_type;
84  static const scalar_type& eval(const Tay::Taylor<T>& x) {
85  return ScalarValue<value_type>::eval(x.val()); }
86  };
87 
89  template <typename T>
90  struct StringName< Tay::Taylor<T> > {
91  static std::string eval() {
92  return std::string("Sacado::Tay::Taylor< ") +
93  StringName<T>::eval() + " >"; }
94  };
95 
97  template <typename T>
98  struct IsEqual< Tay::Taylor<T> > {
99  static bool eval(const Tay::Taylor<T>& x, const Tay::Taylor<T>& y) {
100  return x.isEqualTo(y);
101  }
102  };
103 
105  template <typename T>
106  struct IsStaticallySized< Tay::Taylor<T> > {
107  static const bool value = false;
108  };
109 
110 } // namespace Sacado
111 
112 // Define Teuchos traits classes
113 #ifdef HAVE_SACADO_TEUCHOS
115 #include "Teuchos_ScalarTraits.hpp"
118 
119 namespace Teuchos {
120 
122  template <typename ValueT>
123  struct PromotionTraits< Sacado::Tay::Taylor<ValueT>,
124  Sacado::Tay::Taylor<ValueT> > {
127  promote;
128  };
129 
131  template <typename ValueT, typename R>
132  struct PromotionTraits< Sacado::Tay::Taylor<ValueT>, R > {
133  typedef typename Sacado::Promote< Sacado::Tay::Taylor<ValueT>, R >::type
134  promote;
135  };
136 
138  template <typename L, typename ValueT>
139  struct PromotionTraits< L, Sacado::Tay::Taylor<ValueT> > {
140  public:
141  typedef typename Sacado::Promote< L, Sacado::Tay::Taylor<ValueT> >::type
142  promote;
143  };
144 
146  template <typename ValueT>
147  struct ScalarTraits< Sacado::Tay::Taylor<ValueT> > :
148  public Sacado::Tay::ScalarTraitsImp< Sacado::Tay::Taylor<ValueT> >
149  {};
150 
152  template <typename Ordinal, typename ValueT>
153  struct SerializationTraits<Ordinal, Sacado::Tay::Taylor<ValueT> > :
154  public Sacado::Tay::SerializationTraitsImp< Ordinal,
155  Sacado::Tay::Taylor<ValueT> >
156  {};
157 
159  template <typename Ordinal, typename ValueT>
160  struct ValueTypeSerializer<Ordinal, Sacado::Tay::Taylor<ValueT> > :
161  public Sacado::Tay::SerializerImp< Ordinal,
162  Sacado::Tay::Taylor<ValueT>,
163  ValueTypeSerializer<Ordinal,ValueT> >
164  {
165  typedef Sacado::Tay::Taylor<ValueT> TayType;
166  typedef ValueTypeSerializer<Ordinal,ValueT> ValueSerializer;
167  typedef Sacado::Tay::SerializerImp< Ordinal,TayType,ValueSerializer> Base;
168  ValueTypeSerializer(const Teuchos::RCP<const ValueSerializer>& vs,
169  Ordinal sz = 0) :
170  Base(vs, sz) {}
171  };
172 }
173 #endif // HAVE_SACADO_TEUCHOS
174 
175 #endif // SACADO_TAYLOR_SIMPLETAYLORTRAITS_HPP
Sacado::StringName::eval
static std::string eval()
Definition: Sacado_Traits.hpp:377
Sacado::ScalarValue< Tay::Taylor< T > >::scalar_type
ScalarType< Tay::Taylor< T > >::type scalar_type
Definition: Sacado_Tay_TaylorTraits.hpp:83
Sacado::ScalarType
Base template specification for ScalarType.
Definition: Sacado_Traits.hpp:303
Sacado::ValueType
Base template specification for ValueType.
Definition: Sacado_Traits.hpp:320
Sacado::StringName
Base template specification for string names of types.
Definition: Sacado_Traits.hpp:376
Sacado_Tay_ScalarTraitsImp.hpp
Sacado::Value
Base template specification for Value.
Definition: Sacado_Traits.hpp:354
Sacado::Rad::ADvar
Definition: Sacado_trad.hpp:213
Sacado::IsADType::value
static const bool value
Definition: Sacado_Traits.hpp:338
Sacado::ScalarValue< Tay::Taylor< T > >::value_type
ValueType< Tay::Taylor< T > >::type value_type
Definition: Sacado_Tay_TaylorTraits.hpp:82
Teuchos_PromotionTraits.hpp
Sacado::Tay::Taylor
Taylor polynomial class.
Definition: Sacado_Tay_Taylor.hpp:52
Sacado::ValueType< Tay::Taylor< T > >::type
T type
Definition: Sacado_Tay_TaylorTraits.hpp:56
SACADO_AD_PROMOTE_SPEC
#define SACADO_AD_PROMOTE_SPEC(NS, AD)
Definition: Sacado_Traits.hpp:235
Sacado::Promote
Base template specification for Promote.
Definition: Sacado_Traits.hpp:106
Sacado::ScalarValue::eval
static const KOKKOS_INLINE_FUNCTION T & eval(const T &x)
Definition: Sacado_Traits.hpp:366
Sacado::ScalarType::type
T type
Definition: Sacado_Traits.hpp:304
T
#define T
Definition: Sacado_rad.hpp:573
Sacado::StringName< Tay::Taylor< T > >::eval
static std::string eval()
Definition: Sacado_Tay_TaylorTraits.hpp:91
Sacado::ScalarType< Tay::Taylor< T > >::type
ScalarType< T >::type type
Definition: Sacado_Tay_TaylorTraits.hpp:50
Sacado_Traits.hpp
Teuchos::RCP
Sacado::IsEqual
Base template specification for testing equivalence.
Definition: Sacado_Traits.hpp:381
Sacado::IsStaticallySized
Base template specification for testing whether type is statically sized.
Definition: Sacado_Traits.hpp:387
Sacado
Definition: Sacado_mpl_apply.hpp:39
Sacado::Value< Tay::Taylor< T > >::value_type
ValueType< Tay::Taylor< T > >::type value_type
Definition: Sacado_Tay_TaylorTraits.hpp:74
Sacado::Tay::Taylor::val
const T & val() const
Returns value.
Definition: Sacado_Tay_Taylor.hpp:162
Sacado::Fad::DFad< double >
Sacado::IsScalarType
Base template specification for IsScalarType.
Definition: Sacado_Traits.hpp:346
Sacado::IsStaticallySized::value
static const bool value
Definition: Sacado_Traits.hpp:388
Sacado::ScalarValue
Base template specification for ScalarValue.
Definition: Sacado_Traits.hpp:364
Sacado::IsEqual< Tay::Taylor< T > >::eval
static bool eval(const Tay::Taylor< T > &x, const Tay::Taylor< T > &y)
Definition: Sacado_Tay_TaylorTraits.hpp:99
Sacado::Tay::Taylor::isEqualTo
bool isEqualTo(const Taylor &x) const
Returns whether two Taylor objects have the same values.
Definition: Sacado_Tay_Taylor.hpp:127
Sacado::ScalarValue< Tay::Taylor< T > >::eval
static const scalar_type & eval(const Tay::Taylor< T > &x)
Definition: Sacado_Tay_TaylorTraits.hpp:84
Teuchos_ScalarTraits.hpp
Sacado::IsADType
Base template specification for IsADType.
Definition: Sacado_Traits.hpp:337
Teuchos
Teuchos_SerializationTraits.hpp
Sacado::IsScalarType::value
static const bool value
Definition: Sacado_Traits.hpp:347
Sacado::Value< Tay::Taylor< T > >::eval
static const value_type & eval(const Tay::Taylor< T > &x)
Definition: Sacado_Tay_TaylorTraits.hpp:75
Ordinal
int Ordinal
Definition: CacheFad_CommTests.cpp:36