Suppose I want to add a discrete event when solving an ODE using DifferentialEquations.jl
, and if the condition is met I want to terminate the solving process. I can do that with the following:
cb1_fun(u,t,integrator) = begin
# some code which return either true or false
end
cb1 = DiscreteCallback(cb1_fun, terminate!)
prob = ODEProblem(f, y0, (0.0, tf), par)
@time sol = solve(prob, FBDF(), callback=cb1);
Right now if the event function is triggered, I get sol.retcode = :Terminated
. If I want to be more specific and add my own retcode, how can I do it? The documentation says:
terminate!(i::DEIntegrator[, retcode = :Terminated])
Terminates the integrator by emptying tstops
. This can be used in events and callbacks to immediately end the solution process. Optionally, retcode
may be specified (see: Return Codes (RetCodes)).
But I don’t really understand the syntax of the square bracket. I tried something like cb1 = DiscreteCallback(cb1_fun, terminate!(retcode=:MaxTimeReached))
and it doesn’t work. Would be great if someone can let me know how retcode
should be specified.
Thanks.