Mundy: Multibody Nonlocal Dynamics Version of the Day
Loading...
Searching...
No Matches
mundy::AutoDiffScalar< T, N > Class Template Reference

A forward-mode autodiff scalar over passive real type T with N tracked derivatives. More...

#include <AutoDiffScalar.hpp>

Inheritance diagram for mundy::AutoDiffScalar< T, N >:
[legend]

Public Member Functions

Constructors and destructor
constexpr AutoDiffScalar ()=default
 Default constructor. Value and derivatives are uninitialized.
constexpr AutoDiffScalar (const T &value)
 Construct a constant: the given value with zero derivatives.
constexpr AutoDiffScalar (const T &value, const Vector< T, N > &derivatives)
 Construct from a value and an explicit derivative vector.
constexpr AutoDiffScalar (const T &value, size_t index)
 Construct an independent variable: the given value with a unit derivative in slot index.
constexpr ~AutoDiffScalar ()=default
constexpr AutoDiffScalar (const AutoDiffScalar &)=default
constexpr AutoDiffScalar (AutoDiffScalar &&)=default
constexpr AutoDiffScalaroperator= (const AutoDiffScalar &)=default
constexpr AutoDiffScalaroperator= (AutoDiffScalar &&)=default
Accessors
constexpr const T & value () const
 The underlying value.
constexpr T & value ()
constexpr const Vector< T, N > & derivatives () const
 The derivative vector.
constexpr Vector< T, N > & derivatives ()
Arithmetic with another AutoDiffScalar
constexpr AutoDiffScalar operator- () const
constexpr AutoDiffScalar operator+ (const AutoDiffScalar &o) const
constexpr AutoDiffScalar operator- (const AutoDiffScalar &o) const
constexpr AutoDiffScalar operator* (const AutoDiffScalar &o) const
 Product rule: (u v)' = u' v + u v'.
constexpr AutoDiffScalar operator/ (const AutoDiffScalar &o) const
 Quotient rule: (u / v)' = (u' - (u/v) v') / v.
constexpr AutoDiffScalaroperator+= (const AutoDiffScalar &o)
constexpr AutoDiffScalaroperator-= (const AutoDiffScalar &o)
constexpr AutoDiffScalaroperator*= (const AutoDiffScalar &o)
constexpr AutoDiffScalaroperator/= (const AutoDiffScalar &o)
Arithmetic with a passive value
constexpr AutoDiffScalar operator+ (const T &s) const
constexpr AutoDiffScalar operator- (const T &s) const
constexpr AutoDiffScalar operator* (const T &s) const
constexpr AutoDiffScalar operator/ (const T &s) const
constexpr AutoDiffScalaroperator+= (const T &s)
constexpr AutoDiffScalaroperator-= (const T &s)
constexpr AutoDiffScalaroperator*= (const T &s)
constexpr AutoDiffScalaroperator/= (const T &s)

Type aliases

using value_type = T
 The passive value type.
using derivative_type = Vector<T, N>
 The derivative storage type.
static constexpr size_t num_derivatives = N
 The number of tracked derivatives.

Detailed Description

template<typename T, size_t N>
class mundy::AutoDiffScalar< T, N >

The value is a T; the derivatives are a Vector<T,N>, one slot per independent variable. Arithmetic and math operations carry both forward by the chain rule.

Template Parameters
TThe passive (non-differentiated) real type, e.g. double.
NThe number of independent variables whose derivatives are tracked.

Member Typedef Documentation

◆ value_type

template<typename T, size_t N>
using mundy::AutoDiffScalar< T, N >::value_type = T

◆ derivative_type

template<typename T, size_t N>
using mundy::AutoDiffScalar< T, N >::derivative_type = Vector<T, N>

Constructor & Destructor Documentation

◆ AutoDiffScalar() [1/6]

template<typename T, size_t N>
mundy::AutoDiffScalar< T, N >::AutoDiffScalar ( )
constexprdefault

◆ AutoDiffScalar() [2/6]

template<typename T, size_t N>
mundy::AutoDiffScalar< T, N >::AutoDiffScalar ( const T & value)
inlineconstexpr

◆ AutoDiffScalar() [3/6]

template<typename T, size_t N>
mundy::AutoDiffScalar< T, N >::AutoDiffScalar ( const T & value,
const Vector< T, N > & derivatives )
inlineconstexpr

◆ AutoDiffScalar() [4/6]

template<typename T, size_t N>
mundy::AutoDiffScalar< T, N >::AutoDiffScalar ( const T & value,
size_t index )
inlineconstexpr

◆ ~AutoDiffScalar()

template<typename T, size_t N>
mundy::AutoDiffScalar< T, N >::~AutoDiffScalar ( )
constexprdefault

◆ AutoDiffScalar() [5/6]

template<typename T, size_t N>
mundy::AutoDiffScalar< T, N >::AutoDiffScalar ( const AutoDiffScalar< T, N > & )
constexprdefault

◆ AutoDiffScalar() [6/6]

template<typename T, size_t N>
mundy::AutoDiffScalar< T, N >::AutoDiffScalar ( AutoDiffScalar< T, N > && )
constexprdefault

Member Function Documentation

◆ operator=() [1/2]

template<typename T, size_t N>
AutoDiffScalar & mundy::AutoDiffScalar< T, N >::operator= ( const AutoDiffScalar< T, N > & )
constexprdefault

◆ operator=() [2/2]

template<typename T, size_t N>
AutoDiffScalar & mundy::AutoDiffScalar< T, N >::operator= ( AutoDiffScalar< T, N > && )
constexprdefault

◆ value() [1/2]

template<typename T, size_t N>
const T & mundy::AutoDiffScalar< T, N >::value ( ) const
inlineconstexpr

◆ value() [2/2]

template<typename T, size_t N>
T & mundy::AutoDiffScalar< T, N >::value ( )
inlineconstexpr

◆ derivatives() [1/2]

template<typename T, size_t N>
const Vector< T, N > & mundy::AutoDiffScalar< T, N >::derivatives ( ) const
inlineconstexpr

◆ derivatives() [2/2]

template<typename T, size_t N>
Vector< T, N > & mundy::AutoDiffScalar< T, N >::derivatives ( )
inlineconstexpr

◆ operator-() [1/3]

template<typename T, size_t N>
AutoDiffScalar mundy::AutoDiffScalar< T, N >::operator- ( ) const
inlineconstexpr

◆ operator+() [1/2]

template<typename T, size_t N>
AutoDiffScalar mundy::AutoDiffScalar< T, N >::operator+ ( const AutoDiffScalar< T, N > & o) const
inlineconstexpr

◆ operator-() [2/3]

template<typename T, size_t N>
AutoDiffScalar mundy::AutoDiffScalar< T, N >::operator- ( const AutoDiffScalar< T, N > & o) const
inlineconstexpr

◆ operator*() [1/2]

template<typename T, size_t N>
AutoDiffScalar mundy::AutoDiffScalar< T, N >::operator* ( const AutoDiffScalar< T, N > & o) const
inlineconstexpr

◆ operator/() [1/2]

template<typename T, size_t N>
AutoDiffScalar mundy::AutoDiffScalar< T, N >::operator/ ( const AutoDiffScalar< T, N > & o) const
inlineconstexpr

◆ operator+=() [1/2]

template<typename T, size_t N>
AutoDiffScalar & mundy::AutoDiffScalar< T, N >::operator+= ( const AutoDiffScalar< T, N > & o)
inlineconstexpr

◆ operator-=() [1/2]

template<typename T, size_t N>
AutoDiffScalar & mundy::AutoDiffScalar< T, N >::operator-= ( const AutoDiffScalar< T, N > & o)
inlineconstexpr

◆ operator*=() [1/2]

template<typename T, size_t N>
AutoDiffScalar & mundy::AutoDiffScalar< T, N >::operator*= ( const AutoDiffScalar< T, N > & o)
inlineconstexpr

◆ operator/=() [1/2]

template<typename T, size_t N>
AutoDiffScalar & mundy::AutoDiffScalar< T, N >::operator/= ( const AutoDiffScalar< T, N > & o)
inlineconstexpr

◆ operator+() [2/2]

template<typename T, size_t N>
AutoDiffScalar mundy::AutoDiffScalar< T, N >::operator+ ( const T & s) const
inlineconstexpr

◆ operator-() [3/3]

template<typename T, size_t N>
AutoDiffScalar mundy::AutoDiffScalar< T, N >::operator- ( const T & s) const
inlineconstexpr

◆ operator*() [2/2]

template<typename T, size_t N>
AutoDiffScalar mundy::AutoDiffScalar< T, N >::operator* ( const T & s) const
inlineconstexpr

◆ operator/() [2/2]

template<typename T, size_t N>
AutoDiffScalar mundy::AutoDiffScalar< T, N >::operator/ ( const T & s) const
inlineconstexpr

◆ operator+=() [2/2]

template<typename T, size_t N>
AutoDiffScalar & mundy::AutoDiffScalar< T, N >::operator+= ( const T & s)
inlineconstexpr

◆ operator-=() [2/2]

template<typename T, size_t N>
AutoDiffScalar & mundy::AutoDiffScalar< T, N >::operator-= ( const T & s)
inlineconstexpr

◆ operator*=() [2/2]

template<typename T, size_t N>
AutoDiffScalar & mundy::AutoDiffScalar< T, N >::operator*= ( const T & s)
inlineconstexpr

◆ operator/=() [2/2]

template<typename T, size_t N>
AutoDiffScalar & mundy::AutoDiffScalar< T, N >::operator/= ( const T & s)
inlineconstexpr

Member Data Documentation

◆ num_derivatives

template<typename T, size_t N>
size_t mundy::AutoDiffScalar< T, N >::num_derivatives = N
staticconstexpr