SciMLOperators.jl icon indicating copy to clipboard operation
SciMLOperators.jl copied to clipboard

Dual number cache for use with ForwardDiff.jl

Open ctessum opened this issue 1 year ago • 2 comments

Is your feature request related to a problem? Please describe.

The problem is described here: https://discourse.julialang.org/t/how-to-use-scimloperators-jl-with-autograd-in-differentialequations-jl/117731

Describe the solution you’d like

I would like to be able to use SciMLOperators in an in-place ODEFunction, with a solver that does autodiff using ForwardDiff.jl. Here is an example:

using SciMLOperators, DifferentialEquations

op = FunctionOperator((du,u,p,t) -> du .= u .* u, rand(10), t=0.0, p=[0.0], batch=true)
op = cache_operator(op, rand(10))

prob = ODEProblem{true}(op, rand(10), (0.0,1.0), [0.0])

solve(prob, Rosenbrock23())

Currently, the above code doesn't work, presumably owing to the operator cache being Float64s rather than dual numbers.

ctessum avatar Aug 05 '24 12:08 ctessum

trying calling cache_operator with a dual array

vpuri3 avatar Aug 05 '24 14:08 vpuri3

The cache in this case would need to be a PreallocationTools.DualCache object so it could dispatch to different forms on command. That's definitely possible.

ChrisRackauckas avatar Aug 17 '24 19:08 ChrisRackauckas