Sacado Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Sacado_ELRFad_SLFadTraits.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_ELRFAD_SLFADTRAITS_HPP
11 #define SACADO_ELRFAD_SLFADTRAITS_HPP
12 
13 #include "Sacado_Traits.hpp"
14 #include <sstream>
15 
16 // Forward declarations
17 namespace Sacado {
18  namespace ELRFad {
19  template <typename T, int Num> class SLFad;
20  }
21 }
22 
23 namespace Sacado {
24 
27 
28 
29  template <typename ValueT, int Num>
30  struct ScalarType< ELRFad::SLFad<ValueT,Num> > {
32  };
33 
35  template <typename ValueT, int Num>
36  struct ValueType< ELRFad::SLFad<ValueT,Num> > {
37  typedef ValueT type;
38  };
39 
41  template <typename ValueT, int Num>
42  struct IsADType< ELRFad::SLFad<ValueT,Num> > {
43  static const bool value = true;
44  };
45 
47  template <typename ValueT, int Num>
48  struct IsScalarType< ELRFad::SLFad<ValueT,Num> > {
49  static const bool value = false;
50  };
51 
53  template <typename ValueT, int Num>
54  struct Value< ELRFad::SLFad<ValueT,Num> > {
57  static const value_type& eval(const ELRFad::SLFad<ValueT,Num>& x) {
58  return x.val(); }
59  };
60 
62  template <typename ValueT, int Num>
63  struct ScalarValue< ELRFad::SLFad<ValueT,Num> > {
67  static const scalar_type& eval(const ELRFad::SLFad<ValueT,Num>& x) {
68  return ScalarValue<value_type>::eval(x.val()); }
69  };
70 
72  template <typename ValueT, int Num>
73  struct StringName< ELRFad::SLFad<ValueT,Num> > {
74  static std::string eval() {
75  std::stringstream ss;
76  ss << "Sacado::ELRFad::SLFad< "
77  << StringName<ValueT>::eval() << ", " << Num << " >";
78  return ss.str();
79  }
80  };
81 
83  template <typename ValueT, int Num>
84  struct IsEqual< ELRFad::SLFad<ValueT,Num> > {
86  static bool eval(const ELRFad::SLFad<ValueT,Num>& x,
88  return x.isEqualTo(y);
89  }
90  };
91 
93  template <typename ValueT, int Num>
94  struct IsStaticallySized< ELRFad::SLFad<ValueT,Num> > {
95  static const bool value = false;
96  };
97 
99  template <typename ValueT, int Num>
100  struct IsStaticallySized< const ELRFad::SLFad<ValueT,Num> > {
101  static const bool value = false;
102  };
103 
104 } // namespace Sacado
105 
106 //
107 // Define Teuchos traits classes
108 //
109 
110 // Promotion traits
111 #ifdef HAVE_SACADO_TEUCHOSNUMERICS
113 namespace Teuchos {
114  template <typename ValueT, int Num>
115  struct PromotionTraits< Sacado::ELRFad::SLFad<ValueT,Num>,
116  Sacado::ELRFad::SLFad<ValueT,Num> > {
119  promote;
120  };
121 
122  template <typename ValueT, int Num, typename R>
123  struct PromotionTraits< Sacado::ELRFad::SLFad<ValueT,Num>, R > {
124  typedef typename Sacado::Promote< Sacado::ELRFad::SLFad<ValueT,Num>, R >::type
125  promote;
126  };
127 
128  template <typename L, typename ValueT, int Num>
129  struct PromotionTraits< L, Sacado::ELRFad::SLFad<ValueT,Num> > {
130  public:
132  promote;
133  };
134 }
135 #endif
136 
137 // Scalar traits
138 #ifdef HAVE_SACADO_TEUCHOSCORE
140 namespace Teuchos {
141  template <typename ValueT, int Num>
142  struct ScalarTraits< Sacado::ELRFad::SLFad<ValueT,Num> > :
143  public Sacado::Fad::ScalarTraitsImp< Sacado::ELRFad::SLFad<ValueT,Num> >
144  {};
145 }
146 #endif
147 
148 // Serialization traits
149 #ifdef HAVE_SACADO_TEUCHOSCOMM
151 namespace Teuchos {
152  template <typename Ordinal, typename ValueT, int Num>
153  struct SerializationTraits<Ordinal, Sacado::ELRFad::SLFad<ValueT,Num> > :
154  public Sacado::Fad::SerializationTraitsImp< Ordinal,
155  Sacado::ELRFad::SLFad<ValueT,Num> >
156  {};
157 
158  template <typename Ordinal, typename ValueT, int Num>
159  struct ValueTypeSerializer<Ordinal, Sacado::ELRFad::SLFad<ValueT,Num> > :
160  public Sacado::Fad::SerializerImp< Ordinal,
161  Sacado::ELRFad::SLFad<ValueT,Num>,
162  ValueTypeSerializer<Ordinal,ValueT> >
163  {
165  typedef ValueTypeSerializer<Ordinal,ValueT> ValueSerializer;
166  typedef Sacado::Fad::SerializerImp< Ordinal,FadType,ValueSerializer> Base;
167  ValueTypeSerializer(const Teuchos::RCP<const ValueSerializer>& vs,
168  Ordinal sz = 0) :
169  Base(vs, sz) {}
170  };
171 }
172 #endif
173 
174 // KokkosComm
175 #if defined(HAVE_SACADO_KOKKOS) && defined(HAVE_SACADO_TEUCHOSKOKKOSCOMM) && defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
176 #include "KokkosExp_View_Fad.hpp"
177 #endif
178 
179 #endif // SACADO_ELRFAD_SFADTRAITS_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.
Base template specification for string names of types.
GeneralFad< StaticStorage< T, Num > > SLFad
static SACADO_INLINE_FUNCTION bool eval(const ELRFad::SLFad< ValueT, Num > &x, const ELRFad::SLFad< ValueT, Num > &y)
ValueType< ELRFad::SLFad< ValueT, Num > >::type value_type
Base template specification for IsADType.
Sacado::Fad::DFad< double > FadType
Base template specification for Value.
static const bool value
Base template specification for testing equivalence.
ScalarType< ELRFad::SLFad< ValueT, Num > >::type scalar_type
int Ordinal
static SACADO_INLINE_FUNCTION const value_type & eval(const ELRFad::SLFad< ValueT, Num > &x)
static const bool value
Base template specification for IsScalarType.
#define SACADO_SFAD_PROMOTE_SPEC(NS, FAD)
#define SACADO_INLINE_FUNCTION
static SACADO_INLINE_FUNCTION const scalar_type & eval(const ELRFad::SLFad< ValueT, Num > &x)
ValueType< ELRFad::SLFad< ValueT, Num > >::type value_type
Base template specification for ValueType.
Base template specification for Promote.
const double y
Base template specification for testing whether type is statically sized.