Purpose
This function is used by ForSparseHes
to compute
Hessian sparsity patterns.
If you are using ForSparseHes
,
one of the versions of this
virtual function must be defined by the
atomic_user
class.
Given a sparsity pattern
for
a diagonal matrix @(@
R \in B^{n \times n}
@)@, and
a row vector @(@
S \in B^{1 \times m}
@)@,
this routine computes the sparsity pattern for
@[@
H(x) = R^\R{T} \cdot (S \cdot f)^{(2)}( x ) \cdot R
@]@
vx
The argument
vx
has prototype
const CppAD:vector<bool>& vx vx.size() == n
, and
for @(@
j = 0 , \ldots , n-1
@)@,
vx[j]
is true if and only if
ax[j]
is a variable
in the corresponding call to
afun(ax, ay)
r
This argument has prototype
const CppAD:vector<bool>& r
and is a atomic_sparsity
pattern for
the diagonal of @(@
R \in B^{n \times n}
@)@.
s
The argument
s
has prototype
const CppAD:vector<bool>& s
and its size is
m
.
It is a sparsity pattern for @(@
S \in B^{1 \times m}
@)@.
h
This argument has prototype
atomic_sparsity& h
The input value of its elements
are not specified (must not matter).
Upon return,
h
is a
atomic_sparsity
pattern for
@(@
H(x) \in B^{n \times n}
@)@ which is defined above.
x
The argument has prototype
const CppAD::vector<Base>& x
and size is equal to the
n
.
This is the Value
value corresponding to the parameters in the
vector ax
(when the atomic function was called).
To be specific, if
if( Parameter(ax[i]) == true ) x[i] = Value( ax[i] );
else x[i] = CppAD::numeric_limits<Base>::quiet_NaN();
The version of this function with out the
x
argument is deprecated;
i.e., you should include the argument even if you do not use it.
Examples
The file atomic_for_sparse_hes.cpp
contains an example and test
that uses this routine.
It returns true if the test passes and false if it fails.
Input File: cppad/core/atomic_base.hpp