File tree Expand file tree Collapse file tree 2 files changed +30
-2
lines changed Expand file tree Collapse file tree 2 files changed +30
-2
lines changed Original file line number Diff line number Diff line change @@ -155,7 +155,7 @@ function change_independent_variable(
155
155
156
156
# Create a utility that performs the chain rule on an expression, followed by insertion of the new independent variable:
157
157
# e.g. (d/dt)(f(t)) -> (d/dt)(f(u(t))) -> df(u(t))/du(t) * du(t)/dt -> df(u)/du * uˍt(u)
158
- function transform (ex)
158
+ function transform (ex:: T ) where {T}
159
159
# 1) Replace the argument of every function; e.g. f(t) -> f(u(t))
160
160
for var in vars (ex; op = Nothing) # loop over all variables in expression (op = Nothing prevents interpreting "D(f(t))" as one big variable)
161
161
is_function_of_iv1 = iscall (var) && isequal (only (arguments (var)), iv1) # of the form f(t)?
@@ -175,7 +175,7 @@ function change_independent_variable(
175
175
# 3) Set new independent variable
176
176
ex = substitute (ex, iv2_of_iv1 => iv2; fold) # set e.g. u(t) -> u everywhere
177
177
ex = substitute (ex, iv1 => iv1_of_iv2; fold) # set e.g. t -> t(u) everywhere
178
- return ex
178
+ return ex:: T
179
179
end
180
180
181
181
# Use the utility function to transform everything in the system!
Original file line number Diff line number Diff line change 231
231
# compare to analytical solution (x(t) = v*t, y(t) = v*t - g*t^2/2)
232
232
@test all (isapprox .(sol[Mx. y], sol[Mx. x - g * (Mx. t_units)^ 2 / 2 ]; atol = 1e-10 ))
233
233
end
234
+
235
+ @testset " Change independent variable, no equations" begin
236
+ # make this "look" like the standard library RealInput
237
+ @mtkmodel Input begin
238
+ @variables begin
239
+ u (t)
240
+ end
241
+ end
242
+ @named input_sys = Input ()
243
+ input_sys = complete (input_sys)
244
+ # test no failures
245
+ @test change_independent_variable (input_sys, input_sys. u) isa ODESystem
246
+
247
+ @mtkmodel NestedInput begin
248
+ @components begin
249
+ in = Input ()
250
+ end
251
+ @variables begin
252
+ x (t)
253
+ end
254
+ @equations begin
255
+ D (x) ~ in. u
256
+ end
257
+ end
258
+ @named nested_input_sys = NestedInput ()
259
+ nested_input_sys = complete (nested_input_sys; flatten = false )
260
+ @test change_independent_variable (nested_input_sys, nested_input_sys. x) isa ODESystem
261
+ end
You can’t perform that action at this time.
0 commit comments