1 #ifndef CPPAD_CG_ATOMIC_GENERIC_MODEL_INCLUDED 2 #define CPPAD_CG_ATOMIC_GENERIC_MODEL_INCLUDED 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,
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);
167 bool allSelected =
true;
168 for (
size_t i = 0; i < m; i++) {
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++) {
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]) {
VectorBase ForwardZero(const VectorBase &x)
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
CGAtomicGenericModel(GenericModel< Base > &model)
VectorBase ReverseTwo(const VectorBase &tx, const VectorBase &ty, const VectorBase &py)
VectorBase ForwardOne(const VectorBase &tx)
VectorBase ReverseOne(const VectorBase &tx, const VectorBase &ty, const VectorBase &py)
virtual std::vector< std::set< size_t > > HessianSparsitySet()=0
virtual size_t Range() const =0
virtual size_t Domain() const =0