@@ -1495,3 +1495,43 @@ end
14951495 @test v_sol[v] ≈ [vini, - vini, vini]
14961496 @test M_sol[M] ≈ [Mini, - Mini, Mini]
14971497end
1498+
1499+ @testset " Issue#3990: Scalarized array passed to `discrete_parameters` of symbolic affect" begin
1500+ N = 2
1501+ @parameters v (t)[1 : N]
1502+ @parameters M (t)[1 : N, 1 : N]
1503+
1504+ @variables x (t)
1505+
1506+ Mini = rand (N, N) ./ (N^ 2 )
1507+ vini = vec (sum (Mini, dims = 1 ))
1508+
1509+ v_eq = [D (x) ~ x * Symbolics. scalarize (sum (v))]
1510+ M_eq = [D (x) ~ x * Symbolics. scalarize (sum (M))]
1511+
1512+ v_event = ModelingToolkit. SymbolicDiscreteCallback (
1513+ 1.0 ,
1514+ [v ~ - Pre (v)],
1515+ discrete_parameters = collect (v)
1516+ )
1517+
1518+ M_event = ModelingToolkit. SymbolicDiscreteCallback (
1519+ 1.0 ,
1520+ [M ~ - Pre (M)],
1521+ discrete_parameters = vec (collect (M))
1522+ )
1523+
1524+ @mtkcompile v_sys = System (v_eq, t; discrete_events = v_event)
1525+ @mtkcompile M_sys = System (M_eq, t; discrete_events = M_event)
1526+
1527+ u0p0_map = Dict (x => 1.0 , M => Mini, v => vini)
1528+
1529+ v_prob = ODEProblem (v_sys, u0p0_map, (0.0 , 2.5 ))
1530+ M_prob = ODEProblem (M_sys, u0p0_map, (0.0 , 2.5 ))
1531+
1532+ v_sol = solve (v_prob, Tsit5 ())
1533+ M_sol = solve (M_prob, Tsit5 ())
1534+
1535+ @test v_sol[v] ≈ [vini, - vini, vini]
1536+ @test M_sol[M] ≈ [Mini, - Mini, Mini]
1537+ end
0 commit comments