Sacado Development
Loading...
Searching...
No Matches
Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > > Class Template Reference

Expression template forward-mode AD class with static memory allocation. More...

#include <Sacado_ELRCacheFad_SFad.hpp>

Inheritance diagram for Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >:
Collaboration diagram for Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >:

Classes

struct  LocalAccumOp

Public Types

typedef RemoveConst< T >::type value_type
 Typename of values.
typedef ScalarType< value_type >::type scalar_type
 Typename of scalar's (which may be different from T).
typedef SFad< value_type, Num > base_expr_type
 Typename of base-expressions.

Public Member Functions

Initialization methods
 Expr ()
 Default constructor.
template<typename S>
 Expr (const S &x, typename Sacado::mpl::enable_if< std::is_convertible< S, value_type >, void * >::type=0)
 Constructor with supplied value x.
 Expr (const int sz, const T &x, const DerivInit zero_out=InitDerivArray)
 Constructor with size sz and value x.
 Expr (const int sz, const int i, const T &x)
 Constructor with size sz, index i, and value x.
 Expr (const Expr &x)
 Copy constructor.
template<typename S>
 Expr (const Expr< S > &x, typename mpl::enable_if_c< std::is_convertible< typename Expr< S >::value_type, value_type >::value &&ExprLevel< typename Expr< S >::value_type >::value==ExprLevel< value_type >::value, void * >::type=0)
 Copy constructor from any Expression object.
 ~Expr ()
 Destructor.
void diff (const int ith, const int n)
 Set Fad object as the ith independent variable.
void resize (int sz)
 Resize derivative array to length sz.
void expand (int sz)
 Expand derivative array to size sz.
void zero ()
 Zero out the derivative array.
void setUpdateValue (bool update_val)
 Set whether this Fad object should update values.
bool updateValue () const
 Return whether this Fad object has an updated value.
void cache () const
 Cache values.
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, bool >::type isEqualTo (const Expr< S > &x) const
 Returns whether two Fad objects have the same values.
Value accessor methods
const T & val () const
 Returns value.
T & val ()
 Returns value.
Derivative accessor methods
int size () const
 Returns number of derivative components.
int availableSize () const
 Returns number of derivative components that can be stored without reallocation.
bool hasFastAccess () const
 Returns true if derivative array is not empty.
bool isPassive () const
 Returns true if derivative array is empty.
void setIsConstant (bool is_const)
 Set whether variable is constant.
const T * dx () const
 Returns derivative array.
const T & dx (int i) const
 Returns derivative component i with bounds checking.
T & fastAccessDx (int i)
 Returns derivative component i without bounds checking.
const T & fastAccessDx (int i) const
 Returns derivative component i without bounds checking.
void computePartials (const T &bar, value_type partials[]) const
 Return partials w.r.t. arguments.
void getTangents (int i, value_type dots[]) const
 Return tangent component i of arguments.
template<int Arg>
bool isActive () const
 Return whether argument is active.
template<int Arg>
getTangent (int i) const
 Return tangent component i of argument Arg.
const value_typegetDx (int j) const
 Get dx array.
Assignment operators
template<typename S>
Sacado::mpl::enable_if< std::is_convertible< S, value_type >, Expr & >::type operator= (const S &v)
 Assignment operator with constant right-hand-side.
Exproperator= (const Expr &x)
 Assignment with Expr right-hand-side.
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, Expr & >::type operator= (const Expr< S > &x)
 Assignment operator with any expression right-hand-side.

Static Public Attributes

static const int num_args = 1
 Number of arguments.
static const bool is_linear = true
 Is expression linear.

Unary operators

dx_ [Num]
 Derivatives.
val_
 Value.
template<typename S>
Sacado::mpl::enable_if< std::is_convertible< S, value_type >, Expr & >::type operator+= (const S &v)
 Addition-assignment operator with constant right-hand-side.
template<typename S>
Sacado::mpl::enable_if< std::is_convertible< S, value_type >, Expr & >::type operator-= (const S &v)
 Subtraction-assignment operator with constant right-hand-side.
template<typename S>
Sacado::mpl::enable_if< std::is_convertible< S, value_type >, Expr & >::type operator*= (const S &v)
 Multiplication-assignment operator with constant right-hand-side.
template<typename S>
Sacado::mpl::enable_if< std::is_convertible< S, value_type >, Expr & >::type operator/= (const S &v)
 Division-assignment operator with constant right-hand-side.
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, Expr & >::type operator+= (const Expr< S > &x)
 Addition-assignment operator with Expr right-hand-side.
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, Expr & >::type operator-= (const Expr< S > &x)
 Subtraction-assignment operator with Expr right-hand-side.
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, Expr & >::type operator*= (const Expr< S > &x)
 Multiplication-assignment operator with Expr right-hand-side.
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, Expr & >::type operator/= (const Expr< S > &x)
 Division-assignment operator with Expr right-hand-side.

Detailed Description

template<typename T, int Num>
class Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >

Expression template forward-mode AD class with static memory allocation.

This classes specializes Expr to SFad expressions.

Constructor & Destructor Documentation

◆ Expr() [1/6]

◆ Expr() [2/6]

template<typename T, int Num>
template<typename S>
Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::Expr ( const S & x,
typename Sacado::mpl::enable_if< std::is_convertible< S, value_type >, void * >::type = 0 )
inline

Constructor with supplied value x.

Initializes value to x and derivative array is empty

References dx_, val_, and Sacado::ss_array< T, isScalar >::zero().

◆ Expr() [3/6]

template<typename T, int Num>
Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::Expr ( const int sz,
const T & x,
const DerivInit zero_out = InitDerivArray )
inline

Constructor with size sz and value x.

Initializes value to x and derivative array 0 of length sz

References dx_, val_, and Sacado::ss_array< T, isScalar >::zero().

◆ Expr() [4/6]

template<typename T, int Num>
Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::Expr ( const int sz,
const int i,
const T & x )
inline

Constructor with size sz, index i, and value x.

Initializes value to x and derivative array of length sz as row i of the identity matrix, i.e., sets derivative component i to 1 and all other's to zero.

References dx_, val_, and Sacado::ss_array< T, isScalar >::zero().

◆ Expr() [5/6]

template<typename T, int Num>
Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::Expr ( const Expr< SFadExprTag< T, Num > > & x)
inline

Copy constructor.

References dx_, Expr(), and val_.

◆ Expr() [6/6]

template<typename T, int Num>
template<typename S>
Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::Expr ( const Expr< S > & x,
typename mpl::enable_if_c< std::is_convertible< typename Expr< S >::value_type, value_type >::value &&ExprLevel< typename Expr< S >::value_type >::value==ExprLevel< value_type >::value, void * >::type = 0 )
inline

Copy constructor from any Expression object.

References dx_, Expr(), and val().

Member Function Documentation

◆ diff()

template<typename T, int Num>
void Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::diff ( const int ith,
const int n )
inline

Set Fad object as the ith independent variable.

Sets the derivative array of length n to the ith row of the identity matrix and has the same affect as the Implementation(const int sz, const int i, const T & x) constructor.

References dx_, and Sacado::ss_array< T, isScalar >::zero().

◆ dx() [1/2]

template<typename T, int Num>
const T * Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::dx ( ) const
inline

Returns derivative array.

References dx_.

Referenced by getDx().

◆ dx() [2/2]

template<typename T, int Num>
const T & Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::dx ( int i) const
inline

Returns derivative component i with bounds checking.

References dx_.

◆ expand()

template<typename T, int Num>
void Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::expand ( int sz)
inline

Expand derivative array to size sz.

Since the derivative array length is not dynamic, this method throws an error if compiled with SACADO_DEBUG defined.

References resize().

◆ fastAccessDx() [1/2]

template<typename T, int Num>
T & Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::fastAccessDx ( int i)
inline

Returns derivative component i without bounds checking.

References dx_.

◆ fastAccessDx() [2/2]

template<typename T, int Num>
const T & Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::fastAccessDx ( int i) const
inline

Returns derivative component i without bounds checking.

References dx_.

◆ getDx()

template<typename T, int Num>
const value_type * Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::getDx ( int j) const
inline

Get dx array.

References dx().

◆ getTangent()

template<typename T, int Num>
template<int Arg>
T Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::getTangent ( int i) const
inline

Return tangent component i of argument Arg.

References dx_.

◆ getTangents()

template<typename T, int Num>
void Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::getTangents ( int i,
value_type dots[] ) const
inline

Return tangent component i of arguments.

References dx_.

◆ isEqualTo()

template<typename T, int Num>
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, bool >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::isEqualTo ( const Expr< S > & x) const
inline

Returns whether two Fad objects have the same values.

References Expr(), and size().

◆ operator*=() [1/2]

template<typename T, int Num>
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, Expr & >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator*= ( const Expr< S > & x)
inline

Multiplication-assignment operator with Expr right-hand-side.

References dx_, Expr(), and val_.

◆ operator*=() [2/2]

template<typename T, int Num>
template<typename S>
Sacado::mpl::enable_if< std::is_convertible< S, value_type >, Expr & >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator*= ( const S & v)
inline

Multiplication-assignment operator with constant right-hand-side.

References dx_, Expr(), and val().

◆ operator+=() [1/2]

template<typename T, int Num>
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, Expr & >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator+= ( const Expr< S > & x)
inline

Addition-assignment operator with Expr right-hand-side.

References dx_, Expr(), and val().

◆ operator+=() [2/2]

template<typename T, int Num>
template<typename S>
Sacado::mpl::enable_if< std::is_convertible< S, value_type >, Expr & >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator+= ( const S & v)
inline

Addition-assignment operator with constant right-hand-side.

References Expr(), and val().

◆ operator-=() [1/2]

template<typename T, int Num>
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, Expr & >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator-= ( const Expr< S > & x)
inline

Subtraction-assignment operator with Expr right-hand-side.

References dx_, Expr(), and val().

◆ operator-=() [2/2]

template<typename T, int Num>
template<typename S>
Sacado::mpl::enable_if< std::is_convertible< S, value_type >, Expr & >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator-= ( const S & v)
inline

Subtraction-assignment operator with constant right-hand-side.

References Expr(), and val().

◆ operator/=() [1/2]

template<typename T, int Num>
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, Expr & >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator/= ( const Expr< S > & x)
inline

Division-assignment operator with Expr right-hand-side.

References dx_, Expr(), and val_.

◆ operator/=() [2/2]

template<typename T, int Num>
template<typename S>
Sacado::mpl::enable_if< std::is_convertible< S, value_type >, Expr & >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator/= ( const S & v)
inline

Division-assignment operator with constant right-hand-side.

References dx_, Expr(), and val().

◆ operator=() [1/3]

template<typename T, int Num>
Expr & Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator= ( const Expr< SFadExprTag< T, Num > > & x)
inline

Assignment with Expr right-hand-side.

References dx_, Expr(), and val_.

◆ operator=() [2/3]

template<typename T, int Num>
template<typename S>
mpl::enable_if_c< std::is_convertible< typenameExpr< S >::value_type, value_type >::value &&ExprLevel< typenameExpr< S >::value_type >::value==ExprLevel< value_type >::value, Expr & >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator= ( const Expr< S > & x)
inline

Assignment operator with any expression right-hand-side.

References dx_, Expr(), and val().

◆ operator=() [3/3]

template<typename T, int Num>
template<typename S>
Sacado::mpl::enable_if< std::is_convertible< S, value_type >, Expr & >::type Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::operator= ( const S & v)
inline

Assignment operator with constant right-hand-side.

References dx_, Expr(), val_, and Sacado::ss_array< T, isScalar >::zero().

◆ resize()

template<typename T, int Num>
void Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::resize ( int sz)
inline

Resize derivative array to length sz.

Since the derivative array length is not dynamic, this method throws an error if compiled with SACADO_DEBUG defined.

Referenced by expand().

◆ size()

template<typename T, int Num>
int Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::size ( ) const
inline

Returns number of derivative components.

Referenced by isEqualTo().

◆ val() [1/2]

template<typename T, int Num>
T & Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::val ( )
inline

Returns value.

References val_.

◆ val() [2/2]

template<typename T, int Num>
const T & Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::val ( ) const
inline

Returns value.

References val_.

Referenced by Expr(), operator*=(), operator+=(), operator+=(), operator-=(), operator-=(), operator/=(), and operator=().

◆ zero()

template<typename T, int Num>
void Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::zero ( )
inline

Zero out the derivative array.

References dx_, and Sacado::ss_array< T, isScalar >::zero().

Member Data Documentation

◆ dx_

◆ val_

template<typename T, int Num>
T Sacado::ELRCacheFad::Expr< SFadExprTag< T, Num > >::val_
protected

The documentation for this class was generated from the following file: