SciML / JumpProcesses.jl

Build and simulate jump equations like Gillespie simulations and jump diffusions with constant and state-dependent rates and mix with differential equations and scientific machine learning (SciML)
https://docs.sciml.ai/JumpProcesses/stable/
Other
135 stars 35 forks source link

`save_positions` not working with callbacks #327

Open isaacsas opened 1 year ago

isaacsas commented 1 year ago
using JumpProcesses

rate(u, p, t; debug=true) = 5.0
function affect!(integrator)
    integrator.u[1] += 1
    nothing
end
jump = VariableRateJump(rate, affect!; urate=(u,p,t)->10.0, rateinterval=(u,p,t)->0.1)
prob = DiscreteProblem([0.0], (0.0, 2.0), [1.0])
jump_prob_c = JumpProblem(prob, Coevolve(), jump; dep_graph=[[1]])

function terminate_condition(u, t, integrator)
    return u[1] >= 1
end

function terminate_affect!(integrator)
    terminate!(integrator)
end

terminate_cb = DiscreteCallback(terminate_condition, terminate_affect!; save_positions = (false,true)
solve(jump_prob_c, SSAStepper(); callback=terminate_cb, save_end = false)

gives

retcode: Terminated
Interpolation: Piecewise constant interpolation
t: 3-element Vector{Float64}:
 0.0
 0.04406872147816556
 0.04406872147816556
u: 3-element Vector{Vector{Float64}}:
 [0.0]
 [1.0]
 [1.0]

ignoring the callback's save_positions.