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_ViewFadTraits.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_ELRFAD_VIEWFADTRAITS_HPP
50 #define SACADO_ELRFAD_VIEWFADTRAITS_HPP
51 
52 #include "Sacado_Traits.hpp"
53 
54 // Forward declarations
55 namespace Sacado {
56  namespace ELRFad {
57  template <typename T,unsigned,unsigned,typename> class ViewFad;
58  }
59 }
60 
61 namespace Sacado {
62 
64  SACADO_VFAD_PROMOTE_SPEC( ELRFad )
65 
66 
67  template <typename ValueT, unsigned Size, unsigned Stride, typename Base>
68  struct ScalarType< ELRFad::ViewFad<ValueT,Size,Stride,Base> > {
70  };
71 
73  template <typename ValueT, unsigned Size, unsigned Stride, typename Base>
74  struct ValueType< ELRFad::ViewFad<ValueT,Size,Stride,Base> > {
75  typedef ValueT type;
76  };
77 
79  template <typename ValueT, unsigned Size, unsigned Stride, typename Base>
80  struct IsADType< ELRFad::ViewFad<ValueT,Size,Stride,Base> > {
81  static const bool value = true;
82  };
83 
85  template <typename ValueT, unsigned Size, unsigned Stride, typename Base>
86  struct IsScalarType< ELRFad::ViewFad<ValueT,Size,Stride,Base> > {
87  static const bool value = false;
88  };
89 
91  template <typename ValueT, unsigned Size, unsigned Stride, typename Base>
92  struct Value< ELRFad::ViewFad<ValueT,Size,Stride,Base> > {
96  return x.val(); }
97  };
98 
100  template <typename ValueT, unsigned Size, unsigned Stride, typename Base>
101  struct ScalarValue< ELRFad::ViewFad<ValueT,Size,Stride,Base> > {
106  return ScalarValue<value_type>::eval(x.val()); }
107  };
108 
110  template <typename ValueT, unsigned Size, unsigned Stride, typename Base>
111  struct StringName< ELRFad::ViewFad<ValueT,Size,Stride,Base> > {
112  static std::string eval() {
113  return std::string("Sacado::ELRFad::ViewFad< ") +
114  StringName<ValueT>::eval() + " >"; }
115  };
116 
118  template <typename ValueT, unsigned Size, unsigned Stride, typename Base>
119  struct IsEqual< ELRFad::ViewFad<ValueT,Size,Stride,Base> > {
123  return x.isEqualTo(y);
124  }
125  };
126 
128  template <typename ValueT, unsigned Size, unsigned Stride, typename Base>
129  struct IsStaticallySized< ELRFad::ViewFad<ValueT,Size,Stride,Base> > {
130  static const bool value = false;
131  };
132 
133 } // namespace Sacado
134 
135 // ViewFad is not a proper scalar type, so we don't define any of the
136 // Teuchos traits classes
137 
138 #endif // SACADO_ELRFAD_VIEWFADTRAITS_HPP
static SACADO_INLINE_FUNCTION const T & eval(const T &x)
ValueType< ELRFad::ViewFad< ValueT, Size, Stride, Base > >::type value_type
static std::string eval()
static SACADO_INLINE_FUNCTION const value_type & eval(const ELRFad::ViewFad< ValueT, Size, Stride, Base > &x)
Base template specification for ScalarValue.
Base template specification for ScalarType.
Base template specification for string names of types.
Base template specification for IsADType.
Base template specification for Value.
Base class for Sacado types to control overload resolution.
Definition: Sacado_Base.hpp:46
static const bool value
ScalarType< ELRFad::ViewFad< ValueT, Size, Stride, Base > >::type scalar_type
Base template specification for testing equivalence.
static const bool value
Base template specification for IsScalarType.
GeneralFad< ViewStorage< T, static_length, static_stride, U > > ViewFad
#define SACADO_VFAD_PROMOTE_SPEC(NS)
#define SACADO_INLINE_FUNCTION
static SACADO_INLINE_FUNCTION const scalar_type & eval(const ELRFad::ViewFad< ValueT, Size, Stride, Base > &x)
static SACADO_INLINE_FUNCTION bool eval(const ELRFad::ViewFad< ValueT, Size, Stride, Base > &x, const ELRFad::ViewFad< ValueT, Size, Stride, Base > &y)
Base template specification for ValueType.
const double y
Base template specification for testing whether type is statically sized.
ValueType< ELRFad::ViewFad< ValueT, Size, Stride, Base > >::type value_type