Base class for all standard Jacobian tape implementations. More...
#include <jacobianBaseTape.hpp>
Classes | |
struct | PushDelayedJacobianLogic |
Pushes all delayed Jacobians. More... | |
struct | PushJacobianLogic |
Pushes Jacobians and indices to the tape. More... | |
struct | Wrap_internalEvaluateForward_EvalStatements |
Wrapper helper for improved compiler optimizations. More... | |
struct | Wrap_internalEvaluateReverse_EvalStatements |
Wrapper helper for improved compiler optimizations. More... | |
Public Types | |
using | Adjoints = typename TapeTypes::template Adjoints<Impl> |
See JacobianTapeTypes. | |
using | Base = CommonTapeImplementation<T_TapeTypes, T_Impl> |
Base class abbreviation. | |
using | Gradient = typename TapeTypes::Gradient |
See TapeTypesInterface. | |
using | Identifier = typename TapeTypes::Identifier |
See TapeTypesInterface. | |
using | Impl = T_Impl |
See JacobianBaseTape. | |
using | IndexManager = typename TapeTypes::IndexManager |
See JacobianTapeTypes. | |
using | JacobianData = typename TapeTypes::JacobianData |
See JacobianTapeTypes. | |
using | NestedPosition = typename JacobianData::Position |
See JacobianTapeTypes. | |
using | PassiveReal = RealTraits::PassiveReal<Real> |
Basic computation type. | |
using | Position = typename Base::Position |
See TapeTypesInterface. | |
using | Real = typename TapeTypes::Real |
See TapeTypesInterface. | |
using | StatementData = typename TapeTypes::StatementData |
See JacobianTapeTypes. | |
using | TapeTypes |
See JacobianBaseTape. | |
template<typename Adjoint > | |
using | VectorAccess |
Vector access type generated by this tape. | |
Public Types inherited from codi::CommonTapeImplementation< T_TapeTypes, T_Impl > | |
using | Gradient |
See TapeTypesInterface. | |
using | Identifier |
See TapeTypesInterface. | |
using | Impl |
See CommonTapeImplementation. | |
using | ImplTapeTypes |
See CommonTapeImplementation. | |
using | LowLevelFunctionByteData |
See CommonTapeTypes. | |
using | LowLevelFunctionInfoData |
See CommonTapeTypes. | |
using | NestedData |
Shorthand. | |
using | NestedPosition |
Shorthand. | |
using | Position |
See TapeTypesInterface. | |
using | Real |
See TapeTypesInterface. | |
Public Types inherited from codi::FullTapeInterface< T_Real, T_Gradient, T_Identifier, T_Position > | |
using | Gradient = T_Gradient |
See FullTapeInterface. | |
using | Identifier = T_Identifier |
See FullTapeInterface. | |
using | Position = T_Position |
See FullTapeInterface. | |
using | Real = T_Real |
See FullTapeInterface. | |
Public Types inherited from codi::CustomAdjointVectorEvaluationTapeInterface< T_Position > | |
using | Position = T_Position |
See CustomAdjointVectorEvaluationTapeInterface. | |
Public Types inherited from codi::ForwardEvaluationTapeInterface< T_Position > | |
using | Position = T_Position |
See ForwardEvaluationTapeInterface. | |
Public Types inherited from codi::PositionalEvaluationTapeInterface< T_Position > | |
using | Position = T_Position |
See PositionalEvaluationTapeInterface. | |
Public Types inherited from codi::DataManagementTapeInterface< T_Real, T_Identifier > | |
using | Identifier = T_Identifier |
See DataManagementTapeInterface. | |
using | Real = T_Real |
See DataManagementTapeInterface. | |
Public Types inherited from codi::ExternalFunctionTapeInterface< T_Real, T_Gradient, T_Identifier > | |
using | Gradient = T_Gradient |
See ExternalFunctionTapeInterface. | |
using | Identifier = T_Identifier |
See ExternalFunctionTapeInterface. | |
using | Real = T_Real |
See ExternalFunctionTapeInterface. | |
Public Types inherited from codi::GradientAccessTapeInterface< T_Gradient, T_Identifier > | |
using | Gradient = T_Gradient |
See GradientAccessTapeInterface. | |
using | Identifier = T_Identifier |
See GradientAccessTapeInterface. | |
Public Types inherited from codi::IdentifierInformationTapeInterface< T_Real, T_Gradient, T_Identifier > | |
using | Gradient = T_Gradient |
See IdentifierInformationTapeInterface. | |
using | Identifier = T_Identifier |
See IdentifierInformationTapeInterface. | |
using | Real = T_Real |
See IdentifierInformationTapeInterface. | |
Public Types inherited from codi::InternalStatementRecordingTapeInterface< T_Identifier > | |
using | Identifier = T_Identifier |
See InternalStatementRecordingTapeInterface. | |
Public Types inherited from codi::LowLevelFunctionTapeInterface< T_Real, T_Gradient, T_Identifier > | |
using | Gradient = T_Gradient |
See LowLevelFunctionTapeInterface. | |
using | Identifier = T_Identifier |
See LowLevelFunctionTapeInterface. | |
using | Real = T_Real |
See LowLevelFunctionTapeInterface. | |
Public Types inherited from codi::ManualStatementPushTapeInterface< T_Real, T_Gradient, T_Identifier > | |
using | Gradient = T_Gradient |
See ManualStatementPushTapeInterface. | |
using | Identifier = T_Identifier |
See ManualStatementPushTapeInterface. | |
using | Real = T_Real |
See ManualStatementPushTapeInterface. | |
Public Types inherited from codi::PreaccumulationEvaluationTapeInterface< T_Real, T_Gradient, T_Identifier, T_Position > | |
using | Gradient = T_Gradient |
See PreaccumulationEvaluationTapeInterface. | |
using | Identifier = T_Identifier |
See PreaccumulationEvaluationTapeInterface. | |
using | Position = T_Position |
See PreaccumulationEvaluationTapeInterface. | |
using | Real = T_Real |
See PreaccumulationEvaluationTapeInterface. | |
Public Types inherited from codi::PrimalEvaluationTapeInterface< T_Real, T_Identifier, T_Position > | |
using | Identifier = T_Identifier |
See PrimalEvaluationTapeInterface. | |
using | Position = T_Position |
See PrimalEvaluationTapeInterface. | |
using | Real = T_Real |
See PrimalEvaluationTapeInterface. | |
Public Types inherited from codi::ReverseTapeInterface< T_Real, T_Gradient, T_Identifier > | |
using | Gradient = T_Gradient |
See ReverseTapeInterface. | |
using | Identifier = T_Identifier |
See ReverseTapeInterface. | |
using | PassiveReal = RealTraits::PassiveReal<Real> |
Basic computation type. | |
using | Real = T_Real |
See ReverseTapeInterface. | |
Public Member Functions | |
JacobianBaseTape () | |
Constructor. | |
Functions from GradientAccessTapeInterface | |
Gradient & | gradient (Identifier const &identifier, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Reference access to gradient. | |
Gradient const & | gradient (Identifier const &identifier, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) const |
Constant reference access to gradient. | |
Functions from InternalStatementRecordingTapeInterface | |
template<typename Real > | |
void | initIdentifier (Real &value, Identifier &identifier) |
template<typename Real > | |
void | destroyIdentifier (Real &value, Identifier &identifier) |
Has to be called for each identifier, before it is deallocated. | |
template<typename Lhs , typename Rhs > | |
void | store (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &lhs, ExpressionInterface< Real, Rhs > const &rhs) |
Has to be called by an AD variable every time it is assigned. | |
template<typename Lhs , typename Rhs > | |
void | store (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &lhs, LhsExpressionInterface< Real, Gradient, Impl, Rhs > const &rhs) |
Has to be called by an AD variable every time it is assigned. | |
template<typename Lhs > | |
void | store (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &lhs, Real const &rhs) |
Has to be called by an AD variable every time it is assigned. | |
Functions from ReverseTapeInterface | |
template<typename Lhs > | |
void | registerInput (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &value) |
void | clearAdjoints (AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Clear all adjoint values, that is, set them to zero. | |
Functions from CustomAdjointVectorEvaluationTapeInterface | |
template<typename Adjoint > | |
void | evaluate (Position const &start, Position const &end, Adjoint *data) |
Perform a reverse evaluation for a part of the tape. It hast to hold start >= end. | |
template<typename Adjoint > | |
void | evaluateForward (Position const &start, Position const &end, Adjoint *data) |
Perform a reverse evaluation for a part of the tape. It hast to hold start >= end. | |
Functions from DataManagementTapeInterface | |
void | swap (Impl &other) |
Swap all data with an other tape. | |
void | deleteAdjointVector () |
Delete the adjoint vector. See Adjoint vector management. | |
void | resizeAdjointVector () |
Explicitly trigger resizing of the adjoint vector. See Adjoint vector management. | |
void | beginUseAdjointVector () |
Declare that the adjoint vector is being used. See Adjoint vector management. | |
void | endUseAdjointVector () |
Declare that the adjoint vector is no longer used. See Adjoint vector management. | |
size_t | getParameter (TapeParameters parameter) const |
See Parameters functions. | |
void | setParameter (TapeParameters parameter, size_t value) |
See Parameters functions. | |
VectorAccess< Gradient > * | createVectorAccess () |
See Adjoint vector access. | |
template<typename Adjoint > | |
VectorAccess< Adjoint > * | createVectorAccessCustomAdjoints (Adjoint *data) |
See Adjoint vector access. | |
void | deleteVectorAccess (VectorAccessInterface< Real, Identifier > *access) |
See Adjoint vector access. | |
Functions from ExternalFunctionTapeInterface | |
template<typename Lhs > | |
Real | registerExternalFunctionOutput (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &value) |
Functions from ForwardEvaluationTapeInterface | |
void | evaluateForward (Position const &start, Position const &end, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a forward evaluation of a part of the tape. It has to hold start <= end. | |
Functions from ManualStatementPushTapeInterface | |
void | pushJacobianManual (Real const &jacobian, Real const &value, Identifier const &index) |
void | storeManual (Real const &lhsValue, Identifier &lhsIndex, Config::ArgumentSize const &size) |
Functions from LowLevelFunctionTapeInterface | |
void | pushLowLevelFunction (Config::LowLevelFunctionToken token, size_t size, ByteDataView &data) |
Push a low level function to the tape. | |
Functions from PositionalEvaluationTapeInterface | |
void | evaluate (Position const &start, Position const &end, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a reverse evaluation for a part of the tape. It hast to hold start >= end. | |
Functions from PreaccumulationEvaluationTapeInterface | |
void | evaluateKeepState (Position const &start, Position const &end, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a tape evaluation but restore the state afterwards such that it is the same as when the evaluation started. It hast to hold start >= end. | |
void | evaluateForwardKeepState (Position const &start, Position const &end, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a tape evaluation but restore the state afterwards such that it is the same as when the evaluation started. It hast to hold start <= end. | |
Functions from PrimalEvaluationTapeInterface | |
void | evaluatePrimal (Position const &start, Position const &end) |
Not implemented, raises an exception. | |
Real & | primal (Identifier const &identifier) |
Not implemented, raises an exception. | |
Real | primal (Identifier const &identifier) const |
Not implemented, raises an exception. | |
Public Member Functions inherited from codi::CommonTapeImplementation< T_TapeTypes, T_Impl > | |
CommonTapeImplementation () | |
Constructor. | |
CommonTapeImplementation (CommonTapeImplementation &&)=delete | |
Do not allow move construction. Relevant use cases should be covered by swap. | |
CommonTapeImplementation (CommonTapeImplementation const &)=delete | |
Do not allow copy construction. | |
CommonTapeImplementation & | operator= (CommonTapeImplementation &&)=delete |
Do not allow move assignment. Relevant use cases should be covered by swap. | |
CommonTapeImplementation & | operator= (CommonTapeImplementation const &)=delete |
Do not allow copy assignment. | |
void | setGradient (Identifier const &identifier, Gradient const &gradient, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Set the gradient. | |
Gradient const & | getGradient (Identifier const &identifier, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) const |
Set the gradient. | |
void | evaluate (AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a full reverse evaluation of the tape. | |
void | registerOutput (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &value) |
void | setActive () |
Start/continue recording of statements. | |
void | setPassive () |
Stop/interrupt recording of statements. | |
bool | isActive () const |
Check if the tape is recording. | |
void | printStatistics (Stream &out=std::cout) const |
Default formatting of TapeValues. | |
void | printTableHeader (Stream &out=std::cout) const |
Table header output of TapeValues. | |
void | printTableRow (Stream &out=std::cout) const |
Table row output of TapeValues. | |
TapeValues | getTapeValues () const |
Get current tape values. | |
void | reset (bool resetAdjoints=true, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Reset the tape to the initial state for a fresh recording. | |
void | swap (Impl &other) |
Swap all data with an other tape. | |
void | resetHard () |
Delete everything and return to the state after construction, as far as possible. | |
void | writeToFile (const std::string &filename) |
See File IO functions. | |
void | readFromFile (const std::string &filename) |
See File IO functions. | |
void | deleteData () |
See File IO functions. | |
std::set< TapeParameters > const & | getAvailableParameters () const |
See Parameters functions. | |
size_t | getParameter (TapeParameters parameter) const |
See Parameters functions. | |
bool | hasParameter (TapeParameters parameter) const |
See Parameters functions. | |
void | setParameter (TapeParameters parameter, size_t value) |
See Parameters functions. | |
void | pushExternalFunction (ExternalFunction< Impl > const &extFunc) |
void | evaluateForward (AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a forward evaluation of a part of the tape. It has to hold start <= end. | |
Identifier | getPassiveIndex () const |
Identifier for passive values. Usually 0. | |
Identifier | getInvalidIndex () const |
Invalid identifier. | |
bool | isIdentifierActive (Identifier const &index) const |
void | deactivateValue (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &value) |
Position | getPosition () const |
Current position of the tape. | |
Position | getZeroPosition () const |
Initial position of the tape. | |
void | resetTo (Position const &pos, bool resetAdjoints=true, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Reset the tape to the provided position. | |
void | evaluatePrimal () |
Perform a full (forward) reevaluation of the primals in the tape. | |
void | setPrimal (Identifier const &identifier, Real const &primal) |
Set primal value. | |
Real const & | getPrimal (Identifier const &identifier) const |
Get primal value. | |
TemporaryMemory & | getTemporaryMemory () |
Temporary memory that can be used for dynamic data both during the evaluation and the recording. | |
Config::LowLevelFunctionToken | registerLowLevelFunction (LowLevelFunctionEntry< Impl, Real, Identifier > const &entry) |
Register a low level function on the tape. | |
Public Member Functions inherited from codi::CustomAdjointVectorEvaluationTapeInterface< T_Position > | |
template<typename Adjoint > | |
void | evaluate (Position const &start, Position const &end, Adjoint *data) |
Perform a reverse evaluation for a part of the tape. It hast to hold start >= end. | |
template<typename Adjoint > | |
void | evaluateForward (Position const &start, Position const &end, Adjoint *data) |
Perform a forward evaluation of a part of the tape. It has to hold start <= end. | |
Public Member Functions inherited from codi::ForwardEvaluationTapeInterface< T_Position > | |
void | evaluateForward (Position const &start, Position const &end, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a forward evaluation of a part of the tape. It has to hold start <= end. | |
void | evaluateForward (AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a forward evaluation of the full tape. | |
Public Member Functions inherited from codi::PositionalEvaluationTapeInterface< T_Position > | |
void | evaluate (Position const &start, Position const &end, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a reverse evaluation for a part of the tape. It hast to hold start >= end. | |
void | clearAdjoints (Position const &start, Position const &end, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Clear all adjoints that would be set in a tape evaluation from start to end. It has to hold start >= end. | |
Position | getPosition () const |
Current position of the tape. | |
Position | getZeroPosition () const |
Initial position of the tape. | |
void | resetTo (Position const &pos, bool resetAdjoints=true, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Reset the tape to the provided position. | |
Public Member Functions inherited from codi::DataManagementTapeInterface< T_Real, T_Identifier > | |
void | writeToFile (std::string const &filename) const |
See File IO functions. | |
void | readFromFile (std::string const &filename) |
See File IO functions. | |
void | deleteData () |
See File IO functions. | |
std::set< TapeParameters > const & | getAvailableParameters () const |
See Parameters functions. | |
size_t | getParameter (TapeParameters parameter) const |
See Parameters functions. | |
bool | hasParameter (TapeParameters parameter) const |
See Parameters functions. | |
void | setParameter (TapeParameters parameter, size_t value) |
See Parameters functions. | |
VectorAccessInterface< Real, Identifier > * | createVectorAccess () |
See Adjoint vector access. | |
template<typename Adjoint > | |
VectorAccessInterface< Real, Identifier > * | createVectorAccessCustomAdjoints (Adjoint *data) |
See Adjoint vector access. | |
void | deleteVectorAccess (VectorAccessInterface< Real, Identifier > *access) |
See Adjoint vector access. | |
void | resizeAdjointVector () |
Explicitly trigger resizing of the adjoint vector. See Adjoint vector management. | |
void | deleteAdjointVector () |
Delete the adjoint vector. See Adjoint vector management. | |
void | beginUseAdjointVector () |
Declare that the adjoint vector is being used. See Adjoint vector management. | |
void | endUseAdjointVector () |
Declare that the adjoint vector is no longer used. See Adjoint vector management. | |
void | swap (DataManagementTapeInterface &other) |
Swap all data with an other tape. | |
void | resetHard () |
Delete everything and return to the state after construction, as far as possible. | |
Public Member Functions inherited from codi::ExternalFunctionTapeInterface< T_Real, T_Gradient, T_Identifier > | |
template<typename Lhs , typename Tape > | |
Real | registerExternalFunctionOutput (LhsExpressionInterface< Real, Gradient, Tape, Lhs > &value) |
void | pushExternalFunction (ExternalFunction< ExternalFunctionTapeInterface > const &extFunc) |
Public Member Functions inherited from codi::GradientAccessTapeInterface< T_Gradient, T_Identifier > | |
void | setGradient (Identifier const &identifier, Gradient const &gradient, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Set the gradient. | |
Gradient const & | getGradient (Identifier const &identifier, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) const |
Set the gradient. | |
Gradient & | gradient (Identifier const &identifier, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Reference access to gradient. | |
Gradient const & | gradient (Identifier const &identifier, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) const |
Constant reference access to gradient. | |
Public Member Functions inherited from codi::IdentifierInformationTapeInterface< T_Real, T_Gradient, T_Identifier > | |
Identifier | getPassiveIndex () const |
Identifier for passive values. Usually 0. | |
Identifier | getInvalidIndex () const |
Invalid identifier. | |
bool | isIdentifierActive (Identifier const &index) const |
template<typename Lhs , typename Tape > | |
void | deactivateValue (LhsExpressionInterface< Real, Gradient, Tape, Lhs > &value) |
Public Member Functions inherited from codi::InternalStatementRecordingTapeInterface< T_Identifier > | |
template<typename Real > | |
void | initIdentifier (Real &value, Identifier &identifier) |
template<typename Real > | |
void | destroyIdentifier (Real &value, Identifier &identifier) |
Has to be called for each identifier, before it is deallocated. | |
template<typename Lhs , typename Rhs > | |
void | store (Lhs &lhs, Rhs const &rhs) |
Has to be called by an AD variable every time it is assigned. | |
Public Member Functions inherited from codi::LowLevelFunctionTapeInterface< T_Real, T_Gradient, T_Identifier > | |
TemporaryMemory & | getTemporaryMemory () |
Temporary memory that can be used for dynamic data both during the evaluation and the recording. | |
void | pushLowLevelFunction (Config::LowLevelFunctionToken token, size_t size, ByteDataView &data) |
Push a low level function to the tape. | |
Config::LowLevelFunctionToken | registerLowLevelFunction (LowLevelFunctionEntry< LowLevelFunctionTapeInterface, Real, Identifier > const &entry) |
Register a low level function on the tape. | |
Public Member Functions inherited from codi::ManualStatementPushTapeInterface< T_Real, T_Gradient, T_Identifier > | |
void | pushJacobianManual (Real const &jacobian, Real const &value, Identifier const &index) |
void | storeManual (Real const &lhsValue, Identifier &lhsIndex, Config::ArgumentSize const &size) |
Public Member Functions inherited from codi::PreaccumulationEvaluationTapeInterface< T_Real, T_Gradient, T_Identifier, T_Position > | |
void | evaluateKeepState (Position const &start, Position const &end, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a tape evaluation but restore the state afterwards such that it is the same as when the evaluation started. It hast to hold start >= end. | |
void | evaluateForwardKeepState (Position const &start, Position const &end, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a tape evaluation but restore the state afterwards such that it is the same as when the evaluation started. It hast to hold start <= end. | |
Public Member Functions inherited from codi::PrimalEvaluationTapeInterface< T_Real, T_Identifier, T_Position > | |
void | evaluatePrimal (Position const &start, Position const &end) |
Perform a partly (forward) reevaluation of the primals in the tape. It has to hold start <= end. | |
void | evaluatePrimal () |
Perform a full (forward) reevaluation of the primals in the tape. | |
void | setPrimal (Identifier const &identifier, Real const &gradient) |
Set primal value. | |
Real const & | getPrimal (Identifier const &identifier) const |
Get primal value. | |
Real & | primal (Identifier const &identifier) |
Writable reference to primal value. | |
Real const & | primal (Identifier const &identifier) const |
Read only reference to primal value. | |
void | revertPrimals (Position const &pos) |
Revert the primals to the state indicated by pos. | |
Public Member Functions inherited from codi::ReverseTapeInterface< T_Real, T_Gradient, T_Identifier > | |
template<typename Lhs , typename Tape > | |
void | registerInput (LhsExpressionInterface< Real, Gradient, Tape, Lhs > &value) |
template<typename Lhs , typename Tape > | |
void | registerOutput (LhsExpressionInterface< Real, Gradient, Tape, Lhs > &value) |
void | setActive () |
Start/continue recording of statements. | |
void | setPassive () |
Stop/interrupt recording of statements. | |
bool | isActive () const |
Check if the tape is recording. | |
void | evaluate (AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Perform a full reverse evaluation of the tape. | |
void | clearAdjoints (AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Clear all adjoint values, that is, set them to zero. | |
void | reset (bool resetAdjoints=true, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Reset the tape to the initial state for a fresh recording. | |
template<typename Stream = std::ostream> | |
void | printStatistics (Stream &out=std::cout) const |
Default formatting of TapeValues. | |
template<typename Stream = std::ostream> | |
void | printTableHeader (Stream &out=std::cout) const |
Table header output of TapeValues. | |
template<typename Stream = std::ostream> | |
void | printTableRow (Stream &out=std::cout) const |
Table row output of TapeValues. | |
TapeValues | getTapeValues () const |
Get current tape values. | |
Public Attributes | |
friend | Base |
Allow the base class to call protected and private methods. | |
Static Public Attributes | |
static bool constexpr | AllowJacobianOptimization = true |
See InternalStatementRecordingTapeInterface. | |
static bool constexpr | HasPrimalValues = false |
See PrimalEvaluationTapeInterface. | |
static bool constexpr | LinearIndexHandling |
See IdentifierInformationTapeInterface. | |
static bool constexpr | RequiresPrimalRestore = false |
See PrimalEvaluationTapeInterface. | |
Static Public Attributes inherited from codi::IdentifierInformationTapeInterface< T_Real, T_Gradient, T_Identifier > | |
static bool constexpr | LinearIndexHandling = false |
Static Public Attributes inherited from codi::InternalStatementRecordingTapeInterface< T_Identifier > | |
static bool constexpr | AllowJacobianOptimization |
If certain operations can be hidden from the tape. | |
Static Public Attributes inherited from codi::PrimalEvaluationTapeInterface< T_Real, T_Identifier, T_Position > | |
static bool constexpr | HasPrimalValues = false |
True if the tape has primal values. | |
static bool constexpr | RequiresPrimalRestore |
True if the primal state changes during a reverse or forward evaluation. | |
Protected Member Functions | |
TapeValues | internalGetTapeValues () const |
Adds data from all streams, the size of the adjoint vector and index manager data. | |
template<typename Lhs > | |
void | internalRegisterInput (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &value, bool unusedIndex) |
Add a new input to the tape. | |
template<typename Rhs > | |
void | pushJacobians (ExpressionInterface< Real, Rhs > const &rhs) |
Push Jacobians and delayed Jacobians to the tape. | |
Protected Member Functions inherited from codi::CommonTapeImplementation< T_TapeTypes, T_Impl > | |
void | deleteLowLevelFunctionData (Position const &pos) |
Delete all external function data up to pos . | |
void | incrementManualPushCounter () |
Increment the manual push counter. Check against the declared push goal. | |
void | initializeManualPushData (Real const &lhsValue, Identifier const &lhsIndex, size_t size) |
Initialize all manual push data, including the counter. Check that a previous manual store is completed. | |
TapeValues | internalGetTapeValues () const |
Create tape values. | |
void | init (typename ImplTapeTypes::NestedData *nested) |
Initialize the base class. | |
void | internalStoreLowLevelFunction (Config::LowLevelFunctionToken token, size_t size, ByteDataView &dataView) |
Called by the implementing tapes to store a low level function. The size is reserved and allocated. The data view is populated with the pointer and can be used to write the data. | |
Static Protected Member Functions | |
template<typename Adjoint > | |
static void | incrementAdjoints (Adjoint *adjointVector, Adjoint const &lhsAdjoint, Config::ArgumentSize const &numberOfArguments, size_t &curJacobianPos, Real const *const rhsJacobians, Identifier const *const rhsIdentifiers) |
Performs the AD reverse equation for a statement. | |
template<typename Adjoint > | |
static void | incrementTangents (Adjoint const *const adjointVector, Adjoint &lhsAdjoint, Config::ArgumentSize const &numberOfArguments, size_t &curJacobianPos, Real const *const rhsJacobians, Identifier const *const rhsIdentifiers) |
Performs the AD forward equation for a statement. | |
Static Protected Member Functions inherited from codi::CommonTapeImplementation< T_TapeTypes, T_Impl > | |
static void | callLowLevelFunction (Impl &impl, bool forward, size_t &curLLFByteDataPos, char *dataPtr, size_t &curLLFTInfoDataPos, Config::LowLevelFunctionToken *const tokenPtr, Config::LowLevelFunctionDataSize *const dataSizePtr, Args &&... args) |
Called by the implementing tapes during a tape evaluation when a low level function statement has been reached. | |
Protected Attributes | |
Adjoints | adjoints |
Evaluation vector for AD. | |
MemberStore< IndexManager, Impl, TapeTypes::IsStaticIndexHandler > | indexManager |
Index manager. | |
JacobianData | jacobianData |
Data stream for argument specific data. | |
StatementData | statementData |
Data stream for statement specific data. | |
Protected Attributes inherited from codi::CommonTapeImplementation< T_TapeTypes, T_Impl > | |
bool | active |
Whether or not the tape is in recording mode. | |
TemporaryMemory | allocator |
Allocator for temporary memory. | |
LowLevelFunctionByteData | llfByteData |
Byte data for low level functions. | |
LowLevelFunctionInfoData | llfInfoData |
Token and size data for low level functions. | |
size_t | manualPushCounter |
Count the pushes after storeManual, to identify the last push. | |
size_t | manualPushGoal |
Store the number of expected pushes after a storeManual call. | |
Identifier | manualPushLhsIdentifier |
For storeManual, remember the identifier assigned to the lhs. | |
Real | manualPushLhsValue |
For storeManual, remember the value assigned to the lhs. | |
std::set< TapeParameters > | options |
All options. | |
Interface definition | |
template<typename... Args> | |
static void | internalEvaluateForward_EvalStatements (Args &&... args) |
Perform a forward evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface. | |
template<typename... Args> | |
static void | internalEvaluateReverse_EvalStatements (Args &&... args) |
Perform a reverse evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface. | |
void | pushStmtData (Identifier const &index, Config::ArgumentSize const &numberOfArguments) |
Add statement specific data to the data streams. | |
Additional Inherited Members | |
Static Public Member Functions inherited from codi::LowLevelFunctionTapeInterface< T_Real, T_Gradient, T_Identifier > | |
template<LowLevelFunctionEntryCallKind callType, typename... Args> | |
static void | callLowLevelFunction (LowLevelFunctionTapeInterface &tape, bool forward, size_t &curLLFByteDataPos, char *dataPtr, size_t &curLLFInfoDataPos, Config::LowLevelFunctionToken *const tokenPtr, Config::LowLevelFunctionDataSize *const dataSizePtr, Args &&... args) |
Internal function for evaluating a low level function entry. | |
Static Protected Attributes inherited from codi::CommonTapeImplementation< T_TapeTypes, T_Impl > | |
static std::vector< LowLevelFunctionEntry< Impl, Real, Identifier > > * | lowLevelFunctionLookup |
Lookup table for low level function. | |
Base class for all standard Jacobian tape implementations.
This class provides nearly a full implementation of the FullTapeInterface. There are just a few internal methods left which have to be implemented by the final classes. These methods depend significantly on the index management scheme and are performance critical.
Tape evaluations are performed in several steps. Each methods calls the next method:
T_TapeTypes | has to implement JacobianTapeTypes. |
T_Impl | Type of the final implementation. |
using codi::JacobianBaseTape< T_TapeTypes, T_Impl >::TapeTypes |
See JacobianBaseTape.
using codi::JacobianBaseTape< T_TapeTypes, T_Impl >::VectorAccess |
Vector access type generated by this tape.
|
inline |
Declare that the adjoint vector is being used. See Adjoint vector management.
|
inline |
Clear all adjoint values, that is, set them to zero.
Automatic adjoints management involves locking, see AdjointsManagement for details.
|
inline |
|
inline |
|
inline |
Delete the adjoint vector. See Adjoint vector management.
|
inline |
|
inline |
Has to be called for each identifier, before it is deallocated.
|
inline |
Declare that the adjoint vector is no longer used. See Adjoint vector management.
|
inline |
Perform a reverse evaluation for a part of the tape. It hast to hold start >= end.
Automatic adjoints management involves bounds checking, resizing, and locking, see AdjointsManagement for details.
Adjoint | See CustomAdjointVectorEvaluationTapeInterface documentation. |
|
inline |
Perform a reverse evaluation for a part of the tape. It hast to hold start >= end.
Automatic adjoints management involves bounds checking, resizing, and locking, see AdjointsManagement for details.
|
inline |
Perform a reverse evaluation for a part of the tape. It hast to hold start >= end.
Automatic adjoints management involves bounds checking, resizing, and locking, see AdjointsManagement for details.
Adjoint | See CustomAdjointVectorEvaluationTapeInterface documentation. |
|
inline |
Perform a forward evaluation of a part of the tape. It has to hold start <= end.
Automatic adjoints management involves bounds checking, resizing, and locking, see AdjointsManagement for details.
|
inline |
Perform a tape evaluation but restore the state afterwards such that it is the same as when the evaluation started. It hast to hold start <= end.
Automatic adjoints management involves bounds checking, resizing, and locking, see AdjointsManagement for details.
|
inline |
Perform a tape evaluation but restore the state afterwards such that it is the same as when the evaluation started. It hast to hold start >= end.
Automatic adjoints management involves bounds checking, resizing, and locking, see AdjointsManagement for details.
|
inline |
See Parameters functions.
|
inline |
Reference access to gradient.
Automatic adjoints management involves bounds checking, resizing, and locking, see AdjointsManagement for details.
|
inline |
Constant reference access to gradient.
Automatic adjoints management involves bounds checking and locking. If no adjoint variable with the given identifier exists, a reference to adjoints[0] is returned. See AdjointsManagement for details.
|
inline |
Has to be called for each identifier, after it is allocated.
|
inline |
Push a Jacobian entry to the tape. storeManual() has to be called first and is passed the number of arguments. Afterwards, this method has to be called once for each argument.
jacobian | Jacobian of the argument . |
value | Value of the argument . Usually u_i.value() . |
index | Identifier of the argument . Usually u_i.identifier() . |
|
inline |
Push a low level function to the tape.
Allocates memory with the requested size on the byte data stream. data
is initialized for accessing this allocated memory. After the call, it can be used to write data to the data stream. token
is the token from registerLowLevelFunction.
See LowLevelFunctionTapeInterface for the expected data layout.
|
inline |
Register an external function output on the tape.
Lhs | Class that implements the LhsExpressionInterface. See also LhsExpressionInterface. |
Tape | Tape implementation used in the LhsExpressionInterface. See also LhsExpressionInterface. |
|
inline |
Mark a value as input (independent) and make it active.
Lhs | Class that implements the LhsExpressionInterface. See also LhsExpressionInterface. |
Tape | Tape implementation used in the LhsExpressionInterface. See also LhsExpressionInterface. |
|
inline |
Explicitly trigger resizing of the adjoint vector. See Adjoint vector management.
|
inline |
See Parameters functions.
|
inline |
Has to be called by an AD variable every time it is assigned.
Update of the value is performed by the tape. The tape will additionally store information, e.g., for the reversal of the statement.
Lhs | Has to implement LhsExpressionInterface. |
Rhs | Has to implement ExpressionInterface. |
|
inline |
Has to be called by an AD variable every time it is assigned.
Update of the value is performed by the tape. The tape will additionally store information, e.g., for the reversal of the statement.
Lhs | Has to implement LhsExpressionInterface. |
Rhs | Has to implement ExpressionInterface. Optimization for copy statements. |
|
inline |
Has to be called by an AD variable every time it is assigned.
Update of the value is performed by the tape. The tape will additionally store information, e.g., for the reversal of the statement.
Lhs | Has to implement LhsExpressionInterface. |
Rhs | Has to implement ExpressionInterface. Specialization for passive assignments. |
|
inline |
Initialize the storing of a hand computed statement. The primal value has to be updated already.
lhsValue | Value of the result . Usually w.value() . |
lhsIndex | Identifier of the result . Usually w.identifier() . |
size | Number of arguments of . |
|
inline |
Swap all data with an other tape.
|
staticconstexpr |