I have a fairly large model I am trying to solve (~100 differential equations). There is a particular parameter that changes every 28 days. Right now, I switch this parameter using a callback function
function model!(du, u, params, t)
a bunch of equations involving params.r
end
condition(u,t,integrator) = round(t, digits=3) ∈ collect(28:28:800)
function dose!(integrator)
integrator.p.r = 1 - integrator.p.r
end
cb = DiscreteCallback(condition, dose!, save_positions=(false,false))
function run_model()
prob = ODEProblem(model!, u0, tspan, params
sol = solve(prob, callback = cb)
end
So you see, every 28 time steps, I basically switch the r
parameter that cycles through 0 and 1. My question is, is it cheaper and better to do this in the model!
function directly and get rid of callbacks? Can I have something like
function model!(du, u, params, t)
if t satisfies condition
params.r = 1 - params.r
end
a bunch of equations involving params.r
end
From preliminary testing this seems to work, but I am not sure what the correct, more efficient way of doing it is.