Implementation
This function must be defined if
afun
is
used to define an ADFun
object
f
,
and Jacobian sparsity patterns are computed for
f
.
(Computing Hessian sparsity patterns and optimizing
requires Jacobian sparsity patterns.)
dependency
If
dependency
is true,
then
pattern_out
is a
dependency pattern
for this atomic function.
Otherwise it is a
sparsity pattern
for the
derivative of the atomic function.
select_x
This argument has size equal to the number of arguments to this
atomic function; i.e. the size of
ax
.
It specifies which domain components are included in
the calculation of
pattern_out
.
If
select_x[j]
is false, then there will be no indices
k
such that
pattern_out.col()[k] == j
.
select_y
This argument has size equal to the number of results to this
atomic function; i.e. the size of
ay
.
It specifies which range components are included in
the calculation of
pattern_out
.
If
select_y[i]
is false, then there will be no indices
k
such that
pattern_out.row()[k] == i
.
pattern_out
This input value of
pattern_out
does not matter.
Upon return it is a
dependency or sparsity pattern for the Jacobian of @(@
g(x)
@)@,
the function corresponding to
afun
;
dependency
above.
To be specific, there are non-negative indices
i
,
j
,
k
such that
pattern_out.row()[k] == i pattern_out.col()[k] == j
if and only if
select_x[j]
is true,
select_y[j]
is true,
and @(@
g_i(x)
@)@ depends on the value of @(@
x_j
@)@
(and the partial of @(@
g_i(x)
@)@ with respect to
@(@
x_j
@)@ is possibly non-zero).
ok
If this calculation succeeded,
ok
is true.
Otherwise it is false.
Examples
The file atomic_three_jac_sparsity.cpp
contains an example and test
that uses this routine.
Input File: include/cppad/core/atomic/three/jac_sparsity.hpp