Skip to content

assertions fail to trigger for discrete-time debug system #3500

Open
@baggepinnen

Description

@baggepinnen

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())

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions