1 # ifndef CPPAD_CORE_REV_SPARSE_JAC_HPP 
    2 # define CPPAD_CORE_REV_SPARSE_JAC_HPP 
  211 template <
class Base>
 
  212 template <
class VectorSet>
 
  220 {    
size_t n = Domain();
 
  227      CheckSimpleVector<bool, VectorSet>();
 
  231           "RevSparseJac: q is not greater than zero" 
  234           size_t(r.size()) == q * m,
 
  235           "RevSparseJac: size of r is not equal to\n" 
  236           "q times range dimension for ADFun object." 
  241      var_sparsity.
resize(num_var_tape_, q);
 
  244      for(
size_t i = 0; i < m; i++)
 
  247           {    
for(
size_t j = 0; j < q; j++) 
if( r[ i * q + j ] )
 
  251           {    
for(
size_t j = 0; j < q; j++) 
if( r[ j * m + i ] )
 
  256      for(
size_t i = 0; i < m; i++)
 
  270      for(
size_t j = 0; j < n; j++)
 
  278           {    
for(
size_t i = 0; i < q; i++)
 
  279                     s[ j * q + i ] = 
false;
 
  282           {    
for(
size_t i = 0; i < q; i++)
 
  283                     s[ i * n + j ] = 
false;
 
  290                     s[ j * q + i ] = 
true;
 
  291                else s[ i * n + j ] = 
true;
 
  324 template <
class Base>
 
  325 template <
class VectorSet>
 
  327      const std::set<size_t>&      set_type          ,
 
  335           s.resize( Domain() );
 
  339      std::set<size_t>::const_iterator itr_1;
 
  342      CheckSimpleVector<std::set<size_t>, VectorSet>(
 
  343           local::one_element_std_set<size_t>(), local::two_element_std_set<size_t>()
 
  347      size_t n = ind_taddr_.size();
 
  348      size_t m = dep_taddr_.size();
 
  352           "RevSparseJac: q is not greater than zero" 
  355           size_t(r.size()) == q || transpose,
 
  356           "RevSparseJac: size of r is not equal to q and transpose is false." 
  359           size_t(r.size()) == m || ! transpose,
 
  360           "RevSparseJac: size of r is not equal to m and transpose is true." 
  365      var_sparsity.
resize(num_var_tape_, q);
 
  369      {    
for(
size_t i = 0; i < m; i++)
 
  370           {    itr_1 = r[i].begin();
 
  371                while(itr_1 != r[i].end())
 
  372                {    
size_t j = *itr_1++;
 
  375                     "RevSparseJac: transpose is true and element of the set\n" 
  376                     "r[i] has value greater than or equal q." 
  384      {    
for(
size_t i = 0; i < q; i++)
 
  385           {    itr_1 = r[i].begin();
 
  386                while(itr_1 != r[i].end())
 
  387                {    
size_t j = *itr_1++;
 
  390                     "RevSparseJac: transpose is false and element of the set\n" 
  391                     "r[i] has value greater than or equal range dimension." 
  399      for(
size_t i = 0; i < m; i++)
 
  414      for(
size_t j = 0; j < n; j++)
 
  481 template <
class Base>
 
  482 template <
class VectorSet>
 
  542 template <
class Base>
 
  549 {    
size_t n = Domain();
 
  561      for(
size_t i = 0; i < m; i++)
 
  567      var_sparsity.
resize(num_var_tape_, q);
 
  571      {    
for(
size_t i = 0; i < m; i++)
 
  581      {    
for(
size_t j = 0; j < q; j++)
 
  591      for(
size_t i = 0; i < m; i++)
 
  610      for(
size_t j = 0; j < n; j++)
 
  629      for(
size_t i = 0; i < s.
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 process_post(size_t i)
process post entries for a specific set. 
size_t end(void) const 
Fetch end for this vector of sets object. 
void post_element(size_t i, size_t element)
Post an element for delayed addition to a set. 
void RevSparseJacCase(bool set_type, bool transpose, bool dependency, size_t p, const VectorSet &s, VectorSet &r)
Private helper function for RevSparseJac(q, r, transpose) boolean sparsity. 
VectorSet RevSparseJac(size_t q, const VectorSet &s, bool transpose=false, bool dependency=false)
User API for Jacobian sparsity patterns using reverse mode. 
Vector of sets of postivie integers, each set stored as a packed boolean array. 
void post_element(size_t i, size_t element)
Post an element for delayed addition to a set. 
void RevSparseJacCheckpoint(size_t q, const local::sparse_list &r, bool transpose, bool dependency, local::sparse_list &s)
Reverse mode Jacobian sparsity calculation used by checkpoint functions. 
Two constant standard sets (currently used for concept checking). 
#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 rev_jac_sweep(const local::player< Base > *play, bool dependency, size_t n, size_t numvar, Vector_set &var_sparsity)
Given the sparsity pattern for the dependent variables, RevJacSweep computes the sparsity pattern for...
void resize(size_t n_set, size_t end)
Change number of sets, set end, and initialize all sets as empty.