Where is `OrdinaryDiffEq.ode_interpolation`'s output type defined?

I’ve defined my own subtype of DenseArray called CartesianState. The source code is available here. The following functionality works…

state = CartesianState(randn(6))
similar(state)
SymbolicUtils.Code.create_array(::Type{<:CartesianState}, ...)
# others

I’d like to use my custom array as a type for DifferentialEquations solvers. I can use my new array type to make an ODEProblem, and solving the problem returns a valid ODESolution.

The ODESolution u field is a Vector of CartesianState values – great! But when I interpolate between time steps via (::ODESolution)(t), I get a Vector{Float64} back.

I’ve traced this back to OrdinaryDiffEq.ode_interpolation, but I can’t figure out where that function’s output type is determined. Does anyone know offhand?

It should just be defined as the result of a broadcast operation:

1 Like