Sacado Package Browser (Single Doxygen Collection)  Version of the Day
Sacado_Fad_DVFadTraits.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_FAD_DVFADTRAITS_HPP
50 #define SACADO_FAD_DVFADTRAITS_HPP
51 
52 #include "Sacado_ConfigDefs.h"
53 
54 #ifdef SACADO_NEW_FAD_DESIGN_IS_DEFAULT
55 
57 
58 #else
59 
60 #include "Sacado_Traits.hpp"
61 
62 // Forward declarations
63 namespace Sacado {
64  namespace Fad {
65  template <typename T> class DVFad;
66  }
67 }
68 
69 namespace Sacado {
70 
73 
74 
75  template <typename ValueT>
76  struct ScalarType< Fad::DVFad<ValueT> > {
78  };
79 
81  template <typename ValueT>
82  struct ValueType< Fad::DVFad<ValueT> > {
83  typedef ValueT type;
84  };
85 
87  template <typename ValueT>
88  struct IsADType< Fad::DVFad<ValueT> > {
89  static const bool value = true;
90  };
91 
93  template <typename ValueT>
94  struct IsScalarType< Fad::DVFad<ValueT> > {
95  static const bool value = false;
96  };
97 
99  template <typename ValueT>
100  struct IsSimdType< Fad::DVFad<ValueT> > {
101  static const bool value = IsSimdType<ValueT>::value;
102  };
103 
105  template <typename ValueT>
106  struct Value< Fad::DVFad<ValueT> > {
107  typedef typename ValueType< Fad::DVFad<ValueT> >::type value_type;
108  static const value_type& eval(const Fad::DVFad<ValueT>& x) {
109  return x.val(); }
110  };
111 
113  template <typename ValueT>
114  struct ScalarValue< Fad::DVFad<ValueT> > {
115  typedef typename ValueType< Fad::DVFad<ValueT> >::type value_type;
116  typedef typename ScalarType< Fad::DVFad<ValueT> >::type scalar_type;
117  static const scalar_type& eval(const Fad::DVFad<ValueT>& x) {
118  return ScalarValue<value_type>::eval(x.val()); }
119  };
120 
122  template <typename ValueT>
123  struct StringName< Fad::DVFad<ValueT> > {
124  static std::string eval() {
125  return std::string("Sacado::Fad::DVFad< ") +
126  StringName<ValueT>::eval() + " >"; }
127  };
128 
130  template <typename ValueT>
131  struct IsEqual< Fad::DVFad<ValueT> > {
132  static bool eval(const Fad::DVFad<ValueT>& x, const Fad::DVFad<ValueT>& y) {
133  return x.isEqualTo(y);
134  }
135  };
136 
138  template <typename ValueT>
139  struct IsStaticallySized< Fad::DVFad<ValueT> > {
140  static const bool value = false;
141  };
142 
143  template <typename T>
144  struct IsFad< Fad::DVFad<T> > {
145  static const bool value = true;
146  };
147 
148 } // namespace Sacado
149 
150 //
151 // Define Teuchos traits classes
152 //
153 
154 // Promotion traits
155 #ifdef HAVE_SACADO_TEUCHOSNUMERICS
156 #include "Teuchos_PromotionTraits.hpp"
157 namespace Teuchos {
158  template <typename ValueT>
159  struct PromotionTraits< Sacado::Fad::DVFad<ValueT>,
160  Sacado::Fad::DVFad<ValueT> > {
163  promote;
164  };
165 
166  template <typename ValueT, typename R>
167  struct PromotionTraits< Sacado::Fad::DVFad<ValueT>, R > {
168  typedef typename Sacado::Promote< Sacado::Fad::DVFad<ValueT>, R >::type
169  promote;
170  };
171 
172  template <typename L, typename ValueT>
173  struct PromotionTraits< L, Sacado::Fad::DVFad<ValueT> > {
174  public:
175  typedef typename Sacado::Promote< L, Sacado::Fad::DVFad<ValueT> >::type
176  promote;
177  };
178 }
179 #endif
180 
181 // Scalar traits
182 #ifdef HAVE_SACADO_TEUCHOSCORE
184 namespace Teuchos {
185  template <typename ValueT>
186  struct ScalarTraits< Sacado::Fad::DVFad<ValueT> > :
187  public Sacado::Fad::ScalarTraitsImp< Sacado::Fad::DVFad<ValueT> >
188  {};
189 }
190 #endif
191 
192 #endif // SACADO_NEW_FAD_DESIGN_IS_DEFAULT
193 
194 #endif // SACADO_FAD_DVFADTRAITS_HPP
#define SACADO_FAD_PROMOTE_SPEC(NS, FAD)
Forward-mode AD class using dynamic memory allocation and expression templates.
ScalarType< ValueT >::type ScalarT
Typename of scalar's (which may be different from ValueT)
GeneralFad< VectorDynamicStorage< T > > DVFad
Base template specification for IsADType.
static const bool value
static bool eval(const Fad::DVFad< ValueT > &x, const Fad::DVFad< ValueT > &y)
Base template specification for testing equivalence.
Base template specification for whether a type is a Fad type.
static const bool value
Base template specification for IsScalarType.
static const bool value
Base template specification for IsSimdType.
static const bool value
Base template specification for testing whether type is statically sized.
Base template specification for Promote.
Base template specification for ScalarType.
static const scalar_type & eval(const Fad::DVFad< ValueT > &x)
ScalarType< Fad::DVFad< ValueT > >::type scalar_type
ValueType< Fad::DVFad< 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.
ValueType< Fad::DVFad< ValueT > >::type value_type
static const value_type & eval(const Fad::DVFad< ValueT > &x)
Base template specification for Value.