I use ForwardDiff.jacobian in the following way:
function _jacobian_ad_forward(p, t0, u0_ode, du_ode, config)
J = ForwardDiff.jacobian(du_ode, u0_ode, config) do du_ode, u_ode
f!(du_ode, u_ode, p, t0)
end
return J
end
where my Jacobian J is typically very sparse.
I am aware of SparseDiffTools.jl which offers a sparse Jacobian computation based on a to-be-supplied sparsity pattern.
To my understanding SparseDiffTools.jl does computations then only for the non-zero entries according to the sparsity pattern.
In my case, obtaining the sparsity pattern is not easy without major refactoring of the code behind f.
Also, the actual computation of the Jacobian is not too time consuming, I am more worried about the memory requirements for storing entire J.
Thus, my question: Is it possible to use ForwardDiff.jacobian (or a related function) such that only the non-zero outcomes are stored (in a sparse format)?