Skip to content

Commit 595a530

Browse files
committed
constant and variable rate assembly working
1 parent ff393c8 commit 595a530

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

test/jumpsystem.jl

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using ModelingToolkit, DiffEqJump, Test, LinearAlgebra
2+
MT = ModelingToolkit
3+
4+
# basic SIR model with tweaks
5+
@parameters β γ t
6+
@variables S I R
7+
rate₁ = β*S*I
8+
affect₁ = [S ~ S - 1, I ~ I + 1]
9+
rate₂ = γ*I+t
10+
affect₂ = [I ~ I - 1, R ~ R + 1]
11+
j₁ = ConstantRateJump(rate₁,affect₁)
12+
j₂ = VariableRateJump(rate₂,affect₂)
13+
js = JumpSystem([j₁,j₂], t, [S,I,R], [β,γ])
14+
mtjump1 = MT.assemble_crj(js, j₁)
15+
mtjump2 = MT.assemble_crj(js, j₂)
16+
17+
# doc version
18+
rate1(u,p,t) = (0.1/1000.0)*u[1]*u[2]
19+
function affect1!(integrator)
20+
integrator.u[1] -= 1
21+
integrator.u[2] += 1
22+
end
23+
jump1 = ConstantRateJump(rate1,affect1!)
24+
rate2(u,p,t) = 0.01u[2]+t
25+
function affect2!(integrator)
26+
integrator.u[2] -= 1
27+
integrator.u[3] += 1
28+
end
29+
jump2 = VariableRateJump(rate2,affect2!)
30+
31+
# test crjs
32+
u = [100, 9, 5]
33+
p = (0.1/1000,0.01)
34+
t = 1.0
35+
mutable struct TestInt
36+
u
37+
p
38+
t
39+
end
40+
mtintegrator = TestInt(u,p,t)
41+
integrator = TestInt(u,p,t)
42+
@test abs(mtjump1.rate(u,p,t) - jump1.rate(u,p,t)) < 10*eps()
43+
@test abs(mtjump2.rate(u,p,t) - jump2.rate(u,p,t)) < 10*eps()
44+
mtjump1.affect!(mtintegrator)
45+
jump1.affect!(integrator)
46+
@test norm(integrator.u - mtintegrator.u) < 10*eps()
47+
mtintegrator.u .= u; integrator.u .= u
48+
mtjump2.affect!(mtintegrator)
49+
jump2.affect!(integrator)
50+
@test norm(integrator.u - mtintegrator.u) < 10*eps()
51+
52+

0 commit comments

Comments
 (0)