For the Verner family solver of DifferentialEquations.jl
, Vern6()
through Vern9()
, it is documented that the interpolation is “lazy” and
These methods when lazy assume that the parameter vector
p
will be unchanged between the moment of the interval solving and the interpolation. Ifp
is changed in a ContinuousCallback, or in a DiscreteCallback and the continuous solution is used after the full solution, then setlazy=false
.
link
In my code, I used p to allocate the temporary matrix for things like mul!
e.g.
hdim = 10
p = (
x=zeros(Complex{Float64}, hdim, hdim),
y=zeros(Complex{Float64}, hdim, hdim)
)
and in the ode problem function, p.x
, p.y
, etc is used to hold temporary allocations, pseudo-code:
function f!(du,u,p,t)
...
mul!(p.x, a, b)
...
...
du .= p.x .+ p.y
end
so p changes during calculation (different p before and after f!
gets called, and different p at different times). However, different input value of p does not change the calculation result since it’s always overwritten inside f!()
with e.g. mul!(p.x, a, b)
. In this case, is the lazy=false
option needed? Thanks a lot!