Hi everyone,
I’m trying to add two DiscreteCallbacks to my integrator using CallbackSet. Each of them seem to work when the other one is not present, but the first one does not work when the second one is present. This is my code:
using DifferentialEquations
using DelimitedFiles
function Helmholtz(du,u,p,t)
d=0.1;
α=6.0;
β=1.0;
du[1] = u[2]
du[2] = -d *u[2]-α* u[1]+β*u[1].^2
end
function σ_Helmholtz(du,u,p,t)
du[1] = 0.5
du[2] = 0.5
end
mat_res=
for n=1:5
u0 = [5.0,0.0]
tspan=(0.0,300.0)
t_int=0.0:0.01:300.0;
#We build the problem:
prob_sde_Helmholtz = SDEProblem(Helmholtz,σ_Helmholtz,u0,tspan)
#TO STOP THE SIMULATION WHEN THE SOLUTION GOES BEYOND 100
condition(u,t,integrator) = u[1]>100 #if x hits 100
affect!(integrator) = terminate!(integrator) #the computation stops
cb1 = DiscreteCallback(condition,affect!, save_positions=(true,true))
# RESETTING TO A GIVEN POSITION
t_reset = [20.0 40.0 60.0];
condition(u,t,integrator) = t ∈ t_reset && (u[1] < 6.0)
affect!(integrator) = integrator.u[1] =5.0
cb2 = DiscreteCallback(condition,affect!,save_positions=(true,true))
a=CallbackSet(cb1,cb2);
sol = solve(prob_sde_Helmholtz, SRIW1(),callback=a,tstops=t_reset, reltol=1e-3,abstol=1e-6, maxiters=1e10)
sol_int = sol(t_int);
sol_iter=[sol_int[1,:] sol_int[2,:]];
push!(mat_res,sol_iter’)
@show n
end
mat_res=hcat(mat_res’…)
Any idea on how to fix it?