Sacado Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Sacado_Fad_Expression.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
// A short implementation ( not all operators and
45
// functions are overloaded ) of 1st order Automatic
46
// Differentiation in forward mode (FAD) using
47
// EXPRESSION TEMPLATES.
48
//
49
//********************************************************
50
// @HEADER
51
52
#ifndef SACADO_FAD_EXPRESSION_HPP
53
#define SACADO_FAD_EXPRESSION_HPP
54
55
#include "
Sacado_Traits.hpp
"
56
#include "
Sacado_Fad_ExpressionFwd.hpp
"
57
58
namespace
Sacado
{
59
60
namespace
Fad
{
61
63
70
template
<
typename
>
struct
BaseExpr
{};
71
72
struct
ExprSpecDefault
{};
73
template
<
typename
ExprT>
struct
ExprSpec
{
74
typedef
ExprSpecDefault
type
;
75
};
76
78
82
template
<
typename
ExprT,
typename
Spec>
83
class
Expr
{
84
public
:
85
typedef
ExprT
value_type
;
86
};
87
88
template
<
typename
ExprT,
typename
Spec>
89
struct
ExprSpec
<
Expr
<ExprT,Spec> > {
90
typedef
Spec
type
;
91
};
92
94
99
template
<
typename
T>
100
struct
ExprLevel
{
101
static
const
unsigned
value
= 0;
102
};
103
104
template
<
typename
T>
105
struct
ExprLevel
<
Expr
<
T
> > {
106
static
const
unsigned
value
=
107
ExprLevel< typename Expr<T>::value_type
>
::value
+ 1;
108
};
109
111
template
<
typename
T>
112
struct
IsFadExpr
{
113
static
const
bool
value
=
false
;
114
};
115
116
template
<
typename
T>
117
struct
IsFadExpr
<
Expr
<
T
> > {
118
static
const
bool
value
=
true
;
119
};
120
122
125
template
<
typename
ConstT>
126
class
ConstExpr
{
127
128
public
:
129
131
typedef
ConstT
value_type
;
132
134
typedef
typename
ScalarType<value_type>::type
scalar_type
;
135
137
typedef
ConstT
base_expr_type
;
138
140
SACADO_INLINE_FUNCTION
141
ConstExpr
(
const
ConstT& constant) :
constant_
(constant) {}
142
144
SACADO_INLINE_FUNCTION
145
const
ConstT&
val
()
const
{
return
constant_
; }
146
148
SACADO_INLINE_FUNCTION
149
const
ConstT&
val
(
int
j)
const
{
return
constant_
; }
150
151
protected
:
152
154
const
ConstT&
constant_
;
155
156
};
// class ConstExpr
157
158
}
// namespace Fad
159
160
template
<
typename
T>
161
struct
IsExpr
<
Fad
::Expr<T> > {
162
static
const
bool
value
=
true
;
163
};
164
165
template
<
typename
T>
166
struct
BaseExprType
<
Fad
::Expr<T> > {
167
typedef
typename
Fad::Expr<T>::base_expr_type
type
;
168
};
169
170
template
<
typename
T>
171
struct
ValueType
<
Fad
::ConstExpr<T> > {
172
typedef
typename
Fad::ConstExpr<T>::value_type
type
;
173
};
174
175
}
// namespace Sacado
176
177
#include "
Sacado_SFINAE_Macros.hpp
"
178
179
#endif
// SACADO_FAD_EXPRESSION_HPP
SACADO_INLINE_FUNCTION
#define SACADO_INLINE_FUNCTION
Definition
Sacado_ConfigDefs.h:110
Sacado_Fad_ExpressionFwd.hpp
Sacado_SFINAE_Macros.hpp
Sacado_Traits.hpp
T
#define T
Definition
Sacado_rad.hpp:573
Sacado::Fad::ConstExpr::val
SACADO_INLINE_FUNCTION const ConstT & val() const
Return value of operation.
Definition
Sacado_Fad_Expression.hpp:145
Sacado::Fad::ConstExpr::base_expr_type
ConstT base_expr_type
Typename of base-expressions.
Definition
Sacado_Fad_Expression.hpp:137
Sacado::Fad::ConstExpr::scalar_type
ScalarType< value_type >::type scalar_type
Typename of scalar's (which may be different from ConstT).
Definition
Sacado_Fad_Expression.hpp:134
Sacado::Fad::value_type::constant_
const T & constant_
Definition
Sacado_Fad_Expression.hpp:154
Sacado::Fad::ConstExpr::ConstExpr
SACADO_INLINE_FUNCTION ConstExpr(const ConstT &constant)
Constructor.
Definition
Sacado_Fad_Expression.hpp:141
Sacado::Fad::ConstExpr::val
SACADO_INLINE_FUNCTION const ConstT & val(int j) const
Return value of operation.
Definition
Sacado_Fad_Expression.hpp:149
Sacado::Fad::ConstExpr::value_type
ConstT value_type
Typename of argument values.
Definition
Sacado_Fad_Expression.hpp:131
Sacado::Fad::Expr
Wrapper for a generic expression template.
Definition
Sacado_Fad_Expression.hpp:83
Sacado::Fad::Expr< GeneralFadType >::value_type
GeneralFadType value_type
Definition
Sacado_Fad_Expression.hpp:85
Sacado::Fad
Namespace for forward-mode AD classes.
Definition
Sacado_Fad_Exp_DFad.hpp:38
Sacado
Definition
Sacado_mpl_apply.hpp:39
Sacado::BaseExprType< Fad::Expr< T > >::type
Fad::Expr< T >::base_expr_type type
Definition
Sacado_Fad_Expression.hpp:167
Sacado::BaseExprType
Get the base Fad type from a view/expression.
Definition
Sacado_Traits.hpp:89
Sacado::Fad::BaseExpr
Meta-function for determining concrete base expression.
Definition
Sacado_Fad_Expression.hpp:70
Sacado::Fad::ExprLevel< Expr< T > >::value
static const unsigned value
Definition
Sacado_Fad_Expression.hpp:106
Sacado::Fad::ExprLevel
Meta-function for determining nesting with an expression.
Definition
Sacado_Fad_Expression.hpp:100
Sacado::Fad::ExprLevel::value
static const unsigned value
Definition
Sacado_Fad_Expression.hpp:101
Sacado::Fad::ExprSpecDefault
Definition
Sacado_Fad_Expression.hpp:72
Sacado::Fad::ExprSpec< Expr< ExprT, Spec > >::type
Spec type
Definition
Sacado_Fad_Expression.hpp:90
Sacado::Fad::ExprSpec
Definition
Sacado_Fad_Expression.hpp:73
Sacado::Fad::ExprSpec::type
ExprSpecDefault type
Definition
Sacado_Fad_Expression.hpp:74
Sacado::Fad::IsFadExpr< Expr< T > >::value
static const bool value
Definition
Sacado_Fad_Expression.hpp:118
Sacado::Fad::IsFadExpr
Determine whether a given type is an expression.
Definition
Sacado_Fad_Expression.hpp:112
Sacado::Fad::IsFadExpr::value
static const bool value
Definition
Sacado_Fad_Expression.hpp:113
Sacado::IsExpr< Fad::Expr< T > >::value
static const bool value
Definition
Sacado_Fad_Expression.hpp:162
Sacado::IsExpr
Is a type an expression.
Definition
Sacado_Traits.hpp:77
Sacado::ScalarType::type
T type
Definition
Sacado_Traits.hpp:304
Sacado::ValueType< Fad::ConstExpr< T > >::type
Fad::ConstExpr< T >::value_type type
Definition
Sacado_Fad_Expression.hpp:172
Sacado::ValueType
Base template specification for ValueType.
Definition
Sacado_Traits.hpp:320
Generated by
1.17.0