Sacado Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Sacado_CacheFad_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_CACHEFAD_SLFADTRAITS_HPP
11 #define SACADO_CACHEFAD_SLFADTRAITS_HPP
12 
13 #include "Sacado_Traits.hpp"
14 #include <sstream>
15 
16 // Forward declarations
17 namespace Sacado {
18  namespace CacheFad {
19  template <typename T, int Num> class SLFad;
20  }
21 }
22 
23 namespace Sacado {
24 
26  SACADO_SFAD_PROMOTE_SPEC( CacheFad, SLFad )
27 
28 
29  template <typename ValueT, int Num>
30  struct ScalarType< CacheFad::SLFad<ValueT,Num> > {
32  };
33 
35  template <typename ValueT, int Num>
36  struct ValueType< CacheFad::SLFad<ValueT,Num> > {
37  typedef ValueT type;
38  };
39 
41  template <typename ValueT, int Num>
42  struct IsADType< CacheFad::SLFad<ValueT,Num> > {
43  static const bool value = true;
44  };
45 
47  template <typename ValueT, int Num>
48  struct IsScalarType< CacheFad::SLFad<ValueT,Num> > {
49  static const bool value = false;
50  };
51 
53  template <typename ValueT, int Num>
54  struct Value< CacheFad::SLFad<ValueT,Num> > {
57  static const value_type& eval(const CacheFad::SLFad<ValueT,Num>& x) {
58  return x.val(); }
59  };
60 
62  template <typename ValueT, int Num>
63  struct ScalarValue< CacheFad::SLFad<ValueT,Num> > {
68  return ScalarValue<value_type>::eval(x.val()); }
69  };
70 
72  template <typename ValueT, int Num>
73  struct StringName< CacheFad::SLFad<ValueT,Num> > {
74  static std::string eval() {
75  std::stringstream ss;
76  ss << "Sacado::CacheFad::SLFad< "
77  << StringName<ValueT>::eval() << ", " << Num << " >";
78  return ss.str();
79  }
80  };
81 
83  template <typename ValueT, int Num>
84  struct IsEqual< CacheFad::SLFad<ValueT,Num> > {
86  static bool eval(const CacheFad::SLFad<ValueT,Num>& x,
88  return x.isEqualTo(y);
89  }
90  };
91 
93  template <typename ValueT, int Num>
94  struct IsStaticallySized< CacheFad::SLFad<ValueT,Num> > {
95  static const bool value = false;
96  };
97 
99  template <typename ValueT, int Num>
100  struct IsStaticallySized< const CacheFad::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::CacheFad::SLFad<ValueT,Num>,
116  Sacado::CacheFad::SLFad<ValueT,Num> > {
119  promote;
120  };
121 
122  template <typename ValueT, int Num, typename R>
123  struct PromotionTraits< Sacado::CacheFad::SLFad<ValueT,Num>, R > {
125  promote;
126  };
127 
128  template <typename L, typename ValueT, int Num>
129  struct PromotionTraits< L, Sacado::CacheFad::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::CacheFad::SLFad<ValueT,Num> > :
143  public Sacado::Fad::ScalarTraitsImp< Sacado::CacheFad::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::CacheFad::SLFad<ValueT,Num> > :
154  public Sacado::Fad::SerializationTraitsImp< Ordinal,
155  Sacado::CacheFad::SLFad<ValueT,Num> >
156  {};
157 
158  template <typename Ordinal, typename ValueT, int Num>
159  struct ValueTypeSerializer<Ordinal, Sacado::CacheFad::SLFad<ValueT,Num> > :
160  public Sacado::Fad::SerializerImp< Ordinal,
161  Sacado::CacheFad::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_CACHEFAD_SLFADTRAITS_HPP
static SACADO_INLINE_FUNCTION const T & eval(const T &x)
static std::string eval()
static SACADO_INLINE_FUNCTION bool eval(const CacheFad::SLFad< ValueT, Num > &x, const CacheFad::SLFad< ValueT, Num > &y)
Base template specification for ScalarValue.
Base template specification for ScalarType.
ScalarType< CacheFad::SLFad< ValueT, Num > >::type scalar_type
Base template specification for string names of types.
GeneralFad< StaticStorage< T, Num > > SLFad
Base template specification for IsADType.
Sacado::Fad::DFad< double > FadType
Base template specification for Value.
static SACADO_INLINE_FUNCTION const scalar_type & eval(const CacheFad::SLFad< ValueT, Num > &x)
ValueType< CacheFad::SLFad< ValueT, Num > >::type value_type
static const bool value
Base template specification for testing equivalence.
ValueType< CacheFad::SLFad< ValueT, Num > >::type value_type
int Ordinal
static const bool value
Base template specification for IsScalarType.
static SACADO_INLINE_FUNCTION const value_type & eval(const CacheFad::SLFad< ValueT, Num > &x)
#define SACADO_SFAD_PROMOTE_SPEC(NS, FAD)
#define SACADO_INLINE_FUNCTION
Base template specification for ValueType.
Base template specification for Promote.
const double y
Base template specification for testing whether type is statically sized.