SciML / SciMLOperators.jl

SciMLOperators.jl: Matrix-Free Operators for the SciML Scientific Machine Learning Common Interface in Julia
https://docs.sciml.ai/SciMLOperators/stable
MIT License
42 stars 9 forks source link

Dual number cache for use with ForwardDiff.jl #243

Open ctessum opened 1 month ago

ctessum commented 1 month ago

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.

vpuri3 commented 1 month ago

trying calling cache_operator with a dual array

ChrisRackauckas commented 3 weeks ago

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.