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
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.
ident_zero_x
This can sometimes be used to create more efficient sparsity patterns.
If you do not see a way to do this, you can just ignore it.
This argument has size equal to the number of arguments to this
atomic function; i.e. the size of
ax
.
If
ident_zero_x[j]
is true, the argument
ax[j]
is a constant parameter that is identically zero.
An identically zero value times any other value can be treated
as being identically zero.
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
.
If
select_x[j]
is true, the argument
ax[j]
is a variable and
ident_zero_x[j]
will be false.
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
.
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.