Base class for all standard Primal value tape implementations. More...
#include <primalValueBaseTape.hpp>
Classes | |
struct | CountActiveArguments |
Count all arguments that have non-zero index. More... | |
struct | IncrementForwardLogic |
Perform the adjoint update based on the configuration in codi::Config::VariableAdjointInterfaceInPrimalTapes. More... | |
struct | IncrementReversalLogic |
Perform the adjoint update based on the configuration in codi::Config::VariableAdjointInterfaceInPrimalTapes. More... | |
struct | JacobianExtractionLogic |
Computes Jacobian entries for the event system. More... | |
struct | JacobianStatementGenerator |
struct | PushIdentfierPassiveAndConstant |
Push all data for each argument. More... | |
struct | Wrap_internalEvaluateForward_EvalStatements |
Additional wrapper that triggers compiler optimizations. More... | |
struct | Wrap_internalEvaluatePrimal_EvalStatements |
Wrapper helper for improved compiler optimizations. More... | |
struct | Wrap_internalEvaluateReverse_EvalStatements |
Additional wrapper that triggers compiler optimizations. More... | |
Public Types | |
using | Base = CommonTapeImplementation<T_TapeTypes, T_Impl> |
Base class abbreviation. | |
using | ConstantValueData = typename TapeTypes::ConstantValueData |
See PrimalValueTapeTypes. | |
using | EvalHandle = typename TapeTypes::EvalHandle |
See PrimalValueTapeTypes. | |
using | Gradient = typename TapeTypes::Gradient |
See TapeTypesInterface. | |
using | Identifier = typename TapeTypes::Identifier |
See PrimalValueTapeTypes. | |
using | Impl = T_Impl |
See PrimalValueBaseTape. | |
using | IndexManager = typename TapeTypes::IndexManager |
See TapeTypesInterface. | |
using | NestedPosition = typename ConstantValueData::Position |
See PrimalValueTapeTypes. | |
using | PassiveReal = RealTraits::PassiveReal<Real> |
Basic computation type. | |
using | PassiveValueData = typename TapeTypes::PassiveValueData |
See PrimalValueTapeTypes. | |
using | Position = typename Base::Position |
See TapeTypesInterface. | |
using | Real = typename TapeTypes::Real |
See TapeTypesInterface. | |
using | RhsIdentifierData = typename TapeTypes::RhsIdentifierData |
See PrimalValueTapeTypes. | |
using | StatementData = typename TapeTypes::StatementData |
See PrimalValueTapeTypes. | |
using | StatementEvaluator = typename TapeTypes::StatementEvaluator |
See PrimalValueTapeTypes. | |
using | TapeTypes |
See PrimalValueBaseTape. | |
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 Types inherited from codi::StatementEvaluatorTapeInterface< T_TapeTypes::Real > | |
using | Real |
See StatementEvaluatorTapeInterface. | |
Public Types inherited from codi::StatementEvaluatorInnerTapeInterface< T_TapeTypes::Real > | |
using | Real |
See StatementEvaluatorInnerTapeInterface. | |
Public Member Functions | |
PrimalValueBaseTape () | |
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. | |
void | reset (bool resetAdjoints=true, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Reset the tape to the initial state for a fresh recording. | |
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 forward evaluation of a part of the tape. It has 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. | |
void | resetTo (Position const &pos, bool resetAdjoints=true, AdjointsManagement adjointsManagement=AdjointsManagement::Automatic) |
Reset the tape to the provided position. | |
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) |
Perform a full (forward) reevaluation of the primals in the tape. | |
Real & | primal (Identifier const &identifier) |
Writable reference to primal value. | |
Real const & | primal (Identifier const &identifier) const |
Read only reference to primal value. | |
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. | |
Static Public Member Functions | |
Function from StatementEvaluatorInnerTapeInterface | |
template<typename Rhs > | |
static Real | statementEvaluateForwardInner (Real *primalVector, Gradient *adjointVector, Gradient &lhsTangent, size_t &curConstantPos, PassiveReal const *const constantValues, size_t &curRhsIdentifiersPos, Identifier const *const rhsIdentifiers) |
Evaluate expression in a forward mode. | |
template<typename Func > | |
static Real | statementEvaluateForwardFull (Func const &evalInner, size_t const &maxActiveArgs, size_t const &maxConstantArgs, Real *primalVector, Gradient *adjointVector, Gradient &lhsTangent, Config::ArgumentSize numberOfPassiveArguments, size_t &curConstantPos, PassiveReal const *const constantValues, size_t &curPassivePos, Real const *const passiveValues, size_t &curRhsIdentifiersPos, Identifier const *const rhsIdentifiers) |
Load the expression data and evaluate the expression in a forward mode. | |
template<typename Rhs > | |
static Real | statementEvaluatePrimalInner (Real *primalVector, size_t &curConstantPos, PassiveReal const *const constantValues, size_t &curRhsIdentifiersPos, Identifier const *const rhsIdentifiers) |
Evaluate expression in a primal setting. | |
template<typename Func > | |
static Real | statementEvaluatePrimalFull (Func const &evalInner, size_t const &maxActiveArgs, size_t const &maxConstantArgs, Real *primalVector, Config::ArgumentSize numberOfPassiveArguments, size_t &curConstantPos, PassiveReal const *const constantValues, size_t &curPassivePos, Real const *const passiveValues, size_t &curRhsIdentifiersPos, Identifier const *const rhsIdentifiers) |
Load the expression data and evaluate the expression in a primal setting. | |
template<typename Rhs > | |
static void | statementEvaluateReverseInner (Real *primalVector, Gradient *adjointVector, Gradient lhsAdjoint, size_t &curConstantPos, PassiveReal const *const constantValues, size_t &curRhsIdentifiersPos, Identifier const *const rhsIdentifiers) |
Evaluate expression in a reverse mode. | |
template<typename Func > | |
static void | statementEvaluateReverseFull (Func const &evalInner, size_t const &maxActiveArgs, size_t const &maxConstantArgs, Real *primalVector, Gradient *adjointVector, Gradient lhsAdjoint, Config::ArgumentSize numberOfPassiveArguments, size_t &curConstantPos, PassiveReal const *const constantValues, size_t &curPassivePos, Real const *const passiveValues, size_t &curRhsIdentifiersPos, Identifier const *const rhsIdentifiers) |
Load the expression data and evaluate the expression in a reverse mode. | |
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 Public Member Functions inherited from codi::StatementEvaluatorTapeInterface< T_TapeTypes::Real > | |
static Real | statementEvaluateForward (Args &&... args) |
Evaluate expression in a forward mode. | |
static Real | statementEvaluatePrimal (Args &&... args) |
Evaluate primal expression. | |
static void | statementEvaluateReverse (Args &&... args) |
Evaluate expression in a reverse mode. | |
Static Public Member Functions inherited from codi::StatementEvaluatorInnerTapeInterface< T_TapeTypes::Real > | |
static Real | statementEvaluateForwardFull (Func const &inner, size_t const &maxActiveArgs, size_t const &maxConstantArgs, Args &&... args) |
Load the expression data and evaluate the expression in a forward mode. | |
static Real | statementEvaluatePrimalFull (Func const &inner, size_t const &maxActiveArgs, size_t const &maxConstantArgs, Args &&... args) |
Load the expression data and evaluate the expression in a primal setting. | |
static void | statementEvaluateReverseFull (Func const &inner, size_t const &maxActiveArgs, size_t const &maxConstantArgs, Args &&... args) |
Load the expression data and evaluate the expression in a reverse mode. | |
static Real | statementEvaluateForwardInner (Args &&... args) |
Evaluate expression in a forward mode. | |
static Real | statementEvaluatePrimalInner (Args &&... args) |
Evaluate expression in a primal setting. | |
static void | statementEvaluateReverseInner (Args &&... args) |
Evaluate expression in a reverse mode. | |
Public Attributes | |
friend | Base |
Allow the base class to call protected and private methods. | |
Static Public Attributes | |
static bool constexpr | AllowJacobianOptimization = false |
See InternalStatementRecordingTapeInterface. | |
static bool constexpr | HasPrimalValues = true |
See PrimalEvaluationTapeInterface. | |
static bool constexpr | LinearIndexHandling |
See IdentifierInformationTapeInterface. | |
static bool constexpr | RequiresPrimalRestore |
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 | |
template<bool copyPrimal, typename Adjoint > | |
void | internalEvaluateForward (Position const &start, Position const &end, Adjoint *data) |
Internal method for the forward evaluation of the whole tape. | |
template<bool copyPrimal, typename Adjoint > | |
void | internalEvaluateReverse (Position const &start, Position const &end, Adjoint *data) |
Internal method for the reverse evaluation of the whole tape. | |
TapeValues | internalGetTapeValues () const |
template<typename Lhs > | |
Real | internalRegisterInput (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &value, bool unusedIndex) |
Add a new input to the tape and update the primal value vector. | |
template<typename Adjoint > | |
Gradient * | selectAdjointVector (VectorAccess< Adjoint > *vectorAccess, Adjoint *data) |
Select the configured adjoint vector, see codi::Config::VariableAdjointInterfaceInPrimalTapes. | |
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. | |
Protected Attributes | |
std::vector< Gradient > | adjoints |
Evaluation vector for AD. | |
ConstantValueData | constantValueData |
Data stream for constant argument data. | |
MemberStore< IndexManager, Impl, TapeTypes::IsStaticIndexHandler > | indexManager |
Index manager. | |
PassiveValueData | passiveValueData |
Data stream for passive argument value data. | |
std::vector< Real > | primals |
Current state of primal values in the program. | |
std::vector< Real > | primalsCopy |
Copy of primal values for AD evaluations. | |
RhsIdentifierData | rhsIdentiferData |
Data stream for argument identifier 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. | |
Static Protected Attributes | |
static EvalHandle const | jacobianExpressions [Config::MaxArgumentSize] |
Expressions for manual statement pushes. | |
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. | |
Function from StatementEvaluatorTapeInterface | |
template<typename Rhs > | |
static Real | statementEvaluateForward (Real *primalVector, Gradient *adjointVector, Gradient &lhsTangent, Config::ArgumentSize numberOfPassiveArguments, size_t &curConstantPos, PassiveReal const *const constantValues, size_t &curPassivePos, Real const *const passiveValues, size_t &curRhsIdentifiersPos, Identifier const *const rhsIdentifiers) |
Evaluate expression in a forward mode. | |
template<typename Rhs > | |
static Real | statementEvaluatePrimal (Real *primalVector, Config::ArgumentSize numberOfPassiveArguments, size_t &curConstantPos, PassiveReal const *const constantValues, size_t &curPassivePos, Real const *const passiveValues, size_t &curRhsIdentifiersPos, Identifier const *const rhsIdentifiers) |
Evaluate primal expression. | |
template<typename Rhs > | |
static void | statementEvaluateReverse (Real *primalVector, Gradient *adjointVector, Gradient lhsAdjoint, Config::ArgumentSize numberOfPassiveArguments, size_t &curConstantPos, PassiveReal const *const constantValues, size_t &curPassivePos, Real const *const passiveValues, size_t &curRhsIdentifiersPos, Identifier const *const rhsIdentifiers) |
Evaluate expression in a reverse mode. | |
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 | internalEvaluatePrimal_EvalStatements (Args &&... args) |
Perform a primal 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 | internalResetPrimalValues (Position const &pos) |
Reset the primal values to the given position. | |
void | pushStmtData (Identifier const &index, Config::ArgumentSize const &numberOfPassiveArguments, Real const &oldPrimalValue, EvalHandle evalHandle) |
Add statement specific data to the data streams. | |
Additional Inherited Members | |
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. | |
Base class for all standard Primal value tape implementations.
This class provides nearly a full implementation of the FullTapeInterface. There are just a few internal methods left which need 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 | needs to implement PrimalValueTapeTypes. |
T_Impl | Type of the final implementations |
using codi::PrimalValueBaseTape< T_TapeTypes, T_Impl >::TapeTypes |
See PrimalValueBaseTape.
using codi::PrimalValueBaseTape< 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.
Implementation: Empty since primal value tapes do not implement adjoints locking.
|
inline |
Clear all adjoint values, that is, set them to zero.
Automatic adjoints management involves locking, see AdjointsManagement for details.
Implementation: Automatic adjoints management has no effect. Primal value tapes do not implement adjoints locking.
|
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.
Implementation: Empty since primal value tapes do not implement adjoints locking.
|
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.
Implementation: Automatic adjoints management only involves bounds checking and resizing. Primal value tapes do not implement adjoints locking.
|
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.
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.
Implementation: Automatic adjoints management only involves bounds checking and resizing. Primal value tapes do not implement adjoints locking.
|
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.
Implementation: Automatic adjoints management only involves bounds checking and resizing. Primal value tapes do not implement adjoints locking.
|
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.
Implementation: Automatic adjoints management only involves bounds checking and resizing. Primal value tapes do not implement adjoints locking.
|
inline |
Perform a full (forward) reevaluation of the primals in the tape.
|
inline |
See Parameters functions.
|
inline |
Reference access to gradient.
Automatic adjoints management involves bounds checking, resizing, and locking, see AdjointsManagement for details.
Implementation: Automatic adjoints management only involves bounds checking and resizing. Primal value tapes do not implement adjoints locking.
|
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.
Implementation: Automatic adjoints management only involves bounds checking. Primal value tapes do not implement adjoints locking.
|
inline |
Has to be called for each identifier, after it is allocated.
|
inlineprotected |
Adds data from all streams, the size of the adjoint vector, the size of the primal vector, and index manager data.
|
inline |
Writable reference to primal value.
|
inline |
Read only reference to primal value.
|
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 |
Reset the tape to the initial state for a fresh recording.
See Tutorial 5 - Repeated tape recordings for remarks on repeated tape recording in CoDiPack.
Automatic adjoints management involves locking, see AdjointsManagement for details.
Implementation: Automatic adjoints management has no effect. Primal value tapes do not implement adjoints locking.
|
inline |
Reset the tape to the provided position.
Automatic adjoints management involves locking, see AdjointsManagement for details.
Implementation: Automatic adjoints management has no effect. Primal value tapes do not implement adjoints locking.
|
inline |
Explicitly trigger resizing of the adjoint vector. See Adjoint vector management.
|
inline |
See Parameters functions.
|
inlinestatic |
Evaluate expression in a forward mode.
|
inlinestatic |
Load the expression data and evaluate the expression in a forward mode.
|
inlinestatic |
Evaluate expression in a forward mode.
|
inlinestatic |
Evaluate primal expression.
|
inlinestatic |
Load the expression data and evaluate the expression in a primal setting.
|
inlinestatic |
Evaluate expression in a primal setting.
|
inlinestatic |
Evaluate expression in a reverse mode.
|
inlinestatic |
Load the expression data and evaluate the expression in a reverse mode.
|
inlinestatic |
Evaluate expression in a reverse mode.
|
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 |
|
staticconstexpr |