CoDiPack  2.2.0
A Code Differentiation Package
SciComp TU Kaiserslautern
Loading...
Searching...
No Matches
codi::PrimalValueReuseTape< T_TapeTypes > Struct Template Reference

Final implementation for a primal value tape with a reuse index management. More...

#include <primalValueReuseTape.hpp>

Inheritance diagram for codi::PrimalValueReuseTape< T_TapeTypes >:

Public Types

using Base = PrimalValueBaseTape<T_TapeTypes, PrimalValueReuseTape<T_TapeTypes>>
 Base class abbreviation.
 
using EvalHandle = typename TapeTypes::EvalHandle
 See PrimalValueTapeTypes.
 
using Gradient = typename TapeTypes::Gradient
 See TapeTypesInterface.
 
using Identifier = typename TapeTypes::Identifier
 See TapeTypesInterface.
 
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 PrimalValueTapeTypes.
 
using StatementEvaluator = typename TapeTypes::StatementEvaluator
 See PrimalValueTapeTypes.
 
using TapeTypes
 See PrimalValueReuseTape.
 
- Public Types inherited from codi::PrimalValueBaseTape< T_TapeTypes, PrimalValueReuseTape< T_TapeTypes > >
using Base
 Base class abbreviation.
 
using ConstantValueData
 See PrimalValueTapeTypes.
 
using EvalHandle
 See PrimalValueTapeTypes.
 
using Gradient
 See TapeTypesInterface.
 
using Identifier
 See PrimalValueTapeTypes.
 
using Impl
 See PrimalValueBaseTape.
 
using IndexManager
 See TapeTypesInterface.
 
using NestedPosition
 See PrimalValueTapeTypes.
 
using PassiveReal
 Basic computation type.
 
using PassiveValueData
 See PrimalValueTapeTypes.
 
using Position
 See TapeTypesInterface.
 
using Real
 See TapeTypesInterface.
 
using RhsIdentifierData
 See PrimalValueTapeTypes.
 
using StatementData
 See PrimalValueTapeTypes.
 
using StatementEvaluator
 See PrimalValueTapeTypes.
 
using TapeTypes
 See PrimalValueBaseTape.
 
using VectorAccess
 Vector access type generated by this tape.
 
- Public Types inherited from codi::CommonTapeImplementation< T_ImplTapeTypes, T_Impl >
using Gradient = typename ImplTapeTypes::Gradient
 See TapeTypesInterface.
 
using Identifier = typename ImplTapeTypes::Identifier
 See TapeTypesInterface.
 
using Impl = T_Impl
 See CommonTapeImplementation.
 
using ImplTapeTypes = T_ImplTapeTypes
 See CommonTapeImplementation.
 
using LowLevelFunctionByteData = typename CommonTapeTypes<ImplTapeTypes>::LowLevelFunctionByteData
 See CommonTapeTypes.
 
using LowLevelFunctionInfoData = typename CommonTapeTypes<ImplTapeTypes>::LowLevelFunctionInfoData
 See CommonTapeTypes.
 
using NestedData = LowLevelFunctionByteData
 Shorthand.
 
using NestedPosition = typename LowLevelFunctionByteData::Position
 Shorthand.
 
using Position = typename CommonTapeTypes<ImplTapeTypes>::Position
 See TapeTypesInterface.
 
using Real = typename ImplTapeTypes::Real
 See TapeTypesInterface.
 
- Public Types inherited from codi::FullTapeInterface< T_ImplTapeTypes::Real, T_ImplTapeTypes::Gradient, T_ImplTapeTypes::Identifier, CommonTapeTypes< T_ImplTapeTypes >::Position >
using Gradient
 See FullTapeInterface.
 
using Identifier
 See FullTapeInterface.
 
using Position
 See FullTapeInterface.
 
using 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

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.
 
 PrimalValueReuseTape ()
 Constructor.
 
void revertPrimals (Position const &pos)
 Revert the primals to the state indicated by pos.
 
- Public Member Functions inherited from codi::PrimalValueBaseTape< T_TapeTypes, PrimalValueReuseTape< T_TapeTypes > >
 PrimalValueBaseTape ()
 Constructor.
 
Gradientgradient (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.
 
void initIdentifier (Real &value, Identifier &identifier)
 
void destroyIdentifier (Real &value, Identifier &identifier)
 Has to be called for each identifier, before it is deallocated.
 
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.
 
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.

 
void store (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &lhs, Real const &rhs)
 Has to be called by an AD variable every time it is assigned.

 
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.
 
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.
 
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.
 
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.
 
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 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.
 
VectorAccess< Adjoint > * createVectorAccessCustomAdjoints (Adjoint *data)
 See Adjoint vector access.
 
void deleteVectorAccess (VectorAccessInterface< Real, Identifier > *access)
 See Adjoint vector access.
 
Real registerExternalFunctionOutput (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &value)
 
void pushJacobianManual (Real const &jacobian, Real const &value, Identifier const &index)
 
void storeManual (Real const &lhsValue, Identifier &lhsIndex, Config::ArgumentSize const &size)
 
void pushLowLevelFunction (Config::LowLevelFunctionToken token, size_t size, ByteDataView &data)
 Push a low level function to the tape.
 
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.
 
void evaluatePrimal (Position const &start, Position const &end)
 Perform a full (forward) reevaluation of the primals in the tape.
 
Realprimal (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_ImplTapeTypes, 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.
 
CommonTapeImplementationoperator= (CommonTapeImplementation &&)=delete
 Do not allow move assignment. Relevant use cases should be covered by swap.
 
CommonTapeImplementationoperator= (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.
 
template<typename Lhs >
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.
 
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.
 
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
 
template<typename Lhs >
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.
 
TemporaryMemorygetTemporaryMemory ()
 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.
 
Gradientgradient (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 >
TemporaryMemorygetTemporaryMemory ()
 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.
 
Realprimal (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.
 
- Public Attributes inherited from codi::PrimalValueBaseTape< T_TapeTypes, PrimalValueReuseTape< T_TapeTypes > >
friend Base
 Allow the base class to call protected and private methods.
 

Protected Member Functions

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.
 
- Protected Member Functions inherited from codi::PrimalValueBaseTape< T_TapeTypes, PrimalValueReuseTape< T_TapeTypes > >
void internalEvaluateForward (Position const &start, Position const &end, Adjoint *data)
 Internal method for the forward evaluation of the whole tape.
 
void internalEvaluateReverse (Position const &start, Position const &end, Adjoint *data)
 Internal method for the reverse evaluation of the whole tape.
 
TapeValues internalGetTapeValues () const
 
Real internalRegisterInput (LhsExpressionInterface< Real, Gradient, Impl, Lhs > &value, bool unusedIndex)
 Add a new input to the tape and update the primal value vector.
 
GradientselectAdjointVector (VectorAccess< Adjoint > *vectorAccess, Adjoint *data)
 Select the configured adjoint vector, see codi::Config::VariableAdjointInterfaceInPrimalTapes.
 
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.
 
- Protected Member Functions inherited from codi::CommonTapeImplementation< T_ImplTapeTypes, 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

static void internalEvaluateForward_EvalStatements (PrimalValueReuseTape &tape, Real *primalVector, Gradient *adjointVector, size_t &curLLFByteDataPos, size_t const &endLLFByteDataPos, char *dataPtr, size_t &curLLFInfoDataPos, size_t const &endLLFInfoDataPos, Config::LowLevelFunctionToken *const tokenPtr, Config::LowLevelFunctionDataSize *const dataSizePtr, size_t &curConstantPos, size_t const &endConstantPos, PassiveReal const *const constantValues, size_t &curPassivePos, size_t const &endPassivePos, Real const *const passiveValues, size_t &curRhsIdentifiersPos, size_t const &endRhsIdentifiersPos, Identifier const *const rhsIdentifiers, size_t &curStatementPos, size_t const &endStatementPos, Identifier const *const lhsIdentifiers, Config::ArgumentSize const *const numberOfPassiveArguments, Real *const oldPrimalValues, EvalHandle const *const stmtEvalhandle)
 Perform a forward evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface.
 
static void internalEvaluatePrimal_EvalStatements (PrimalValueReuseTape &tape, Real *primalVector, size_t &curLLFByteDataPos, size_t const &endLLFByteDataPos, char *dataPtr, size_t &curLLFInfoDataPos, size_t const &endLLFInfoDataPos, Config::LowLevelFunctionToken *const tokenPtr, Config::LowLevelFunctionDataSize *const dataSizePtr, size_t &curConstantPos, size_t const &endConstantPos, PassiveReal const *const constantValues, size_t &curPassivePos, size_t const &endPassivePos, Real const *const passiveValues, size_t &curRhsIdentifiersPos, size_t const &endRhsIdentifiersPos, Identifier const *const rhsIdentifiers, size_t &curStatementPos, size_t const &endStatementPos, Identifier const *const lhsIdentifiers, Config::ArgumentSize const *const numberOfPassiveArguments, Real *const oldPrimalValues, EvalHandle const *const stmtEvalhandle)
 Perform a primal evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface.
 
static void internalEvaluateReverse_EvalStatements (PrimalValueReuseTape &tape, Real *primalVector, Gradient *adjointVector, size_t &curLLFByteDataPos, size_t const &endLLFByteDataPos, char *dataPtr, size_t &curLLFInfoDataPos, size_t const &endLLFInfoDataPos, Config::LowLevelFunctionToken *const tokenPtr, Config::LowLevelFunctionDataSize *const dataSizePtr, size_t &curConstantPos, size_t const &endConstantPos, PassiveReal const *const constantValues, size_t &curPassivePos, size_t const &endPassivePos, Real const *const passiveValues, size_t &curRhsIdentifiersPos, size_t const &endRhsIdentifiersPos, Identifier const *const rhsIdentifiers, size_t &curStatementPos, size_t const &endStatementPos, Identifier const *const lhsIdentifiers, Config::ArgumentSize const *const numberOfPassiveArguments, Real const *const oldPrimalValues, EvalHandle const *const stmtEvalhandle)
 Perform a reverse evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface.
 
- Static Protected Member Functions inherited from codi::PrimalValueBaseTape< T_TapeTypes, PrimalValueReuseTape< T_TapeTypes > >
static void internalEvaluateForward_EvalStatements (Args &&... args)
 Perform a forward evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface.
 
static void internalEvaluatePrimal_EvalStatements (Args &&... args)
 Perform a primal evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface.
 
static void internalEvaluateReverse_EvalStatements (Args &&... args)
 Perform a reverse evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface.
 
- Static Protected Member Functions inherited from codi::CommonTapeImplementation< T_ImplTapeTypes, T_Impl >
template<LowLevelFunctionEntryCallKind callType, typename... Args>
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.
 

Additional Inherited Members

- Static Public Member Functions inherited from codi::PrimalValueBaseTape< T_TapeTypes, PrimalValueReuseTape< T_TapeTypes > >
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.
 
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.
 
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.
 
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.
 
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.
 
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 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.
 
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.
 
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.
 
- 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.
 
- Static Public Attributes inherited from codi::PrimalValueBaseTape< T_TapeTypes, PrimalValueReuseTape< T_TapeTypes > >
static bool constexpr AllowJacobianOptimization
 See InternalStatementRecordingTapeInterface.
 
static bool constexpr HasPrimalValues
 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 Attributes inherited from codi::PrimalValueBaseTape< T_TapeTypes, PrimalValueReuseTape< T_TapeTypes > >
std::vector< Gradientadjoints
 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< Realprimals
 Current state of primal values in the program.
 
std::vector< RealprimalsCopy
 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_ImplTapeTypes, 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< TapeParametersoptions
 All options.
 
- Static Protected Attributes inherited from codi::PrimalValueBaseTape< T_TapeTypes, PrimalValueReuseTape< T_TapeTypes > >
static EvalHandle const jacobianExpressions [Config::MaxArgumentSize]
 Expressions for manual statement pushes.
 
- Static Protected Attributes inherited from codi::CommonTapeImplementation< T_ImplTapeTypes, T_Impl >
static std::vector< LowLevelFunctionEntry< Impl, Real, Identifier > > * lowLevelFunctionLookup = nullptr
 Lookup table for low level function.
 

Detailed Description

template<typename T_TapeTypes>
struct codi::PrimalValueReuseTape< T_TapeTypes >

Final implementation for a primal value tape with a reuse index management.

This class implements the interface methods from the PrimalValueBaseTape.

Template Parameters
T_TapeTypesJacobianTapeTypes definition.

Member Typedef Documentation

◆ TapeTypes

template<typename T_TapeTypes >
using codi::PrimalValueReuseTape< T_TapeTypes >::TapeTypes
Initial value:
T_TapeTypes

See PrimalValueReuseTape.

Member Function Documentation

◆ clearAdjoints()

template<typename T_TapeTypes >
void codi::PrimalValueReuseTape< T_TapeTypes >::clearAdjoints ( Position const & start,
Position const & end,
AdjointsManagement adjointsManagement = AdjointsManagement::Automatic )
inline

Clear all adjoints that would be set in a tape evaluation from start to end. It has to hold start >= end.

Automatic adjoints management involves locking, see AdjointsManagement for details.
Implementation: Automatic adjoints management has no effect. Primal value tapes do not implement adjoints locking.

◆ internalEvaluateForward_EvalStatements()

template<typename T_TapeTypes >
static void codi::PrimalValueReuseTape< T_TapeTypes >::internalEvaluateForward_EvalStatements ( PrimalValueReuseTape< T_TapeTypes > & tape,
Real * primalVector,
Gradient * adjointVector,
size_t & curLLFByteDataPos,
size_t const & endLLFByteDataPos,
char * dataPtr,
size_t & curLLFInfoDataPos,
size_t const & endLLFInfoDataPos,
Config::LowLevelFunctionToken *const tokenPtr,
Config::LowLevelFunctionDataSize *const dataSizePtr,
size_t & curConstantPos,
size_t const & endConstantPos,
PassiveReal const *const constantValues,
size_t & curPassivePos,
size_t const & endPassivePos,
Real const *const passiveValues,
size_t & curRhsIdentifiersPos,
size_t const & endRhsIdentifiersPos,
Identifier const *const rhsIdentifiers,
size_t & curStatementPos,
size_t const & endStatementPos,
Identifier const *const lhsIdentifiers,
Config::ArgumentSize const *const numberOfPassiveArguments,
Real *const oldPrimalValues,
EvalHandle const *const stmtEvalhandle )
inlinestaticprotected

Perform a forward evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface.

◆ internalEvaluatePrimal_EvalStatements()

template<typename T_TapeTypes >
static void codi::PrimalValueReuseTape< T_TapeTypes >::internalEvaluatePrimal_EvalStatements ( PrimalValueReuseTape< T_TapeTypes > & tape,
Real * primalVector,
size_t & curLLFByteDataPos,
size_t const & endLLFByteDataPos,
char * dataPtr,
size_t & curLLFInfoDataPos,
size_t const & endLLFInfoDataPos,
Config::LowLevelFunctionToken *const tokenPtr,
Config::LowLevelFunctionDataSize *const dataSizePtr,
size_t & curConstantPos,
size_t const & endConstantPos,
PassiveReal const *const constantValues,
size_t & curPassivePos,
size_t const & endPassivePos,
Real const *const passiveValues,
size_t & curRhsIdentifiersPos,
size_t const & endRhsIdentifiersPos,
Identifier const *const rhsIdentifiers,
size_t & curStatementPos,
size_t const & endStatementPos,
Identifier const *const lhsIdentifiers,
Config::ArgumentSize const *const numberOfPassiveArguments,
Real *const oldPrimalValues,
EvalHandle const *const stmtEvalhandle )
inlinestaticprotected

Perform a primal evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface.

◆ internalEvaluateReverse_EvalStatements()

template<typename T_TapeTypes >
static void codi::PrimalValueReuseTape< T_TapeTypes >::internalEvaluateReverse_EvalStatements ( PrimalValueReuseTape< T_TapeTypes > & tape,
Real * primalVector,
Gradient * adjointVector,
size_t & curLLFByteDataPos,
size_t const & endLLFByteDataPos,
char * dataPtr,
size_t & curLLFInfoDataPos,
size_t const & endLLFInfoDataPos,
Config::LowLevelFunctionToken *const tokenPtr,
Config::LowLevelFunctionDataSize *const dataSizePtr,
size_t & curConstantPos,
size_t const & endConstantPos,
PassiveReal const *const constantValues,
size_t & curPassivePos,
size_t const & endPassivePos,
Real const *const passiveValues,
size_t & curRhsIdentifiersPos,
size_t const & endRhsIdentifiersPos,
Identifier const *const rhsIdentifiers,
size_t & curStatementPos,
size_t const & endStatementPos,
Identifier const *const lhsIdentifiers,
Config::ArgumentSize const *const numberOfPassiveArguments,
Real const *const oldPrimalValues,
EvalHandle const *const stmtEvalhandle )
inlinestaticprotected

Perform a reverse evaluation of the tape. Arguments are from the recursive eval methods of the DataInterface.

◆ internalResetPrimalValues()

template<typename T_TapeTypes >
void codi::PrimalValueReuseTape< T_TapeTypes >::internalResetPrimalValues ( Position const & pos)
inlineprotected

Reset the primal values to the given position.

◆ pushStmtData()

template<typename T_TapeTypes >
void codi::PrimalValueReuseTape< T_TapeTypes >::pushStmtData ( Identifier const & index,
Config::ArgumentSize const & numberOfPassiveArguments,
Real const & oldPrimalValue,
EvalHandle evalHandle )
inlineprotected

Add statement specific data to the data streams.

Only the number of arguments is required for linear index managers.

◆ revertPrimals()

template<typename T_TapeTypes >
void codi::PrimalValueReuseTape< T_TapeTypes >::revertPrimals ( Position const & pos)
inline

Revert the primals to the state indicated by pos.


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