CppADCodeGen
2.4.3
A C++ Algorithmic Differentiation Package with Source Code Generation
|
Public Member Functions | |
FunctorGenericModel (const FunctorGenericModel &)=delete | |
FunctorGenericModel & | operator= (const FunctorGenericModel &)=delete |
const std::string & | getName () const override |
const std::vector< std::string > & | getAtomicFunctionNames () override |
bool | addAtomicFunction (atomic_base< Base > &atomic) override |
bool | addExternalModel (GenericModel< Base > &atomic) override |
bool | isJacobianSparsityAvailable () override |
std::vector< bool > | JacobianSparsityBool () override |
std::vector< std::set< size_t > > | JacobianSparsitySet () override |
void | JacobianSparsity (std::vector< size_t > &equations, std::vector< size_t > &variables) override |
bool | isHessianSparsityAvailable () override |
std::vector< bool > | HessianSparsityBool () override |
std::vector< std::set< size_t > > | HessianSparsitySet () override |
void | HessianSparsity (std::vector< size_t > &rows, std::vector< size_t > &cols) override |
bool | isEquationHessianSparsityAvailable () override |
std::vector< bool > | HessianSparsityBool (size_t i) override |
std::vector< std::set< size_t > > | HessianSparsitySet (size_t i) override |
void | HessianSparsity (size_t i, std::vector< size_t > &rows, std::vector< size_t > &cols) override |
size_t | Domain () const override |
number of independent variables | |
size_t | Range () const override |
number of dependent variables | |
bool | isForwardZeroAvailable () override |
void | ForwardZero (ArrayView< const Base > x, ArrayView< Base > dep) override |
calculate the dependent values (zero order) | |
void | ForwardZero (const std::vector< const Base * > &x, ArrayView< Base > dep) override |
void | ForwardZero (const CppAD::vector< bool > &vx, CppAD::vector< bool > &vy, ArrayView< const Base > tx, ArrayView< Base > ty) override |
bool | isJacobianAvailable () override |
void | Jacobian (ArrayView< const Base > x, ArrayView< Base > jac) override |
calculate entire Jacobian | |
bool | isHessianAvailable () override |
void | Hessian (ArrayView< const Base > x, ArrayView< const Base > w, ArrayView< Base > hess) override |
calculate Hessian for one component of f | |
bool | isForwardOneAvailable () override |
void | ForwardOne (ArrayView< const Base > tx, ArrayView< Base > ty) override |
bool | isSparseForwardOneAvailable () override |
void | ForwardOne (ArrayView< const Base > x, size_t tx1Nnz, const size_t idx[], const Base tx1[], ArrayView< Base > ty1) override |
bool | isReverseOneAvailable () override |
void | ReverseOne (ArrayView< const Base > tx, ArrayView< const Base > ty, ArrayView< Base > px, ArrayView< const Base > py) override |
bool | isSparseReverseOneAvailable () override |
void | ReverseOne (ArrayView< const Base > x, ArrayView< Base > px, size_t pyNnz, const size_t idx[], const Base py[]) override |
bool | isReverseTwoAvailable () override |
void | ReverseTwo (ArrayView< const Base > tx, ArrayView< const Base > ty, ArrayView< Base > px, ArrayView< const Base > py) override |
bool | isSparseReverseTwoAvailable () override |
void | ReverseTwo (ArrayView< const Base > x, size_t tx1Nnz, const size_t idx[], const Base tx1[], ArrayView< Base > px2, ArrayView< const Base > py2) override |
bool | isSparseJacobianAvailable () override |
void | SparseJacobian (ArrayView< const Base > x, ArrayView< Base > jac) override |
calculate sparse Jacobians | |
void | SparseJacobian (const std::vector< Base > &x, std::vector< Base > &jac, std::vector< size_t > &row, std::vector< size_t > &col) override |
void | SparseJacobian (ArrayView< const Base > x, ArrayView< Base > jac, size_t const **row, size_t const **col) override |
void | SparseJacobian (const std::vector< const Base * > &x, ArrayView< Base > jac, size_t const **row, size_t const **col) override |
bool | isSparseHessianAvailable () override |
void | SparseHessian (ArrayView< const Base > x, ArrayView< const Base > w, ArrayView< Base > hess) override |
calculate sparse Hessians | |
void | SparseHessian (const std::vector< Base > &x, const std::vector< Base > &w, std::vector< Base > &hess, std::vector< size_t > &row, std::vector< size_t > &col) override |
void | SparseHessian (ArrayView< const Base > x, ArrayView< const Base > w, ArrayView< Base > hess, size_t const **row, size_t const **col) override |
void | SparseHessian (const std::vector< const Base * > &x, ArrayView< const Base > w, ArrayView< Base > hess, size_t const **row, size_t const **col) override |
void | setAtomicEvalForwardOne4CppAD (bool evalForwardOne4CppAD) |
bool | isAtomicEvalForwardOne4CppAD () const |
template<typename VectorBase > | |
VectorBase | ForwardZero (const VectorBase &x) |
template<typename VectorBase > | |
void | ForwardZero (const VectorBase &x, VectorBase &dep) |
template<typename VectorBase > | |
VectorBase | Jacobian (const VectorBase &x) |
template<typename VectorBase > | |
void | Jacobian (const VectorBase &x, VectorBase &jac) |
template<typename VectorBase > | |
VectorBase | Hessian (const VectorBase &x, const VectorBase &w) |
template<typename VectorBase > | |
void | Hessian (const VectorBase &x, const VectorBase &w, VectorBase &hess) |
template<typename VectorBase > | |
VectorBase | Hessian (const VectorBase &x, size_t i) |
calculate Hessian for one component of f | |
template<typename VectorBase > | |
VectorBase | ForwardOne (const VectorBase &tx) |
template<typename VectorBase > | |
VectorBase | ReverseOne (const VectorBase &tx, const VectorBase &ty, const VectorBase &py) |
template<typename VectorBase > | |
void | ReverseOne (const VectorBase &tx, const VectorBase &ty, VectorBase &px, const VectorBase &py) |
template<typename VectorBase > | |
VectorBase | ReverseTwo (const VectorBase &tx, const VectorBase &ty, const VectorBase &py) |
template<typename VectorBase > | |
void | ReverseTwo (const VectorBase &tx, const VectorBase &ty, VectorBase &px, const VectorBase &py) |
template<typename VectorBase > | |
VectorBase | SparseJacobian (const VectorBase &x) |
template<typename VectorBase > | |
void | SparseJacobian (const VectorBase &x, VectorBase &jac) |
template<typename VectorBase > | |
VectorBase | SparseHessian (const VectorBase &x, const VectorBase &w) |
template<typename VectorBase > | |
void | SparseHessian (const VectorBase &x, const VectorBase &w, VectorBase &hess) |
virtual CGAtomicGenericModel< Base > & | asAtomic () |
Protected Member Functions | |
FunctorGenericModel (std::string name) | |
virtual void | init () |
virtual void * | loadFunction (const std::string &functionName, bool required=true)=0 |
virtual void | validate () |
virtual void | loadFunctions () |
template<class VectorSet > | |
void | loadSparsity (bool set_type, VectorSet &s, unsigned long nrows, unsigned long ncols, unsigned long const *rows, unsigned long const *cols, unsigned long nnz) |
template<class VectorSet > | |
void | loadSparsity (const std::set< size_t > &set_type, VectorSet &s, unsigned long nrows, unsigned long ncols, unsigned long const *rows, unsigned long const *cols, unsigned long nnz) |
void | createDenseFromSparse (const CppAD::vector< Base > &compressed, unsigned long nrows, unsigned long ncols, unsigned long const *rows, unsigned long const *cols, unsigned long nnz, ArrayView< Base > mat) const |
virtual void | modelLibraryClosed () |
Protected Attributes | |
bool | _isLibraryReady |
const std::string | _name |
the model name | |
size_t | _m |
size_t | _n |
std::vector< const Base * > | _in |
std::vector< const Base * > | _inHess |
std::vector< Base * > | _out |
LangCAtomicFun | _atomicFuncArg |
std::vector< std::string > | _atomicNames |
std::vector< ExternalFunctionWrapper< Base > * > | _atomic |
size_t | _missingAtomicFunctions |
CppAD::vector< Base > | _tx |
CppAD::vector< Base > | _ty |
CppAD::vector< Base > | _px |
CppAD::vector< Base > | _py |
void(* | _zero )(Base const *const *, Base *const *, LangCAtomicFun) |
int(* | _forwardOne )(Base const tx[], Base ty[], LangCAtomicFun) |
int(* | _reverseOne )(Base const tx[], Base const ty[], Base px[], Base const py[], LangCAtomicFun) |
int(* | _reverseTwo )(Base const tx[], Base const ty[], Base px[], Base const py[], LangCAtomicFun) |
void(* | _jacobian )(Base const *const *, Base *const *, LangCAtomicFun) |
void(* | _hessian )(Base const *const *, Base *const *, LangCAtomicFun) |
int(* | _sparseForwardOne )(unsigned long, Base const *const *, Base *const *, LangCAtomicFun) |
int(* | _sparseReverseOne )(unsigned long, Base const *const *, Base *const *, LangCAtomicFun) |
int(* | _sparseReverseTwo )(unsigned long, Base const *const *, Base *const *, LangCAtomicFun) |
void(* | _sparseJacobian )(Base const *const *, Base *const *, LangCAtomicFun) |
void(* | _sparseHessian )(Base const *const *, Base *const *, LangCAtomicFun) |
void(* | _forwardOneSparsity )(unsigned long, unsigned long const **, unsigned long *) |
void(* | _reverseOneSparsity )(unsigned long, unsigned long const **, unsigned long *) |
void(* | _reverseTwoSparsity )(unsigned long, unsigned long const **, unsigned long *) |
void(* | _jacobianSparsity )(unsigned long const **row, unsigned long const **col, unsigned long *nnz) |
void(* | _hessianSparsity )(unsigned long const **row, unsigned long const **col, unsigned long *nnz) |
void(* | _hessianSparsity2 )(unsigned long i, unsigned long const **row, unsigned long const **col, unsigned long *nnz) |
void(* | _atomicFunctions )(const char ***names, unsigned long *n) |
bool | _evalAtomicForwardOne4CppAD |
Static Protected Attributes | |
static constexpr const char * | ERROR_LIBRARY_NOT_READY |
Friends | |
class | AtomicExternalFunctionWrapper< Base > |
A model which can be accessed through function pointers. This class is not thread-safe and it should not be used simultaneously in different threads. Multiple instances of this class for the same model from the same model library object can be used simultaneously in different threads.
Definition at line 34 of file functor_generic_model.hpp.
|
inlineexplicitprotected |
Creates a new model
name | The model name |
Definition at line 856 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Defines a CppAD atomic function to be used as an external function by the compiled code. It should match an external function name previously provided to create the source.
atomic | The atomic function. This object must only be deleted after the model. |
Implements CppAD::cg::GenericModel< Base >.
Definition at line 114 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Defines a generic model to be used as an external function by the compiled code. It should match an external function name previously provided to create the source. This form should be preferred over ::addAtomicFunction whenever possible.
atomic | The generic model. This object must only be deleted after the model. |
Implements CppAD::cg::GenericModel< Base >.
Definition at line 119 of file functor_generic_model.hpp.
|
inlinevirtualinherited |
Provides a wrapper for this compiled model allowing it to be used as an atomic function. The model must not be deleted while the atomic function is in use.
Definition at line 755 of file generic_model.hpp.
|
inlineoverridevirtual |
Computes results during a forward mode sweep. Computes the first-order Taylor coefficients for dependent variables relative to a single independent variable. This method can be used during the evaluation of the jacobian when the model is used through a user defined external/atomic AD function.
tx | The Taylor coefficients of the independent variables |
ty | The Taylor coefficients of the dependent variables |
Implements CppAD::cg::GenericModel< Base >.
Definition at line 410 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Computes results during a first-order forward mode sweep, the first-order Taylor coefficients for dependent variables relative to a single independent variable. This method can be used during the evaluation of the jacobian when the model is used through a user defined external/atomic AD function. This method version avoids some data copies and can be more efficient.
x | independent variable vector |
tx1Nnz | the number of non-zeros of the directional derivatives of the independent variables (seed directions) |
idx | the locations of the non-zero values the partial derivatives of the dependent variables (seeds) |
tx1 | the non-zero values of the partial derivatives of the dependent variables (seeds) |
ty1 |
Implements CppAD::cg::GenericModel< Base >.
Definition at line 429 of file functor_generic_model.hpp.
|
inlineinherited |
Computes results during a forward mode sweep. Computes the first-order Taylor coefficients for dependent variables relative to a single independent variable. This method can be used during the evaluation of the jacobian when the model is used through a user defined external/atomic AD function.
tx | The Taylor coefficients of the independent variables |
Definition at line 348 of file generic_model.hpp.
Referenced by CppAD::cg::GenericModelExternalFunctionWrapper< Base >::forward().
|
inlineoverridevirtual |
Determines the dependent variable values using a variable number of independent variable arrays. This method can be useful if the generic model was prepared considering that the independent variables are provided by several arrays.
x | Contains the several independent variable vectors |
dep | The values of the dependent variables |
Implements CppAD::cg::GenericModel< Base >.
Definition at line 315 of file functor_generic_model.hpp.
|
inlineinherited |
Evaluates the dependent model variables (zero-order). This method considers that the generic model was prepared with a single array for the independent variables (the default behavior).
x | The independent variable vector |
Definition at line 194 of file generic_model.hpp.
Referenced by CppAD::cg::GenericModelExternalFunctionWrapper< Base >::forward(), and CppAD::cg::GenericModel< Base >::ForwardZero().
|
inlineinherited |
Evaluates the dependent model variables (zero-order). This method considers that the generic model was prepared using a single array for the independent variables (the default behavior).
x | The independent variable vector |
dep | The dependent variable vector |
Definition at line 216 of file generic_model.hpp.
|
inlineoverridevirtual |
The names of the atomic functions required by this model. All external/atomic functions must be provided before using this model to compute numerical values.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 110 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Provides the name for this model.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 106 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Provides the sparsity of the sum of the hessian for each dependent variable.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 198 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Provides the sparsity of the hessian for a dependent variable
i | The index of the dependent variable |
Implements CppAD::cg::GenericModel< Base >.
Definition at line 250 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the sparsity pattern for the Hessian associated with a dependent variable can be requested.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 230 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the first-order forward mode dense methods can be called.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 406 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the model evaluation (zero-order forward mode) can be requested.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 294 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the dense evaluation of the weigthed sum of the Hessians can be requested.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 382 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the sparsity pattern for the weighted sum of the Hessians can be requested.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 178 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the dense Jacobian evaluation can be requested.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 360 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the Jacobian sparsity pattern can be requested.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 125 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the first-order reverse mode dense methods can be called.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 467 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the second-order reverse mode dense methods can be called.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 533 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the first-order forward mode sparse method can be called.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 425 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the sparse evaluation of the weighted sum of the Hessians methods can be called.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 722 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the sparse Jacobian evaluation methods can be called.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 605 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the first-order reverse mode sparse method can be called.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 491 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines whether or not the second-order reverse mode sparse methods can be called.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 559 of file functor_generic_model.hpp.
|
inlineprotectedvirtual |
Prepare the atomic functions argument
Definition at line 927 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Computes results during a reverse mode sweep (adjoints or partial derivatives of independent variables) for the evaluation of the jacobian when the model is used through a user defined external/atomic AD function.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 471 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Computes results during a reverse mode sweep (adjoints or partial derivatives of independent variables) for the evaluation of the jacobian when the model is used through a user defined external/atomic AD function. This method version avoids some data copies and can be more efficient.
x | independent variable vector |
px | partial derivatives of the independent variables (same size as x) |
pyNnz | the number of non-zeros of the partial derivatives of the dependent variables (weight functionals) |
idx | the locations of the non-zero values the partial derivatives of the dependent variables (weight functionals) |
py | the non-zero values of the partial derivatives of the dependent variables (weight functionals) |
Implements CppAD::cg::GenericModel< Base >.
Definition at line 495 of file functor_generic_model.hpp.
|
inlineinherited |
Computes results during a reverse mode sweep (adjoints or partial derivatives of independent variables) for the evaluation of the jacobian when the model is used through a user defined external/atomic AD function.
Definition at line 430 of file generic_model.hpp.
Referenced by CppAD::cg::GenericModelExternalFunctionWrapper< Base >::reverse(), and CppAD::cg::GenericModel< Base >::ReverseOne().
|
inlineinherited |
Computes results during a reverse mode sweep (adjoints or partial derivatives of independent variables) for the evaluation of the jacobian when the model is used through a user defined external/atomic AD function.
Definition at line 447 of file generic_model.hpp.
|
inlineoverridevirtual |
Computes second-order results during a reverse mode sweep (p = 2). This method can be used during the evaluation of the hessian when the model is used through a user defined external/atomic AD function.
Implements CppAD::cg::GenericModel< Base >.
Definition at line 537 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Computes second-order results during a reverse mode sweep (p = 2). This method can be used during the evaluation of the hessian when the model is used through a user defined external AD function. This method version avoids some data copies and can be more efficient.
x | independent variable vector |
tx1Nnz | the number of non-zeros of the first-order Taylor coefficients of the independents |
idx | the locations of the non-zero values of the first-order Taylor coefficients of the independents |
tx1 | the values of the non-zero first-order Taylor coefficients of the independents |
px2 | second-order partials of the independents (should have the same size of x) |
py2 | second-order partials of the dependents (should have the size of the dependent variables) |
Implements CppAD::cg::GenericModel< Base >.
Definition at line 563 of file functor_generic_model.hpp.
|
inlineinherited |
Computes second-order results during a reverse mode sweep (p = 2). This method can be used during the evaluation of the hessian when the model is used through a user defined external/atomic AD function.
Definition at line 521 of file generic_model.hpp.
Referenced by CppAD::cg::GenericModelExternalFunctionWrapper< Base >::reverse(), and CppAD::cg::GenericModel< Base >::ReverseTwo().
|
inlineinherited |
Computes second-order results during a reverse mode sweep (p = 2). This method can be used during the evaluation of the hessian when the model is used through a user defined external/atomic AD function.
Definition at line 539 of file generic_model.hpp.
|
inlineinherited |
Defines whether or not to evaluate a forward mode of an atomic functions during a reverse sweep so that CppAD checks validate OK. If this model is not used within CppAD then it should be set to false.
evalForwardOne4CppAD | true to perform the forward mode, false to ignore it |
Definition at line 164 of file generic_model.hpp.
|
inlineoverridevirtual |
Determines the sparse Hessian using a variable number of independent variable arrays. This method can be useful if the generic model was prepared considering that the independent variables are provided by several arrays.
x | Contains the several independent variable vectors |
w | The equation multipliers |
w_size | The number of equations |
hess | The values of the sparse hessian in the order provided by row and col |
row | The row indices of the hessian values |
col | The column indices of the hessian values |
Implements CppAD::cg::GenericModel< Base >.
Definition at line 822 of file functor_generic_model.hpp.
|
inlineoverridevirtual |
Determines the sparse Jacobian using a variable number of independent variable arrays. This method can be useful if the generic model was prepared considering that the independent variables are provided by several arrays.
x | Contains the several independent variable vectors |
jac | The values of the sparse Jacobian in the order provided by row and col |
row | The row indices of the Jacobian values |
col | The column indices of the Jacobian values |
Implements CppAD::cg::GenericModel< Base >.
Definition at line 698 of file functor_generic_model.hpp.
|
inlineinherited |
Calculates a Jacobian using sparse methods and saves it into a dense format:
and
.
x | independent variable vector |
Definition at line 616 of file generic_model.hpp.
Referenced by CppAD::cg::GenericModel< Base >::SparseJacobian().
|
inlineinherited |
Calculates a Jacobian using sparse methods and saves it into a dense format:
and
.
x | independent variable vector |
jac | a vector where the dense jacobian will be placed |
Definition at line 633 of file generic_model.hpp.
|
inlineprotectedvirtual |
Check the data type
Definition at line 895 of file functor_generic_model.hpp.
|
staticconstexprprotected |
Definition at line 36 of file functor_generic_model.hpp.