1- using OrdinaryDiffEq, ModelingToolkit, Test, LinearAlgebra
1+ using OrdinaryDiffEq, ModelingToolkit, Test, LinearAlgebra, StaticArrays
22using ModelingToolkit: t_nounits as t, D_nounits as D, MTKParameters
33
44@variables y (t)[1 : 3 ]
@@ -12,13 +12,18 @@ eqs = [D(y[1]) ~ -k[1] * y[1] + k[3] * y[2] * y[3],
1212sys = complete (sys)
1313@test_throws ArgumentError ODESystem (eqs, y[1 ])
1414M = calculate_massmatrix (sys)
15+ @test M isa Diagonal
1516@test M == [1 0 0
1617 0 1 0
1718 0 0 0 ]
1819
1920prob_mm = ODEProblem (sys, [y => [1.0 , 0.0 , 0.0 ]], (0.0 , 1e5 ),
2021 [k => [0.04 , 3e7 , 1e4 ]])
22+ @test prob_mm. f. mass_matrix isa Diagonal{Float64, Vector{Float64}}
2123sol = solve (prob_mm, Rodas5 (), reltol = 1e-8 , abstol = 1e-8 )
24+ prob_mm = ODEProblem (sys, SA[y => [1.0 , 0.0 , 0.0 ]], (0.0 , 1e5 ),
25+ [k => [0.04 , 3e7 , 1e4 ]])
26+ @test prob_mm. f. mass_matrix isa Diagonal{Float64, SVector{3 , Float64}}
2227
2328function rober (du, u, p, t)
2429 y₁, y₂, y₃ = u
@@ -43,3 +48,17 @@ eqs = [D(y[1]) ~ y[1], D(y[2]) ~ y[2], D(y[3]) ~ y[3]]
4348@named sys = ODESystem (eqs, t, collect (y), [k])
4449
4550@test calculate_massmatrix (sys) === I
51+
52+ @testset " Mass matrix `isa Diagonal` for `SDEProblem`" begin
53+ eqs = [D (y[1 ]) ~ - k[1 ] * y[1 ] + k[3 ] * y[2 ] * y[3 ],
54+ D (y[2 ]) ~ k[1 ] * y[1 ] - k[3 ] * y[2 ] * y[3 ] - k[2 ] * y[2 ]^ 2 ,
55+ 0 ~ y[1 ] + y[2 ] + y[3 ] - 1 ]
56+
57+ @named sys = ODESystem (eqs, t, collect (y), [k])
58+ @named sys = SDESystem (sys, [1 , 1 , 0 ])
59+ sys = complete (sys)
60+ prob = SDEProblem (sys, [y => [1.0 , 0.0 , 0.0 ]], (0.0 , 1e5 ), [k => [0.04 , 3e7 , 1e4 ]])
61+ @test prob. f. mass_matrix isa Diagonal{Float64, Vector{Float64}}
62+ prob = SDEProblem (sys, SA[y => [1.0 , 0.0 , 0.0 ]], (0.0 , 1e5 ), [k => [0.04 , 3e7 , 1e4 ]])
63+ @test prob. f. mass_matrix isa Diagonal{Float64, SVector{3 , Float64}}
64+ end
0 commit comments