@@ -115,3 +115,30 @@ prob = ODEProblem(f, ones(3), (0.0, 1.0))
115
115
integrator = init (prob, Rodas5P (),
116
116
initializealg = ShampineCollocationInit (1.0 , BrokenNLSolve ()))
117
117
@test all (isequal (reinterpret (Float64, 0xDEADBEEFDEADBEEF )), integrator. u)
118
+
119
+ @testset " `reinit!` reruns initialization" begin
120
+ initializeprob = NonlinearProblem (1.0 , [0.0 ]) do u, p
121
+ return u^ 2 - p[1 ]^ 2
122
+ end
123
+ initializeprobmap = function (nlsol)
124
+ return [nlsol. prob. p[1 ], nlsol. u]
125
+ end
126
+ update_initializeprob! = function (iprob, integ)
127
+ iprob. p[1 ] = integ. u[1 ]
128
+ end
129
+ initialization_data = SciMLBase. OverrideInitData (
130
+ initializeprob, update_initializeprob!, initializeprobmap, nothing )
131
+ fn = ODEFunction (; mass_matrix = [1 0 ; 0 0 ], initialization_data) do du, u, p, t
132
+ du[1 ] = u[1 ]
133
+ du[2 ] = u[1 ]^ 2 - u[2 ]^ 2
134
+ end
135
+ prob = ODEProblem (fn, [2.0 , 0.0 ], (0.0 , 1.0 ))
136
+ integ = init (prob, Rodas5P ())
137
+ @test integ. u≈ [2.0 , 2.0 ] atol= 1e-8
138
+ reinit! (integ)
139
+ @test integ. u≈ [2.0 , 2.0 ] atol= 1e-8
140
+ @test_nowarn step! (integ, 0.01 , true )
141
+ reinit! (integ, reinit_dae = false )
142
+ @test integ. u ≈ [2.0 , 0.0 ]
143
+ @test_warn [" dt" , " forced below floating point epsilon" ] step! (integ, 0.01 , true )
144
+ end
0 commit comments