@@ -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
13891390end
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]
15371538end
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