1
- using OrdinaryDiffEq, ModelingToolkit, Test, LinearAlgebra
1
+ using OrdinaryDiffEq, ModelingToolkit, Test, LinearAlgebra, StaticArrays
2
2
using ModelingToolkit: t_nounits as t, D_nounits as D, MTKParameters
3
3
4
4
@variables y (t)[1 : 3 ]
@@ -12,13 +12,18 @@ eqs = [D(y[1]) ~ -k[1] * y[1] + k[3] * y[2] * y[3],
12
12
sys = complete (sys)
13
13
@test_throws ArgumentError ODESystem (eqs, y[1 ])
14
14
M = calculate_massmatrix (sys)
15
+ @test M isa Diagonal
15
16
@test M == [1 0 0
16
17
0 1 0
17
18
0 0 0 ]
18
19
19
20
prob_mm = ODEProblem (sys, [y => [1.0 , 0.0 , 0.0 ]], (0.0 , 1e5 ),
20
21
[k => [0.04 , 3e7 , 1e4 ]])
22
+ @test prob_mm. f. mass_matrix isa Diagonal{Float64, Vector{Float64}}
21
23
sol = 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}}
22
27
23
28
function rober (du, u, p, t)
24
29
y₁, y₂, y₃ = u
@@ -43,3 +48,17 @@ eqs = [D(y[1]) ~ y[1], D(y[2]) ~ y[2], D(y[3]) ~ y[3]]
43
48
@named sys = ODESystem (eqs, t, collect (y), [k])
44
49
45
50
@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