Open
Description
I've found it hard to use if statements to control how equations involving arrays behave. This pattern is very common in modelica multibody models, but in MTK I frequently have to degrade parameters to be structural parameters to make it work. The following are two failed attempts
using ModelingToolkit
using ModelingToolkit: t_nounits as t, D_nounits as D
@mtkmodel ArrayIf begin
@parameters begin
stable = true
end
@variables begin
x(t)[1:2]
end
@equations begin
if stable
D(x) ~ -x
else
D(x) ~ x
end
end
end
@mtkbuild arrayif = ArrayIf()
julia> @mtkbuild arrayif = ArrayIf()
ERROR: TypeError: non-boolean (Num) used in boolean context
@mtkmodel ArrayIf begin
@parameters begin
stable = true
end
@variables begin
x(t)[1:2]
end
@equations begin
D(x) ~ ifelse(stable, -x, x)
end
end
@mtkbuild arrayif = ArrayIf()
ERROR: MethodError: no method matching ifelse(::SymbolicUtils.BasicSymbolic{…}, ::Symbolics.ArrayOp{…}, ::SymbolicUtils.BasicSymbolic{…})