CppADCodeGen
HEAD
A C++ Algorithmic Differentiation Package with Source Code Generation
|
Public Types | |
using | CGB = CppAD::cg::CG< Base > |
using | ADCGD = CppAD::AD< CGB > |
using | Super = BaseAbstractAtomicFun< Base > |
using | Arg = Argument< Base > |
Public Member Functions | |
CGAtomicFunBridge (const std::string &name, CppAD::ADFun< CGB > &fun, bool standAlone=false, bool cacheSparsities=true) | |
CGAtomicFunBridge (const CGAtomicFunBridge &orig)=delete | |
CGAtomicFunBridge & | operator= (const CGAtomicFunBridge &rhs)=delete |
template<class ADVector > | |
void | operator() (const ADVector &ax, ADVector &ay, size_t id=0) |
template<class VectorSize > | |
void | setCustomSparseJacobianElements (const VectorSize &row, const VectorSize &col) |
template<class VectorSet > | |
void | setCustomSparseJacobianElements (const VectorSet &elements) |
template<class VectorSize > | |
void | setCustomSparseHessianElements (const VectorSize &row, const VectorSize &col) |
template<class VectorSet > | |
void | setCustomSparseHessianElements (const VectorSet &elements) |
bool | for_sparse_jac (size_t q, const CppAD::vector< std::set< size_t > > &r, CppAD::vector< std::set< size_t > > &s, const CppAD::vector< CGB > &x) override |
bool | for_sparse_jac (size_t q, const CppAD::vector< std::set< size_t > > &r, CppAD::vector< std::set< size_t > > &s) override |
bool | rev_sparse_jac (size_t q, const CppAD::vector< std::set< size_t > > &rt, CppAD::vector< std::set< size_t > > &st, const CppAD::vector< CGB > &x) override |
bool | rev_sparse_jac (size_t q, const CppAD::vector< std::set< size_t > > &rt, CppAD::vector< std::set< size_t > > &st) override |
bool | rev_sparse_hes (const CppAD::vector< bool > &vx, const CppAD::vector< bool > &s, CppAD::vector< bool > &t, size_t q, const CppAD::vector< std::set< size_t > > &r, const CppAD::vector< std::set< size_t > > &u, CppAD::vector< std::set< size_t > > &v, const CppAD::vector< CGB > &x) override |
bool | rev_sparse_hes (const CppAD::vector< bool > &vx, const CppAD::vector< bool > &s, CppAD::vector< bool > &t, size_t q, const CppAD::vector< std::set< size_t > > &r, const CppAD::vector< std::set< size_t > > &u, CppAD::vector< std::set< size_t > > &v) override |
size_t | getId () const |
bool | isStandAlone () const |
bool | forward (size_t q, size_t p, const CppAD::vector< bool > &vx, CppAD::vector< bool > &vy, const CppAD::vector< CGB > &tx, CppAD::vector< CGB > &ty) override |
bool | reverse (size_t p, const CppAD::vector< CGB > &tx, const CppAD::vector< CGB > &ty, CppAD::vector< CGB > &px, const CppAD::vector< CGB > &py) override |
virtual CppAD::vector< std::set< size_t > > | jacobianForwardSparsitySet (size_t m, const CppAD::vector< CGB > &x) |
virtual CppAD::vector< std::set< size_t > > | jacobianReverseSparsitySet (size_t m, const CppAD::vector< CGB > &x) |
virtual CppAD::vector< std::set< size_t > > | hessianSparsitySet (size_t m, const CppAD::vector< CGB > &x) |
virtual CppAD::vector< std::set< size_t > > | hessianSparsitySet (const CppAD::vector< bool > &s, const CppAD::vector< CGB > &x) |
Static Public Member Functions | |
static size_t | createNewAtomicFunctionID () |
Protected Member Functions | |
void | zeroOrderDependency (const CppAD::vector< bool > &vx, CppAD::vector< bool > &vy, const CppAD::vector< CGB > &x) override |
bool | atomicForward (size_t q, size_t p, const CppAD::vector< Base > &tx, CppAD::vector< Base > &ty) override |
bool | atomicReverse (size_t p, const CppAD::vector< Base > &tx, const CppAD::vector< Base > &ty, CppAD::vector< Base > &px, const CppAD::vector< Base > &py) override |
Static Protected Member Functions | |
static void | appendAsArguments (typename std::vector< Arg >::iterator begin, const CppAD::vector< CGB > &tx) |
static OperationNode< Base > * | makeArray (CodeHandler< Base > &handler, const CppAD::vector< CGB > &tx) |
static OperationNode< Base > * | makeArray (CodeHandler< Base > &handler, const CppAD::vector< CGB > &tx, size_t p, size_t k) |
static OperationNode< Base > * | makeZeroArray (CodeHandler< Base > &handler, size_t size) |
static OperationNode< Base > * | makeEmptySparseArray (CodeHandler< Base > &handler, size_t size) |
static OperationNode< Base > * | makeSparseArray (CodeHandler< Base > &handler, const CppAD::vector< CGB > &py, size_t p, size_t k) |
static bool | isParameters (const CppAD::vector< CGB > &tx) |
static bool | isValuesDefined (const CppAD::vector< CGB > &tx) |
Protected Attributes | |
ADFun< CGB > & | fun_ |
bool | cacheSparsities_ |
CustomPosition | custom_jac_ |
CustomPosition | custom_hess_ |
std::map< size_t, CppAD::vector< std::set< size_t > > > | hess_ |
const size_t | id_ |
bool | standAlone_ |
An atomic function wrapper for atomic functions using the CppAD::cg::CG type. This class can be useful when a CppAD::ADFun<CppAD::cg::CG> is going to be used to create a compiled model library but has not been compiled yet.
Definition at line 31 of file atomic_fun_bridge.hpp.
|
inline |
Creates a new atomic function wrapper.
name | The atomic function name |
fun | The atomic function to be wrapped |
standAlone | Whether or not forward and reverse function calls do not require the Taylor coefficients for the dependent variables (ty) and the previous evaluation of other forward/reverse modes. |
cacheSparsities | Whether or not to cache information related with sparsity evaluation. |
Definition at line 55 of file atomic_fun_bridge.hpp.
|
inlineoverrideprotectedvirtual |
Used to evaluate function values and forward mode function values and derivatives.
q | Lowest order for this forward mode calculation. |
p | Highest order for this forward mode calculation. |
vx | If size not zero, which components of x are variables |
vy | If size not zero, which components of y are variables |
tx | Taylor coefficients corresponding to x for this calculation |
ty | Taylor coefficient corresponding to y for this calculation |
Implements CppAD::cg::CGAbstractAtomicFun< Base >.
Definition at line 282 of file atomic_fun_bridge.hpp.
|
inlineoverrideprotectedvirtual |
Used to evaluate reverse mode function derivatives.
p | Highest order for this forward mode calculation. |
tx | Taylor coefficients corresponding to x for this calculation |
ty | Taylor coefficient corresponding to y for this calculation |
px | Partials w.r.t. the x Taylor coefficients. |
py | Partials w.r.t. the y Taylor coefficients |
Implements CppAD::cg::CGAbstractAtomicFun< Base >.
Definition at line 299 of file atomic_fun_bridge.hpp.
|
inlinestaticinherited |
Uses an internal counter to produce IDs for atomic functions.
Definition at line 495 of file abstract_atomic_fun.hpp.
|
inlineoverrideinherited |
Use the jacobian sparsity to determine which elements will always be zero
Definition at line 94 of file abstract_atomic_fun.hpp.
|
inlineinherited |
Provides a unique identifier for this atomic function type.
Definition at line 81 of file abstract_atomic_fun.hpp.
|
inlinevirtualinherited |
Determine the sparsity pattern p for Hessian of w^T F
Definition at line 462 of file abstract_atomic_fun.hpp.
|
inlineinherited |
Whether or not forward and reverse function calls do not require the Taylor coefficients for the dependent variables (ty) and any previous evaluation of other forward/reverse modes.
Definition at line 90 of file abstract_atomic_fun.hpp.
|
inlineoverride |
V(x) = f'^T(x) U(x) + Sum( s(x)i f''(x) R(x) )
S(x) * f'(x)
Definition at line 172 of file atomic_fun_bridge.hpp.
|
inlineoverrideinherited |
Use the Jacobian sparsity to determine which elements will always be zero
Use the Hessian sparsity to determine which elements will always be zero
Definition at line 233 of file abstract_atomic_fun.hpp.
|
protectedinherited |
A unique identifier for this atomic function type
Definition at line 37 of file abstract_atomic_fun.hpp.
Referenced by CppAD::cg::CGAbstractAtomicFun< ScalarOut >::getId().
|
protectedinherited |
Whether or not forward and reverse function calls do not require the Taylor coefficients for the dependent variables (ty) and any previous evaluation of other forward/reverse modes.
Definition at line 43 of file abstract_atomic_fun.hpp.
Referenced by CppAD::cg::CGAbstractAtomicFun< ScalarOut >::isStandAlone().