Sacado Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
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
55namespace Sacado {
56 namespace ELRCacheFad {
57 template <typename T> class DFad;
58 }
59}
60
61namespace 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> > {
96 return x.val(); }
97 };
98
100 template <typename ValueT>
101 struct ScalarValue< ELRCacheFad::DFad<ValueT> > {
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,
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"
148namespace 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 > {
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
175namespace 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
186namespace 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 SACADO_INLINE_FUNCTION
#define SACADO_FAD_PROMOTE_SPEC(NS, FAD)
Sacado::Fad::DFad< double > FadType
const double y
Base template specification for IsADType.
static const bool value
static SACADO_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 SACADO_INLINE_FUNCTION const scalar_type & eval(const ELRCacheFad::DFad< ValueT > &x)
ValueType< ELRCacheFad::DFad< ValueT > >::type value_type
Base template specification for ScalarValue.
static SACADO_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 SACADO_INLINE_FUNCTION const value_type & eval(const ELRCacheFad::DFad< ValueT > &x)
ValueType< ELRCacheFad::DFad< ValueT > >::type value_type
Base template specification for Value.