1+ using OrdinaryDiffEqBDF, OrdinaryDiffEqRosenbrock, LinearAlgebra, ForwardDiff, Test
2+ using OrdinaryDiffEqCore
3+
4+ function rober (du, u, p, t)
5+ y₁, y₂, y₃ = u
6+ k₁, k₂, k₃ = p
7+ du[1 ] = - k₁ * y₁ + k₃ * y₂ * y₃
8+ du[2 ] = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^ 2
9+ du[3 ] = y₁ + y₂ + y₃ - 1
10+ nothing
11+ end
12+ function rober (u, p, t)
13+ y₁, y₂, y₃ = u
14+ k₁, k₂, k₃ = p
15+ [- k₁ * y₁ + k₃ * y₂ * y₃,
16+ k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^ 2 ,
17+ y₁ + y₂ + y₃ - 1 ]
18+ end
19+ M = [1.0 0 0
20+ 0 1.0 0
21+ 0 0 0 ]
22+ roberf = ODEFunction (rober, mass_matrix = M)
23+ roberf_oop = ODEFunction {false} (rober, mass_matrix = M)
24+ prob_mm = ODEProblem (roberf, [1.0 , 0.0 , 0.2 ], (0.0 , 1e5 ), (0.04 , 3e7 , 1e4 ))
25+ prob_mm_oop = ODEProblem (roberf_oop, [1.0 , 0.0 , 0.2 ], (0.0 , 1e5 ), (0.04 , 3e7 , 1e4 ))
26+
27+ @test_throws OrdinaryDiffEqCore. CheckInitFailureError solve (prob_mm, Rodas5P (), reltol = 1e-8 , abstol = 1e-8 , initializealg = SciMLBase. CheckInit ())
28+ @test_throws OrdinaryDiffEqCore. CheckInitFailureError solve (prob_mm_oop, Rodas5P (), reltol = 1e-8 , abstol = 1e-8 , initializealg = SciMLBase. CheckInit ())
29+
30+ f_oop = function (du, u, p, t)
31+ out1 = - 0.04 u[1 ] + 1e4 * u[2 ] * u[3 ] - du[1 ]
32+ out2 = + 0.04 u[1 ] - 3e7 * u[2 ]^ 2 - 1e4 * u[2 ] * u[3 ] - du[2 ]
33+ out3 = u[1 ] + u[2 ] + u[3 ] - 1.0
34+ [out1, out2, out3]
35+ end
36+
37+ f = function (resid, du, u, p, t)
38+ resid[1 ] = - 0.04 u[1 ] + 1e4 * u[2 ] * u[3 ] - du[1 ]
39+ resid[2 ] = + 0.04 u[1 ] - 3e7 * u[2 ]^ 2 - 1e4 * u[2 ] * u[3 ] - du[2 ]
40+ resid[3 ] = u[1 ] + u[2 ] + u[3 ] - 1.0
41+ end
42+
43+ u₀ = [1.0 , 0 , 0.2 ]
44+ du₀ = [0.0 , 0.0 , 0.0 ]
45+ tspan = (0.0 , 100000.0 )
46+ differential_vars = [true , true , false ]
47+ prob = DAEProblem (f, du₀, u₀, tspan, differential_vars = differential_vars)
48+ prob_oop = DAEProblem (f_oop, du₀, u₀, tspan, differential_vars = differential_vars)
49+ @test_throws OrdinaryDiffEqCore. CheckInitFailureError solve (prob, DFBDF (), reltol = 1e-8 , abstol = 1e-8 , initializealg = SciMLBase. CheckInit ())
50+ @test_throws OrdinaryDiffEqCore. CheckInitFailureError solve (prob_oop, DFBDF (), reltol = 1e-8 , abstol = 1e-8 , initializealg = SciMLBase. CheckInit ())
0 commit comments