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.