Open
Description
MWE: This should trigger the assertion in Float2Bool2
since the input u = x
is not exaclty 1.0
or 0.0
using ModelingToolkit
using OrdinaryDiffEq
t = ModelingToolkit.t_nounits
k = ShiftIndex(t)
function Float2Bool2(; name, strict=false)
vars = @variables begin
u(t)::Float64
y(t)::Bool
end
equations = [
y ~ u != 0
]
if strict
DiscreteSystem(equations, t, vars, []; name, assertions=[(u == 1.0) | (u == 0.0)])
else
DiscreteSystem(equations, t, vars, []; name)
end
end
function Model2(; name)
@variables begin
x(t) = 1
end
systems = @named begin
conversion = Float2Bool2(strict=true)
end
equations = [
x(k) ~ 0.99x(k-1)
conversion.u ~ x
]
DiscreteSystem(equations, t; name, systems)
end
@mtkbuild sys = Model2()
dsys = debug_system(sys; functions = []);
prob = DiscreteProblem(dsys, [], (0,10))
sol = solve(prob, FunctionMap())