1 # ifndef CPPAD_CORE_REV_SPARSE_HES_HPP
2 # define CPPAD_CORE_REV_SPARSE_HES_HPP
192 # include <algorithm>
225 template <
class Base>
226 template <
class VectorSet>
233 {
size_t n = Domain();
239 for_jac_sparse_pack_.n_set() > 0,
240 "RevSparseHes: previous stored call to ForSparseJac did not "
241 "use bool for the elements of r."
250 CheckSimpleVector<bool, VectorSet>();
253 q == for_jac_sparse_pack_.end(),
254 "RevSparseHes: q is not equal to its value\n"
255 "in the previous call to ForSparseJac with this ADFun object."
258 size_t(s.size()) == m,
259 "RevSparseHes: size of s is not equal to\n"
260 "range dimension for ADFun object."
266 for(i = 0; i < num_var_tape_; i++)
268 for(i = 0; i < m; i++)
270 RevJac[ dep_taddr_[i] ] = s[i];
275 rev_hes_pattern.
resize(num_var_tape_, q);
282 for_jac_sparse_pack_,
289 for(j = 0; j < n; j++)
290 {
for(i = 0; i < q; i++)
292 h[ j * q + i ] =
false;
293 else h[ i * n + j ] =
false;
298 for(j = 0; j < n; j++)
311 h[ j * q + i ] =
true;
312 else h[ i * n + j ] =
true;
340 template <
class Base>
341 template <
class VectorSet>
343 const std::set<size_t>& set_type ,
348 {
size_t n = Domain();
358 for_jac_sparse_set_.n_set() > 0,
359 "RevSparseHes: previous stored call to ForSparseJac did not "
360 "use std::set<size_t> for the elements of r."
367 std::set<size_t>::const_iterator itr_1;
370 CheckSimpleVector<std::set<size_t>, VectorSet>(
371 local::one_element_std_set<size_t>(), local::two_element_std_set<size_t>()
375 q == for_jac_sparse_set_.end(),
376 "RevSparseHes: q is not equal to its value\n"
377 "in the previous call to ForSparseJac with this ADFun object."
381 "RevSparseHes: size of s is not equal to one."
387 for(i = 0; i < num_var_tape_; i++)
389 itr_1 = s[0].begin();
390 while( itr_1 != s[0].end() )
394 "RevSparseHes: an element of the set s[0] has value "
395 "greater than or equal m"
398 RevJac[ dep_taddr_[i] ] =
true;
404 rev_hes_pattern.
resize(num_var_tape_, q);
420 for(j = 0; j < n; j++)
492 template <
class Base>
493 template <
class VectorSet>
495 size_t q,
const VectorSet& s,
bool transpose
551 template <
class Base>
557 {
size_t n = Domain();
569 for(
size_t i = 0; i < num_var_tape_; i++)
571 for(
size_t i = 0; i < m; i++)
573 RevJac[ dep_taddr_[i] ] = s[i];
578 rev_hes_pattern.
resize(num_var_tape_, q);
597 for(
size_t j = 0; j < n; j++)
615 for(
size_t i = 0; i < h.
n_set(); ++i)
#define CPPAD_ASSERT_KNOWN(exp, msg)
Check that exp is true, if not print msg and terminate execution.
size_t end(void) const
Fetch end for this vector of sets object.
Vector of sets of positive integers, each set stored as a singly linked list.
void RevSparseHesCheckpoint(size_t q, vector< bool > &s, bool transpose, local::sparse_list &h)
Hessian sparsity patterns calculation used by checkpoint functions.
size_t end(void) const
Fetch end for this vector of sets object.
File used to define pod_vector class.
void rev_hes_sweep(const local::player< Base > *play, size_t n, size_t numvar, const Vector_set &for_jac_sparse, bool *RevJac, Vector_set &rev_hes_sparse)
Given the forward Jacobian sparsity pattern for all the variables, and the reverse Jacobian sparsity ...
size_t size(void) const
number of elements currently in this vector.
Vector of sets of postivie integers, each set stored as a packed boolean array.
VectorSet RevSparseHes(size_t q, const VectorSet &s, bool transpose=false)
User API for Hessian sparsity patterns using reverse mode.
void post_element(size_t i, size_t element)
Post an element for delayed addition to a set.
Two constant standard sets (currently used for concept checking).
Type * data(void)
current data pointer is no longer valid after any of the following: extend, erase, operator=, and ~pod_vector. Take extreem care when using this function.
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
void resize(size_t n_set, size_t end)
Start a new vector of sets.
cons_iterator for one set of positive integers in a sparse_pack object.
void process_post(size_t i)
process post entries for a specific set.
size_t n_set(void) const
Fetch n_set for vector of sets object.
cons_iterator for one set of positive integers in a sparse_list object.
void RevSparseHesCase(bool set_type, bool transpose, size_t q, const VectorSet &s, VectorSet &h)
Private helper function for RevSparseHes(q, s) bool sparsity.
void resize(size_t n_set, size_t end)
Change number of sets, set end, and initialize all sets as empty.