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();
102 CppAD::cg::multMatrixMatrixSparsity(jacSparsity, r, s, m, n, q);
107 bool rev_sparse_jac(
size_t q,
111 return rev_sparse_jac(q, rT, sT);
114 bool rev_sparse_jac(
size_t q,
117 size_t n = model_.
Domain();
118 size_t m = model_.
Range();
119 for (
size_t i = 0; i < n; i++) {
123 const std::vector<std::set<size_t> > jacSparsity = model_.JacobianSparsitySet();
125 CppAD::cg::multMatrixMatrixSparsityTrans(rT, jacSparsity, sT, m, n, q);
138 return rev_sparse_hes(vx, s, t, q, r, u, v);
148 size_t n = model_.
Domain();
149 size_t m = model_.
Range();
151 for (
size_t i = 0; i < n; i++) {
155 const std::vector<std::set<size_t> > jacSparsity = model_.JacobianSparsitySet();
161 CppAD::cg::multMatrixTransMatrixSparsity(jacSparsity, u, v, m, n, q);
164 bool allSelected =
true;
165 for (
size_t i = 0; i < m; i++) {
175 sparsitySF2R.resize(n);
176 CppAD::cg::multMatrixTransMatrixSparsity(sparsitySF2R, r, v, n, n, q);
178 std::vector<std::set<size_t> > sparsitySF2R(n);
179 for (
size_t i = 0; i < m; i++) {
184 CppAD::cg::multMatrixTransMatrixSparsity(sparsitySF2R, r, v, n, n, q);
190 for (
size_t i = 0; i < m; i++) {
192 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