|
1 |
| -using OrdinaryDiffEq, Sundials, SciMLBase, Test |
| 1 | +using ModelingToolkit, NonlinearSolve, OrdinaryDiffEq, Sundials, SciMLBase, Test |
| 2 | +using ModelingToolkit: t_nounits as t, D_nounits as D |
2 | 3 |
|
3 | 4 | @testset "CheckInit" begin
|
4 | 5 | abstol = 1e-10
|
@@ -59,3 +60,26 @@ using OrdinaryDiffEq, Sundials, SciMLBase, Test
|
59 | 60 | end
|
60 | 61 | end
|
61 | 62 | end
|
| 63 | + |
| 64 | +@testset "OverrideInit with MTK" begin |
| 65 | + abstol = 1e-10 |
| 66 | + reltol = 1e-8 |
| 67 | + |
| 68 | + @variables x(t) [guess = 1.0] y(t) [guess = 1.0] |
| 69 | + @parameters p=missing [guess = 1.0] q=missing [guess = 1.0] |
| 70 | + @mtkbuild sys = ODESystem([D(x) ~ p * y + q * t, D(y) ~ 5x + q], t; |
| 71 | + initialization_eqs = [p^2 + q^2 ~ 3, x^3 + y^3 ~ 5]) |
| 72 | + prob = ODEProblem( |
| 73 | + sys, [x => 1.0], (0.0, 1.0), [p => 1.0]; initializealg = SciMLBase.NoInit()) |
| 74 | + |
| 75 | + @test prob.f.initialization_data isa SciMLBase.OverrideInitData |
| 76 | + integ = init(prob, Tsit5()) |
| 77 | + u0, pobj, success = SciMLBase.get_initial_values( |
| 78 | + prob, integ, prob.f, SciMLBase.OverrideInit(), Val(true); |
| 79 | + nlsolve_alg = NewtonRaphson(), abstol, reltol) |
| 80 | + |
| 81 | + @test getu(sys, x)(u0) ≈ 1.0 |
| 82 | + @test getu(sys, y)(u0) ≈ cbrt(4) |
| 83 | + @test getp(sys, p)(pobj) ≈ 1.0 |
| 84 | + @test getp(sys, q)(pobj) ≈ sqrt(2) |
| 85 | +end |
0 commit comments