5151
5252get_value (interp:: Interpolator , t) =  interp (t)
5353@register_symbolic  get_value (interp:: Interpolator , t)
54- #  get_value(data, t, dt) = data[round(Int, t / dt + 1)] 
55- #  @register_symbolic get_value(data::Vector, t, dt) 
54+ 
55+ Symbolics . derivative ( :: typeof (get_value), args :: NTuple{2, Any} ,  :: Val{2} )  =   0 
5656
5757function  Sampled (; name, interp =  Interpolator (Float64[], 0.0 ))
5858    pars =  @parameters  begin 
@@ -68,11 +68,10 @@ function Sampled(; name, interp = Interpolator(Float64[], 0.0))
6868        output. u ~  get_value (interpolator, t)
6969    ]
7070
71-     return  ODESystem (eqs, t, vars, [interpolator]; name, systems,
72-         defaults =  [output. u =>  interp. data[1 ]])
71+     return  ODESystem (eqs, t, vars, [interpolator]; name, systems)
7372end 
7473
75- vars =  @variables  y (t)= 1  dy (t)= 0  ddy (t)= 0 
74+ vars =  @variables  y (t) dy (t) ddy (t)
7675@named  src =  Sampled (; interp =  Interpolator (x, dt))
7776@named  int =  Integrator ()
7877
@@ -84,11 +83,9 @@ eqs = [y ~ src.output.u
8483@named  sys =  ODESystem (eqs, t, vars, []; systems =  [int, src])
8584s =  complete (sys)
8685sys =  structural_simplify (sys)
87- @test_broken  ODEProblem (
88-     sys, [], (0.0 , t_end), [s. src. interpolator =>  Interpolator (x, dt)]; tofloat =  false )
8986prob =  ODEProblem (
9087    sys, [], (0.0 , t_end), [s. src. interpolator =>  Interpolator (x, dt)];
91-     tofloat =  false , build_initializeprob  =   false )
88+     tofloat =  false )
9289sol =  solve (prob, ImplicitEuler ());
9390@test  sol. retcode ==  ReturnCode. Success
9491@test  sol[y][end ] ==  x[end ]
0 commit comments