40 atomic_base<Base>(model.getName()),
42 this->option(CppAD::atomic_base<Base>::set_sparsity_enum);
47 template <
class ADVector>
48 void operator()(
const ADVector& ax, ADVector& ay,
size_t id = 0) {
49 this->atomic_base<Base>::operator()(ax, ay,
id);
52 bool forward(
size_t q,
69 bool reverse(
size_t p,
70 const CppAD::vector<Base>& tx,
71 const CppAD::vector<Base>& ty,
72 CppAD::vector<Base>& px,
73 const CppAD::vector<Base>& py)
override {
75 model_.ReverseOne(tx, ty, px, py);
78 model_.ReverseTwo(tx, ty, px, py);
85 bool for_sparse_jac(
size_t q,
86 const CppAD::vector<std::set<size_t> >& r,
87 CppAD::vector<std::set<size_t> >& s,
88 const CppAD::vector<Base>& x)
override {
89 return for_sparse_jac(q, r, s);
92 bool for_sparse_jac(
size_t q,
93 const CppAD::vector<std::set<size_t> >& r,
94 CppAD::vector<std::set<size_t> >& s)
override {
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,
110 const CppAD::vector<std::set<size_t> >& rT,
111 CppAD::vector<std::set<size_t> >& sT,
112 const CppAD::vector<Base>& x)
override {
113 return rev_sparse_jac(q, rT, sT);
116 bool rev_sparse_jac(
size_t q,
117 const CppAD::vector<std::set<size_t> >& rT,
118 CppAD::vector<std::set<size_t> >& sT)
override {
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);
133 bool rev_sparse_hes(
const CppAD::vector<bool>& vx,
134 const CppAD::vector<bool>& s,
135 CppAD::vector<bool>& t,
137 const CppAD::vector<std::set<size_t> >& r,
138 const CppAD::vector<std::set<size_t> >& u,
139 CppAD::vector<std::set<size_t> >& v,
140 const CppAD::vector<Base>& x)
override {
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);
167 bool allSelected =
true;
168 for (
size_t i = 0; i < m; i++) {
177 std::vector<std::set<size_t> > sparsitySF2R = model_.HessianSparsitySet();
178 sparsitySF2R.resize(n);
179 CppAD::cg::multMatrixMatrixSparsity(sparsitySF2R, r, v, n, n, q);
181 std::vector<std::set<size_t> > sparsitySF2R(n);
182 for (
size_t i = 0; i < m; i++) {
184 CppAD::cg::addMatrixSparsity(model_.HessianSparsitySet(i), sparsitySF2R);
187 CppAD::cg::multMatrixMatrixSparsity(sparsitySF2R, r, v, n, n, q);
193 for (
size_t i = 0; i < m; i++) {
195 for (
size_t j : jacSparsity[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