40 atomic_base<Base>(model.getName()),
42 this->
option(CppAD::atomic_base<Base>::set_sparsity_enum);
47 template <
class ADVector>
49 this->atomic_base<Base>::operator()(
ax,
ay,
id);
52 bool forward(
size_t q,
62 model_.ForwardOne(tx, ty);
69 bool reverse(
size_t p,
75 model_.ReverseOne(tx, ty, px, py);
78 model_.ReverseTwo(tx, ty, px, py);
85 bool for_sparse_jac(
size_t q,
89 return for_sparse_jac(q, r, s);
92 bool for_sparse_jac(
size_t q,
95 size_t n = model_.Domain();
96 size_t m = model_.Range();
97 for (
size_t i = 0; i < m; i++) {
101 const std::vector<std::set<size_t> > jacSparsity = model_.JacobianSparsitySet();
104 CppAD::cg::multMatrixMatrixSparsity(jacSparsity, r, s, m, n, q);
109 bool rev_sparse_jac(
size_t q,
113 return rev_sparse_jac(q, rT, sT);
116 bool rev_sparse_jac(
size_t q,
119 size_t n = model_.Domain();
120 size_t m = model_.Range();
121 for (
size_t i = 0; i < n; i++) {
125 const std::vector<std::set<size_t> > jacSparsity = model_.JacobianSparsitySet();
128 CppAD::cg::multMatrixTransMatrixSparsity(jacSparsity, rT, sT, m, n, q);
141 return rev_sparse_hes(vx, s, t, q, r, u, v);
151 size_t n = model_.Domain();
152 size_t m = model_.Range();
154 for (
size_t i = 0;
i <
n;
i++) {
158 const std::vector<std::set<size_t> >
jacSparsity = model_.JacobianSparsitySet();
164 CppAD::cg::multMatrixTransMatrixSparsity(
jacSparsity,
u, v, m,
n,
q);
168 for (
size_t i = 0;
i < m;
i++) {
177 std::vector<std::set<size_t> >
sparsitySF2R = model_.HessianSparsitySet();
182 for (
size_t i = 0;
i < m;
i++) {
184 CppAD::cg::addMatrixSparsity(model_.HessianSparsitySet(
i),
sparsitySF2R);
193 for (
size_t i = 0;
i < m;
i++) {
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