Sacado Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
Sacado_Fad_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_FAD_DFADTRAITS_HPP
50#define SACADO_FAD_DFADTRAITS_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
63namespace Sacado {
64 namespace Fad {
65 template <typename T> class DFad;
66 }
67}
68
69namespace Sacado {
70
72 SACADO_FAD_PROMOTE_SPEC( Fad, DFad )
73
74
75 template <typename ValueT>
76 struct ScalarType< Fad::DFad<ValueT> > {
78 };
79
81 template <typename ValueT>
82 struct ValueType< Fad::DFad<ValueT> > {
83 typedef ValueT type;
84 };
85
87 template <typename ValueT>
88 struct IsADType< Fad::DFad<ValueT> > {
89 static const bool value = true;
90 };
91
93 template <typename ValueT>
94 struct IsScalarType< Fad::DFad<ValueT> > {
95 static const bool value = false;
96 };
97
99 template <typename ValueT>
100 struct IsSimdType< Fad::DFad<ValueT> > {
101 static const bool value = IsSimdType<ValueT>::value;
102 };
103
105 template <typename ValueT>
106 struct Value< Fad::DFad<ValueT> > {
107 typedef typename ValueType< Fad::DFad<ValueT> >::type value_type;
109 static const value_type& eval(const Fad::DFad<ValueT>& x) {
110 return x.val(); }
111 };
112
114 template <typename ValueT>
115 struct ScalarValue< Fad::DFad<ValueT> > {
116 typedef typename ValueType< Fad::DFad<ValueT> >::type value_type;
119 static const scalar_type& eval(const Fad::DFad<ValueT>& x) {
120 return ScalarValue<value_type>::eval(x.val()); }
121 };
122
124 template <typename ValueT>
125 struct StringName< Fad::DFad<ValueT> > {
126 static std::string eval() {
127 return std::string("Sacado::Fad::DFad< ") +
128 StringName<ValueT>::eval() + " >"; }
129 };
130
132 template <typename ValueT>
133 struct IsEqual< Fad::DFad<ValueT> > {
135 static bool eval(const Fad::DFad<ValueT>& x, const Fad::DFad<ValueT>& y) {
136 return x.isEqualTo(y);
137 }
138 };
139
141 template <typename ValueT>
142 struct IsStaticallySized< Fad::DFad<ValueT> > {
143 static const bool value = false;
144 };
145
147 template <typename ValueT>
148 struct IsStaticallySized< const Fad::DFad<ValueT> > {
149 static const bool value = false;
150 };
151
152} // namespace Sacado
153
154//
155// Define Teuchos traits classes
156//
157
158// Promotion traits
159#ifdef HAVE_SACADO_TEUCHOSNUMERICS
160#include "Teuchos_PromotionTraits.hpp"
161namespace Teuchos {
162 template <typename ValueT>
163 struct PromotionTraits< Sacado::Fad::DFad<ValueT>,
164 Sacado::Fad::DFad<ValueT> > {
167 promote;
168 };
169
170 template <typename ValueT, typename R>
171 struct PromotionTraits< Sacado::Fad::DFad<ValueT>, R > {
172 typedef typename Sacado::Promote< Sacado::Fad::DFad<ValueT>, R >::type
173 promote;
174 };
175
176 template <typename L, typename ValueT>
177 struct PromotionTraits< L, Sacado::Fad::DFad<ValueT> > {
178 public:
179 typedef typename Sacado::Promote< L, Sacado::Fad::DFad<ValueT> >::type
180 promote;
181 };
182}
183#endif
184
185// Scalar traits
186#ifdef HAVE_SACADO_TEUCHOSCORE
188namespace Teuchos {
189 template <typename ValueT>
190 struct ScalarTraits< Sacado::Fad::DFad<ValueT> > :
191 public Sacado::Fad::ScalarTraitsImp< Sacado::Fad::DFad<ValueT> >
192 {};
193}
194#endif
195
196// Serialization traits
197#ifdef HAVE_SACADO_TEUCHOSCOMM
199namespace Teuchos {
200 template <typename Ordinal, typename ValueT>
201 struct SerializationTraits<Ordinal, Sacado::Fad::DFad<ValueT> > :
202 public Sacado::Fad::SerializationTraitsImp< Ordinal,
203 Sacado::Fad::DFad<ValueT> >
204 {};
205
206 template <typename Ordinal, typename ValueT>
207 struct ValueTypeSerializer<Ordinal, Sacado::Fad::DFad<ValueT> > :
208 public Sacado::Fad::SerializerImp< Ordinal,
209 Sacado::Fad::DFad<ValueT>,
210 ValueTypeSerializer<Ordinal,ValueT> >
211 {
213 typedef ValueTypeSerializer<Ordinal,ValueT> ValueSerializer;
214 typedef Sacado::Fad::SerializerImp< Ordinal,FadType,ValueSerializer> Base;
215 ValueTypeSerializer(const Teuchos::RCP<const ValueSerializer>& vs,
216 Ordinal sz = 0) :
217 Base(vs, sz) {}
218 };
219}
220#endif
221
222// KokkosComm
223#if defined(HAVE_SACADO_KOKKOSCORE) && defined(HAVE_SACADO_TEUCHOSKOKKOSCOMM) && defined(HAVE_SACADO_VIEW_SPEC) && !defined(SACADO_DISABLE_FAD_VIEW_SPEC)
224#include "KokkosExp_View_Fad.hpp"
225#endif
226
227#endif // SACADO_NEW_FAD_DESIGN_IS_DEFAULT
228
229#endif // SACADO_FAD_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 Fad::DFad< ValueT > &x, const Fad::DFad< ValueT > &y)
Base template specification for testing equivalence.
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 SACADO_INLINE_FUNCTION const scalar_type & eval(const Fad::DFad< ValueT > &x)
ValueType< Fad::DFad< ValueT > >::type value_type
ScalarType< Fad::DFad< ValueT > >::type scalar_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.
ValueType< Fad::DFad< ValueT > >::type value_type
static SACADO_INLINE_FUNCTION const value_type & eval(const Fad::DFad< ValueT > &x)
Base template specification for Value.