1 # ifndef CPPAD_CORE_FOR_HES_SPARSITY_HPP
2 # define CPPAD_CORE_FOR_HES_SPARSITY_HPP
159 template <
class Base>
160 template <
class BoolVector,
class SizeVector>
162 const BoolVector& select_domain ,
163 const BoolVector& select_range ,
166 {
size_t n = Domain();
170 size_t( select_domain.size() ) == n,
171 "for_hes_sparsity: size of select_domain is not equal to "
172 "number of independent variables"
175 size_t( select_range.size() ) == m,
176 "for_hes_sparsity: size of select_range is not equal to "
177 "number of dependent variables"
180 bool transpose =
false;
181 bool dependency =
false;
187 internal_for_jac.
resize(num_var_tape_, n + 1 );
188 for(
size_t j = 0; j < n; j++)
if( select_domain[j] )
191 internal_for_jac.
add_element( ind_taddr_[j] , ind_taddr_[j] );
203 internal_rev_jac.
resize(num_var_tape_, 1);
204 for(
size_t i = 0; i < m; i++)
if( select_range[i] )
219 internal_for_hes.
resize(n + 1, n + 1);
233 transpose, ind_taddr_, internal_for_hes, pattern_tmp
240 internal_for_jac.
resize(num_var_tape_, n + 1 );
241 for(
size_t j = 0; j < n; j++)
if( select_domain[j] )
244 internal_for_jac.
add_element( ind_taddr_[j] , ind_taddr_[j] );
257 internal_rev_jac.
resize(num_var_tape_, 1);
258 for(
size_t i = 0; i < m; i++)
if( select_range[i] )
273 internal_for_hes.
resize(n + 1, n + 1);
287 transpose, ind_taddr_, internal_for_hes, pattern_tmp
293 const SizeVector& row( pattern_tmp.
row() );
294 const SizeVector& col( pattern_tmp.
col() );
297 size_t nnz = pattern_tmp.
nnz();
298 pattern_out.
resize(nr, nc, nnz);
299 for(
size_t k = 0; k < nnz; k++)
301 pattern_out.
set(k, row[k], col[k] - 1);
#define CPPAD_ASSERT_KNOWN(exp, msg)
Check that exp is true, if not print msg and terminate execution.
Vector of sets of positive integers, each set stored as a singly linked list.
const SizeVector & col(void) const
column indices
void for_hes_sparsity(const BoolVector &select_domain, const BoolVector &select_range, bool internal_bool, sparse_rc< SizeVector > &pattern_out)
Forward Hessian sparsity patterns.
void add_element(size_t i, size_t element)
Add one element to a set.
void get_internal_sparsity(bool transpose, const vector< size_t > &internal_index, const InternalSparsity &internal_pattern, sparse_rc< SizeVector > &pattern_out)
Get sparsity pattern for a sub-set of variables.
size_t nr(void) const
number of rows in matrix
Vector of sets of postivie integers, each set stored as a packed boolean array.
sparsity pattern for a matrix with indices of type size_t
size_t nnz(void) const
number of possibly non-zero elements in matrix
void resize(size_t nr, size_t nc, size_t nnz)
resize
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
void add_element(size_t i, size_t element)
Add one element to a set.
void resize(size_t n_set, size_t end)
Start a new vector of sets.
size_t nc(void) const
number of columns in matrix
File used to define the ADFun<Base> class.
void set(size_t k, size_t r, size_t c)
set row and column for a possibly non-zero element
Routines that enable code to be independent of which internal spasity pattern is used.
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 for_hes_sweep(const local::player< Base > *play, size_t n, size_t numvar, const Vector_set &for_jac_sparse, const Vector_set &rev_jac_sparse, Vector_set &for_hes_sparse)
Given the forward Jacobian sparsity pattern for all the variables, and the reverse Jacobian sparsity ...
const SizeVector & row(void) const
row indices
void for_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 independent variables, ForJacSweep computes the sparsity pattern f...
void resize(size_t n_set, size_t end)
Change number of sets, set end, and initialize all sets as empty.