@@ -1553,9 +1553,66 @@ end
15531553 @test all (x -> any (isapprox (x, atol = 1e-6 ), sol2. t), expected_tstops)
15541554end
15551555
1556- let
1556+ @testset " Validate input types " begin
15571557 @parameters p d
15581558 @variables X (t):: Int64
15591559 eq = D (X) ~ p - d* X
15601560 @test_throws Exception @mtkbuild osys = ODESystem ([eq], t)
15611561end
1562+
1563+ @testset " dae_order_lowering basic test" begin
1564+ @parameters a
1565+ @variables x (t) y (t) z (t)
1566+ @named dae_sys = ODESystem ([
1567+ D (x) ~ y,
1568+ 0 ~ x + z,
1569+ 0 ~ x - y + z
1570+ ], t, [z, y, x], [])
1571+
1572+ lowered_dae_sys = dae_order_lowering (dae_sys)
1573+ @variables x1 (t) y1 (t) z1 (t)
1574+ expected_eqs = [
1575+ 0 ~ x + z,
1576+ 0 ~ x - y + z,
1577+ Differential (t)(x) ~ y
1578+ ]
1579+ lowered_eqs = equations (lowered_dae_sys)
1580+ sorted_lowered_eqs = sort (lowered_eqs, by= string)
1581+ sorted_expected_eqs = sort (expected_eqs, by= string)
1582+ @test sorted_lowered_eqs == sorted_expected_eqs
1583+
1584+ expected_vars = Set ([z, y, x])
1585+ lowered_vars = Set (unknowns (lowered_dae_sys))
1586+ @test lowered_vars == expected_vars
1587+ end
1588+
1589+ @testset " dae_order_lowering test with structural_simplify" begin
1590+ @variables x (t) y (t) z (t)
1591+ @parameters M b k
1592+ eqs = [
1593+ D (D (x)) ~ - b / M * D (x) - k / M * x,
1594+ 0 ~ y - D (x),
1595+ 0 ~ z - x
1596+ ]
1597+ ps = [M, b, k]
1598+ default_u0 = [
1599+ D (x) => 0.0 , x => 10.0 , y => 0.0 , z => 10.0
1600+ ]
1601+ default_p = [M => 1.0 , b => 1.0 , k => 1.0 ]
1602+ @named dae_sys = ODESystem (eqs, t, [x, y, z], ps; defaults = [default_u0; default_p])
1603+
1604+ simplified_dae_sys = structural_simplify (dae_sys)
1605+
1606+ lowered_dae_sys = dae_order_lowering (simplified_dae_sys)
1607+ lowered_dae_sys = complete (lowered_dae_sys)
1608+
1609+ tspan = (0.0 , 10.0 )
1610+ prob = ODEProblem (lowered_dae_sys, nothing , tspan)
1611+ sol = solve (prob, Tsit5 ())
1612+
1613+ @test sol. t[end ] == tspan[end ]
1614+ @test sum (abs, sol. u[end ]) < 1
1615+
1616+ prob = ODEProblem {false} (lowered_dae_sys; u0_constructor = x -> SVector (x... ))
1617+ @test prob. u0 isa SVector
1618+ end
0 commit comments