Skip to content

Commit a2b4745

Browse files
test: test new parameter derivative behavior
1 parent 4d8463c commit a2b4745

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

test/structural_transformation/utils.jl

+29-4
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,25 @@ end
302302
return ODESystem(eqs, t, vars, params; systems, name)
303303
end
304304

305-
@component function FilteredInputFix(; name, x0 = 0, T = 0.1)
305+
@component function FilteredInputExplicit(; name, x0 = 0, T = 0.1)
306+
params = @parameters begin
307+
k(t)[1:1] = [x0]
308+
T = T
309+
end
310+
vars = @variables begin
311+
x(t) = k
312+
dx(t) = 0
313+
ddx(t)
314+
end
315+
systems = []
316+
eqs = [D(x) ~ dx
317+
D(dx) ~ ddx
318+
D(k[1]) ~ 1.0
319+
dx ~ (k[1] - x) / T]
320+
return ODESystem(eqs, t, vars, params; systems, name)
321+
end
322+
323+
@component function FilteredInputErr(; name, x0 = 0, T = 0.1)
306324
params = @parameters begin
307325
k(t) = x0
308326
T = T
@@ -316,14 +334,14 @@ end
316334
eqs = [D(x) ~ dx
317335
D(dx) ~ ddx
318336
dx ~ (k - x) / T
319-
D(k) ~ 0]
337+
D(k) ~ missing]
320338
return ODESystem(eqs, t, vars, params; systems, name)
321339
end
322340

323-
@named sys = FilteredInput()
341+
@named sys = FilteredInputErr()
324342
@test_throws ["derivative of discrete variable", "k(t)"] structural_simplify(sys)
325343

326-
@mtkbuild sys = FilteredInputFix()
344+
@mtkbuild sys = FilteredInput()
327345
vs = Set()
328346
for eq in equations(sys)
329347
ModelingToolkit.vars!(vs, eq)
@@ -334,6 +352,13 @@ end
334352

335353
@test !(D(sys.k) in vs)
336354

355+
@mtkbuild sys = FilteredInputExplicit()
356+
obsfn1 = ModelingToolkit.build_explicit_observed_function(sys, sys.ddx)
357+
obsfn2 = ModelingToolkit.build_explicit_observed_function(sys, sys.dx)
358+
u = [1.0]
359+
p = MTKParameters(sys, [sys.k => [2.0], sys.T => 3.0])
360+
@test obsfn1(u, p, 0.0) (1 - obsfn2(u, p, 0.0)) / 3.0
361+
337362
@testset "Called parameter still has derivative" begin
338363
@component function FilteredInput2(; name, x0 = 0, T = 0.1)
339364
ts = collect(0.0:0.1:10.0)

0 commit comments

Comments
 (0)