Skip to content

Commit afe5a76

Browse files
Merge pull request #3991 from TorkelE/event_discpars_autoinfer
Automatic inference of discrete parameters in events
2 parents 5a49e93 + 4f83056 commit afe5a76

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

test/symbolic_events.jl

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1374,7 +1374,8 @@ end
13741374
@parameters p2(t) = 1.0
13751375
@variables x(t) = 0.0
13761376
@variables x2(t)
1377-
event = [0.5] => [p2 ~ Pre(t)]
1377+
event = ModelingToolkit.SymbolicDiscreteCallback(
1378+
[0.5] => [p2 ~ Pre(t)]; discrete_parameters = [p2])
13781379

13791380
eq = [
13801381
D(x) ~ p2,
@@ -1385,7 +1386,7 @@ end
13851386
prob = ODEProblem(sys, [], (0.0, 1.0))
13861387
sol = solve(prob)
13871388
@test SciMLBase.successful_retcode(sol)
1388-
@test sol[x, end]1.0 atol=1e-6
1389+
@test sol[x, end]0.75 atol=1e-6
13891390
end
13901391

13911392
@testset "Symbolic affects are compiled in `complete`" begin
@@ -1535,3 +1536,30 @@ end
15351536
@test v_sol[v] [vini, -vini, vini]
15361537
@test M_sol[M] [Mini, -Mini, Mini]
15371538
end
1539+
1540+
@testset "Check array parameter and variables event" begin
1541+
# Creates the model using the macro.
1542+
us = @variables begin
1543+
X(t)[1:2] = [4.0, 4.0]
1544+
end
1545+
ps = @parameters begin
1546+
k(t)[1:2] = [1, 1]
1547+
kup = 2.0
1548+
end
1549+
eqs = [
1550+
D(X[1]) ~ -k[1]*X[1] + k[2]*X[2]
1551+
D(X[2]) ~ k[1]*X[1] - k[2]*X[2]
1552+
]
1553+
c_event = SymbolicContinuousCallback(
1554+
(k[2] ~ t) => [k[1] ~ Pre(k[1] + kup)]; discrete_parameters = [k[1]])
1555+
@mtkcompile model = System(eqs, t, us, ps; continuous_events = [c_event])
1556+
1557+
# Simulates the model. Checks that the correct values are achieved.
1558+
prob = ODEProblem(model, [], (0.0, 100.0))
1559+
sol = solve(prob, Rosenbrock23())
1560+
@test sol.ps[model.kup] == 2.0
1561+
@test sol.ps[model.k[1]][end] == 3.0
1562+
@test sol.ps[model.k[2]][end] == 1.0
1563+
@test sol[model.X[1]][end]2.0 atol=1e-8 rtol=1e-8
1564+
@test sol[model.X[2]][end]6.0 atol=1e-8 rtol=1e-8
1565+
end

0 commit comments

Comments
 (0)