Sacado Package Browser (Single Doxygen Collection)  Version of the Day
Sacado_ELRCacheFad_DFadTraits.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 //
29 // The forward-mode AD classes in Sacado are a derivative work of the
30 // expression template classes in the Fad package by Nicolas Di Cesare.
31 // The following banner is included in the original Fad source code:
32 //
33 // ************ DO NOT REMOVE THIS BANNER ****************
34 //
35 // Nicolas Di Cesare <Nicolas.Dicesare@ann.jussieu.fr>
36 // http://www.ann.jussieu.fr/~dicesare
37 //
38 // CEMRACS 98 : C++ courses,
39 // templates : new C++ techniques
40 // for scientific computing
41 //
42 //********************************************************
43 //
44 // NumericalTraits class to illustrate TRAITS
45 //
46 //********************************************************
47 // @HEADER
48 
49 #ifndef SACADO_ELRCACHEFAD_DFADTRAITS_HPP
50 #define SACADO_ELRCACHEFAD_DFADTRAITS_HPP
51 
52 #include "Sacado_Traits.hpp"
53 
54 // Forward declarations
55 namespace Sacado {
56  namespace ELRCacheFad {
57  template <typename T> class DFad;
58  }
59 }
60 
61 namespace Sacado {
62 
64  SACADO_FAD_PROMOTE_SPEC( ELRCacheFad, DFad )
65 
66 
67  template <typename ValueT>
68  struct ScalarType< ELRCacheFad::DFad<ValueT> > {
70  };
71 
73  template <typename ValueT>
74  struct ValueType< ELRCacheFad::DFad<ValueT> > {
75  typedef ValueT type;
76  };
77 
79  template <typename ValueT>
80  struct IsADType< ELRCacheFad::DFad<ValueT> > {
81  static const bool value = true;
82  };
83 
85  template <typename ValueT>
86  struct IsScalarType< ELRCacheFad::DFad<ValueT> > {
87  static const bool value = false;
88  };
89 
91  template <typename ValueT>
92  struct Value< ELRCacheFad::DFad<ValueT> > {
95  static const value_type& eval(const ELRCacheFad::DFad<ValueT>& x) {
96  return x.val(); }
97  };
98 
100  template <typename ValueT>
101  struct ScalarValue< ELRCacheFad::DFad<ValueT> > {
105  static const scalar_type& eval(const ELRCacheFad::DFad<ValueT>& x) {
106  return ScalarValue<value_type>::eval(x.val()); }
107  };
108 
110  template <typename ValueT>
111  struct StringName< ELRCacheFad::DFad<ValueT> > {
112  static std::string eval() {
113  return std::string("Sacado::ELRCacheFad::DFad< ") +
114  StringName<ValueT>::eval() + " >"; }
115  };
116 
118  template <typename ValueT>
119  struct IsEqual< ELRCacheFad::DFad<ValueT> > {
121  static bool eval(const ELRCacheFad::DFad<ValueT>& x,
122  const ELRCacheFad::DFad<ValueT>& y) {
123  return x.isEqualTo(y);
124  }
125  };
126 
128  template <typename ValueT>
129  struct IsStaticallySized< ELRCacheFad::DFad<ValueT> > {
130  static const bool value = false;
131  };
132 
134  template <typename ValueT>
135  struct IsStaticallySized< const ELRCacheFad::DFad<ValueT> > {
136  static const bool value = false;
137  };
138 
139 } // namespace Sacado
140 
141 //
142 // Define Teuchos traits classes
143 //
144 
145 // Promotion traits
146 #ifdef HAVE_SACADO_TEUCHOSNUMERICS
147 #include "Teuchos_PromotionTraits.hpp"
148 namespace Teuchos {
149  template <typename ValueT>
150  struct PromotionTraits< Sacado::ELRCacheFad::DFad<ValueT>,
151  Sacado::ELRCacheFad::DFad<ValueT> > {
154  promote;
155  };
156 
157  template <typename ValueT, typename R>
158  struct PromotionTraits< Sacado::ELRCacheFad::DFad<ValueT>, R > {
159  typedef typename Sacado::Promote< Sacado::ELRCacheFad::DFad<ValueT>, R >::type
160  promote;
161  };
162 
163  template <typename L, typename ValueT>
164  struct PromotionTraits< L, Sacado::ELRCacheFad::DFad<ValueT> > {
165  public:
167  promote;
168  };
169 }
170 #endif
171 
172 // Scalar traits
173 #ifdef HAVE_SACADO_TEUCHOSCORE
175 namespace Teuchos {
176  template <typename ValueT>
177  struct ScalarTraits< Sacado::ELRCacheFad::DFad<ValueT> > :
178  public Sacado::Fad::ScalarTraitsImp< Sacado::ELRCacheFad::DFad<ValueT> >
179  {};
180 }
181 #endif
182 
183 // Serialization traits
184 #ifdef HAVE_SACADO_TEUCHOSCOMM
186 namespace Teuchos {
187  template <typename Ordinal, typename ValueT>
188  struct SerializationTraits<Ordinal, Sacado::ELRCacheFad::DFad<ValueT> > :
189  public Sacado::Fad::SerializationTraitsImp< Ordinal,
190  Sacado::ELRCacheFad::DFad<ValueT> >
191  {};
192 
193  template <typename Ordinal, typename ValueT>
194  struct ValueTypeSerializer<Ordinal, Sacado::ELRCacheFad::DFad<ValueT> > :
195  public Sacado::Fad::SerializerImp< Ordinal,
196  Sacado::ELRCacheFad::DFad<ValueT>,
197  ValueTypeSerializer<Ordinal,ValueT> >
198  {
200  typedef ValueTypeSerializer<Ordinal,ValueT> ValueSerializer;
201  typedef Sacado::Fad::SerializerImp< Ordinal,FadType,ValueSerializer> Base;
202  ValueTypeSerializer(const Teuchos::RCP<const ValueSerializer>& vs,
203  Ordinal sz = 0) :
204  Base(vs, sz) {}
205  };
206 }
207 #endif
208 
209 // KokkosComm
210 #if defined(HAVE_SACADO_KOKKOSCORE) && defined(HAVE_SACADO_TEUCHOSKOKKOSCOMM) && defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
211 #include "KokkosExp_View_Fad.hpp"
212 #endif
213 
214 #endif // SACADO_ELRCACHEFAD_DFADTRAITS_HPP
int Ordinal
#define KOKKOS_INLINE_FUNCTION
#define SACADO_FAD_PROMOTE_SPEC(NS, FAD)
Sacado::Fad::DFad< double > FadType
GeneralFad< DynamicStorage< T > > DFad
Base template specification for IsADType.
static const bool value
static KOKKOS_INLINE_FUNCTION bool eval(const ELRCacheFad::DFad< ValueT > &x, const ELRCacheFad::DFad< ValueT > &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< ELRCacheFad::DFad< ValueT > >::type scalar_type
static KOKKOS_INLINE_FUNCTION const scalar_type & eval(const ELRCacheFad::DFad< ValueT > &x)
ValueType< ELRCacheFad::DFad< ValueT > >::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.
static KOKKOS_INLINE_FUNCTION const value_type & eval(const ELRCacheFad::DFad< ValueT > &x)
ValueType< ELRCacheFad::DFad< ValueT > >::type value_type
Base template specification for Value.