Hello,
I have a question about the integrator interface of the DifferentialEquations package. I want to step through the solution process of a set of coupled ODEs (to wich I want to add a nonlinearity that I can’t use a callback for).
My issue is the following: the documentation gives the possibility of solving the integration problem step by step via
for i in integrator
end
However, it only exposes every second integration step. Why is this? How can I get access to every integration step?
Here is some sample code to demonstrate this:
using DifferentialEquations
#using CairoMakie for plotting
function dynamics!(du,u,p,t)
du[1] = 1.
end
begin
u0 = [0.]
t = 1.
dt = 0.1
tspan = (0., t)
prob = ODEProblem(dynamics!, u0, tspan, dt = dt);
integrator = init(prob, Euler(), save_everystep=true)
for i in integrator #simulation loop
@show i, integrator.iter
step!(integrator)
end
usol = [x[1] for x in integrator.sol.u]
end
""" #for plotting
begin
f= Figure()
ax = Axis(f[1,1])
lines!(integrator.sol.t,usol, label = "u")
axislegend(ax)
display(f)
end
"""
The output of the above code is the following:
(i, integrator.iter) = (t: 0.1; u: [0.1], 1)
(i, integrator.iter) = (t: 0.30000000000000004; u: [0.30000000000000004], 3)
(i, integrator.iter) = (t: 0.5; u: [0.5], 5)
(i, integrator.iter) = (t: 0.7; u: [0.7], 7)
(i, integrator.iter) = (t: 0.8999999999999999; u: [0.8999999999999999], 9)
As one can see, the integrator only exposes uneven integration steps. Why only uneven steps? Is there an option to expose all integration steps?