-
Bentriou Mahmoud authored
Add of a new type of Trajectory: SynchronizedTrajectory which is created by the simulation of a synchronized model with an LHA. Simulate function for SynchronizedModel executes and is tested by two simple models. Next step : Cosmos based tests.
Bentriou Mahmoud authoredAdd of a new type of Trajectory: SynchronizedTrajectory which is created by the simulation of a synchronized model with an LHA. Simulate function for SynchronizedModel executes and is tested by two simple models. Next step : Cosmos based tests.
SIR_col_buffer.jl 1.27 KiB
import StaticArrays: SVector, SMatrix, @SMatrix
d=3
k=2
dict_var = Dict("S" => 1, "I" => 2, "R" => 3)
dict_p = Dict("ki" => 1, "kr" => 2)
l_tr = ["R1","R2"]
p = [0.0012, 0.05]
x0 = [95, 5, 0]
t0 = 0.0
function SIR_col_buffer_f!(mat_x::Matrix{Int}, l_t::Vector{Float64}, l_tr::Vector{String}, idx::Int,
xn::AbstractVector{Int}, tn::Float64, p::Vector{Float64})
a1 = p[1] * xn[1] * xn[2]
a2 = p[2] * xn[2]
l_a = SVector(a1, a2)
asum = sum(l_a)
# column-major order
l_nu = @SMatrix [-1 0;
1 -1;
0 1]
u1, u2 = rand(), rand()
tau = - log(u1) / asum
b_inf = 0.0
b_sup = a1
reaction = 0
for i = 1:2
if b_inf < asum*u2 < b_sup
reaction = i
break
end
b_inf += l_a[i]
b_sup += l_a[i+1]
end
nu = @view l_nu[:,reaction] # macro for avoiding a copy
for i = 1:3
mat_x[i,idx] = xn[i]+nu[i]
end
l_t[idx] = tn + tau
l_tr[idx] = "R$(reaction)"
end
isabsorbing_SIR_col_buffer(p::Vector{Float64}, xn::AbstractVector{Int}) = (p[1]*xn[1]*xn[2] + p[2]*xn[2]) === 0.0
g = ["I"]
SIR_col_buffer = ContinuousTimeModel(d,k,dict_var,dict_p,l_tr,p,x0,t0,SIR_col_buffer_f!,isabsorbing_SIR_col_buffer; g=g)
export SIR_col_buffer