In our library of SIR models (see e.g. https://github.com/epirecipes/sir-julia/blob/master/markdown/ode/ode.md), I’m trying to store the maximum of one of the state variables (I); I don’t want to just calculate the maximum of the state using the output from the solution, as it doesn’t use interpolation. What’s the best way of doing this in the #sciml ecosystem using callbacks (e.g. storing u[2] when du[2]=0)?
Is there a reason to save in callbacks instead of using save_idxs here?
No specific reason - in my model I just need to store I(t) when dI/dt=0 as the model runs.
Just use a continuous callback on integrator(t,Val{1})
to get the derivatives and then save to some array in the affect!
Thanks - I was looking for examples that worked on derivatives rather than states, but couldn’t find any. What does the Val{1}
mean in integrator(t,Val{1})
?
The number in the brackets indicates which derivative you get from the integrator, so Val{1} means first derivative. The default is Val{0}, i.e, you get the state values.
Explained here:
https://diffeq.sciml.ai/stable/basics/integrator/
Specifically this line:
integrator(t,deriv::Type=Val{0};idxs=nothing,continuity=:left)
1 Like