Sacado Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Sacado_CacheFad_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_CACHEFAD_EXPRESSION_HPP
53
#define SACADO_CACHEFAD_EXPRESSION_HPP
54
55
#include "
Sacado_Traits.hpp
"
56
57
namespace
Sacado
{
58
59
namespace
CacheFad
{
60
62
69
template
<
typename
>
struct
BaseExpr
{};
70
72
76
template
<
typename
ExprT>
77
class
Expr
{};
78
80
85
template
<
typename
T>
86
struct
ExprLevel
{
87
static
const
unsigned
value
= 0;
88
};
89
90
template
<
typename
T>
91
struct
ExprLevel
<
Expr
<
T
> > {
92
static
const
unsigned
value
=
93
ExprLevel< typename Expr<T>::value_type
>
::value
+ 1;
94
};
95
97
template
<
typename
T>
98
struct
IsFadExpr
{
99
static
const
bool
value
=
false
;
100
};
101
102
template
<
typename
T>
103
struct
IsFadExpr
<
Expr
<
T
> > {
104
static
const
bool
value
=
true
;
105
};
106
108
111
template
<
typename
ConstT>
112
class
ConstExpr
{
113
114
public
:
115
117
typedef
ConstT
value_type
;
118
120
typedef
typename
ScalarType<value_type>::type
scalar_type
;
121
123
typedef
ConstT
base_expr_type
;
124
126
SACADO_INLINE_FUNCTION
127
ConstExpr
(
const
ConstT& constant) :
constant_
(constant) {}
128
130
SACADO_INLINE_FUNCTION
131
int
size
()
const
{
return
0; }
132
134
SACADO_INLINE_FUNCTION
135
bool
hasFastAccess
()
const
{
return
1; }
136
138
SACADO_INLINE_FUNCTION
139
void
cache
()
const
{}
140
142
SACADO_INLINE_FUNCTION
143
value_type
val
()
const
{
return
constant_
; }
144
146
SACADO_INLINE_FUNCTION
147
value_type
dx
(
int
i)
const
{
return
value_type
(0); }
148
150
SACADO_INLINE_FUNCTION
151
value_type
fastAccessDx
(
int
i)
const
{
return
value_type
(0); }
152
153
protected
:
154
156
const
ConstT&
constant_
;
157
158
};
// class ConstExpr
159
160
}
// namespace CacheFad
161
162
template
<
typename
T>
163
struct
IsExpr
<
CacheFad
::Expr<T> > {
164
static
const
bool
value
=
true
;
165
};
166
167
template
<
typename
T>
168
struct
BaseExprType
<
CacheFad
::Expr<T> > {
169
typedef
typename
CacheFad::Expr<T>::base_expr_type
type
;
170
};
171
172
}
// namespace Sacado
173
174
#include "
Sacado_SFINAE_Macros.hpp
"
175
176
#endif
// SACADO_CACHEFAD_EXPRESSION_HPP
SACADO_INLINE_FUNCTION
#define SACADO_INLINE_FUNCTION
Definition
Sacado_ConfigDefs.h:110
Sacado_SFINAE_Macros.hpp
Sacado_Traits.hpp
T
#define T
Definition
Sacado_rad.hpp:573
Sacado::CacheFad::ConstExpr::size
SACADO_INLINE_FUNCTION int size() const
Return size of the derivative array of the operation.
Definition
Sacado_CacheFad_Expression.hpp:131
Sacado::CacheFad::ConstExpr::val
SACADO_INLINE_FUNCTION value_type val() const
Return value of operation.
Definition
Sacado_CacheFad_Expression.hpp:143
Sacado::CacheFad::ConstExpr::base_expr_type
ConstT base_expr_type
Typename of base-expressions.
Definition
Sacado_CacheFad_Expression.hpp:123
Sacado::CacheFad::ConstExpr::ConstExpr
SACADO_INLINE_FUNCTION ConstExpr(const ConstT &constant)
Constructor.
Definition
Sacado_CacheFad_Expression.hpp:127
Sacado::CacheFad::ConstExpr::constant_
const ConstT & constant_
The constant.
Definition
Sacado_CacheFad_Expression.hpp:156
Sacado::CacheFad::ConstExpr::scalar_type
ScalarType< value_type >::type scalar_type
Typename of scalar's (which may be different from ConstT).
Definition
Sacado_CacheFad_Expression.hpp:120
Sacado::CacheFad::ConstExpr::fastAccessDx
SACADO_INLINE_FUNCTION value_type fastAccessDx(int i) const
Return derivative component i of operation.
Definition
Sacado_CacheFad_Expression.hpp:151
Sacado::CacheFad::ConstExpr::value_type
ConstT value_type
Typename of argument values.
Definition
Sacado_CacheFad_Expression.hpp:117
Sacado::CacheFad::ConstExpr::cache
SACADO_INLINE_FUNCTION void cache() const
Cache values.
Definition
Sacado_CacheFad_Expression.hpp:139
Sacado::CacheFad::ConstExpr::dx
SACADO_INLINE_FUNCTION value_type dx(int i) const
Return derivative component i of operation.
Definition
Sacado_CacheFad_Expression.hpp:147
Sacado::CacheFad::ConstExpr::hasFastAccess
SACADO_INLINE_FUNCTION bool hasFastAccess() const
Return if operation has fast access.
Definition
Sacado_CacheFad_Expression.hpp:135
Sacado::CacheFad::Expr
Wrapper for a generic expression template.
Definition
Sacado_CacheFad_Expression.hpp:77
Sacado::CacheFad
Namespace for forward-mode AD classes w/caching.
Definition
Sacado_CacheFad_DFadTraits.hpp:56
Sacado
Definition
Sacado_mpl_apply.hpp:39
Sacado::BaseExprType< CacheFad::Expr< T > >::type
CacheFad::Expr< T >::base_expr_type type
Definition
Sacado_CacheFad_Expression.hpp:169
Sacado::BaseExprType
Get the base Fad type from a view/expression.
Definition
Sacado_Traits.hpp:89
Sacado::CacheFad::BaseExpr
Meta-function for determining concrete base expression.
Definition
Sacado_CacheFad_Expression.hpp:69
Sacado::CacheFad::ExprLevel< Expr< T > >::value
static const unsigned value
Definition
Sacado_CacheFad_Expression.hpp:92
Sacado::CacheFad::ExprLevel
Meta-function for determining nesting with an expression.
Definition
Sacado_CacheFad_Expression.hpp:86
Sacado::CacheFad::ExprLevel::value
static const unsigned value
Definition
Sacado_CacheFad_Expression.hpp:87
Sacado::CacheFad::IsFadExpr< Expr< T > >::value
static const bool value
Definition
Sacado_CacheFad_Expression.hpp:104
Sacado::CacheFad::IsFadExpr
Determine whether a given type is an expression.
Definition
Sacado_CacheFad_Expression.hpp:98
Sacado::CacheFad::IsFadExpr::value
static const bool value
Definition
Sacado_CacheFad_Expression.hpp:99
Sacado::IsExpr< CacheFad::Expr< T > >::value
static const bool value
Definition
Sacado_CacheFad_Expression.hpp:164
Sacado::IsExpr
Is a type an expression.
Definition
Sacado_Traits.hpp:77
Sacado::ScalarType::type
T type
Definition
Sacado_Traits.hpp:304
Generated by
1.17.0