1#ifndef CPPAD_CG_GENERIC_MODEL_INCLUDED
2#define CPPAD_CG_GENERIC_MODEL_INCLUDED
32 bool _evalAtomicForwardOne4CppAD;
37 _evalAtomicForwardOne4CppAD(
true) {
49 virtual const std::string&
getName()
const = 0;
60 virtual std::vector<std::set<size_t> > JacobianSparsitySet() = 0;
61 virtual std::vector<bool> JacobianSparsityBool() = 0;
62 virtual void JacobianSparsity(std::vector<size_t>& equations,
63 std::vector<size_t>& variables) = 0;
81 virtual std::vector<bool> HessianSparsityBool() = 0;
82 virtual void HessianSparsity(std::vector<size_t>& rows,
83 std::vector<size_t>& cols) = 0;
101 virtual std::vector<bool> HessianSparsityBool(
size_t i) = 0;
102 virtual void HessianSparsity(
size_t i,
103 std::vector<size_t>& rows,
104 std::vector<size_t>& cols) = 0;
168 inline bool isAtomicEvalForwardOne4CppAD()
const {
169 return _evalAtomicForwardOne4CppAD;
193 template<
typename VectorBase>
215 template<
typename VectorBase>
251 template<
typename VectorBase>
259 template<
typename VectorBase>
283 template<
typename VectorBase>
293 template<
typename VectorBase>
305 template<
typename VectorBase>
308 CPPADCG_ASSERT_KNOWN(
i <
Range(),
"Invalid equation index")
347 template<
typename VectorBase>
357 for (
size_t i = 0;
i < m;
i++) {
406 size_t tx1Nnz,
const size_t idx[],
const Base
tx1[],
429 template<
typename VectorBase>
446 template<
typename VectorBase>
497 size_t pyNnz,
const size_t idx[],
const Base
py[]) = 0;
520 template<
typename VectorBase>
538 template<
typename VectorBase>
590 size_t tx1Nnz,
const size_t idx[],
const Base
tx1[],
615 template<
typename VectorBase>
632 template<
typename VectorBase>
653 std::vector<Base>& jac,
654 std::vector<size_t>& row,
655 std::vector<size_t>& col) = 0;
660 size_t const** col) = 0;
677 size_t const** col) = 0;
692 template<
typename VectorBase>
702 template<
typename VectorBase>
703 inline void SparseHessian(
const VectorBase& x,
716 virtual void SparseHessian(
const std::vector<Base> &x,
717 const std::vector<Base> &w,
718 std::vector<Base>& hess,
719 std::vector<size_t>& row,
720 std::vector<size_t>& col) = 0;
726 size_t const** col) = 0;
746 size_t const** col) = 0;
756 if (_atomic ==
nullptr) {
virtual size_t Range() const =0
VectorBase ForwardZero(const VectorBase &x)
virtual void SparseHessian(const std::vector< const Base * > &x, ArrayView< const Base > w, ArrayView< Base > hess, size_t const **row, size_t const **col)=0
VectorBase Hessian(const VectorBase &x, size_t i)
calculate Hessian for one component of f
void setAtomicEvalForwardOne4CppAD(bool evalForwardOne4CppAD)
virtual bool isReverseOneAvailable()=0
virtual bool isJacobianSparsityAvailable()=0
virtual void ReverseTwo(ArrayView< const Base > x, size_t tx1Nnz, const size_t idx[], const Base tx1[], ArrayView< Base > px2, ArrayView< const Base > py2)=0
VectorBase ReverseTwo(const VectorBase &tx, const VectorBase &ty, const VectorBase &py)
void ReverseTwo(const VectorBase &tx, const VectorBase &ty, VectorBase &px, const VectorBase &py)
VectorBase ReverseOne(const VectorBase &tx, const VectorBase &ty, const VectorBase &py)
virtual void SparseJacobian(const std::vector< const Base * > &x, ArrayView< Base > jac, size_t const **row, size_t const **col)=0
virtual bool isSparseReverseOneAvailable()=0
virtual std::vector< std::set< size_t > > HessianSparsitySet(size_t i)=0
virtual bool isForwardZeroAvailable()=0
virtual bool isSparseJacobianAvailable()=0
virtual void ReverseOne(ArrayView< const Base > tx, ArrayView< const Base > ty, ArrayView< Base > px, ArrayView< const Base > py)=0
virtual size_t Domain() const =0
virtual void ForwardOne(ArrayView< const Base > x, size_t tx1Nnz, const size_t idx[], const Base tx1[], ArrayView< Base > ty1)=0
virtual bool isJacobianAvailable()=0
virtual bool addExternalModel(GenericModel< Base > &atomic)=0
virtual bool isSparseForwardOneAvailable()=0
virtual void ReverseOne(ArrayView< const Base > x, ArrayView< Base > px, size_t pyNnz, const size_t idx[], const Base py[])=0
virtual bool isEquationHessianSparsityAvailable()=0
VectorBase SparseJacobian(const VectorBase &x)
virtual bool isHessianSparsityAvailable()=0
virtual void SparseJacobian(ArrayView< const Base > x, ArrayView< Base > jac)=0
virtual bool isSparseReverseTwoAvailable()=0
virtual bool isReverseTwoAvailable()=0
virtual bool addAtomicFunction(atomic_base< Base > &atomic)=0
void ReverseOne(const VectorBase &tx, const VectorBase &ty, VectorBase &px, const VectorBase &py)
void ForwardZero(const VectorBase &x, VectorBase &dep)
virtual bool isSparseHessianAvailable()=0
virtual bool isHessianAvailable()=0
virtual void ForwardOne(ArrayView< const Base > tx, ArrayView< Base > ty)=0
virtual void ReverseTwo(ArrayView< const Base > tx, ArrayView< const Base > ty, ArrayView< Base > px, ArrayView< const Base > py)=0
virtual std::vector< std::set< size_t > > HessianSparsitySet()=0
virtual void ForwardZero(const std::vector< const Base * > &x, ArrayView< Base > dep)=0
void SparseJacobian(const VectorBase &x, VectorBase &jac)
virtual bool isForwardOneAvailable()=0
virtual const std::string & getName() const =0
virtual CGAtomicGenericModel< Base > & asAtomic()
VectorBase ForwardOne(const VectorBase &tx)
virtual const std::vector< std::string > & getAtomicFunctionNames()=0
bool GreaterThanZero(const cg::CG< Base > &x)