Skip to content

Initial is ignored for discrete variable #4356

@bradcarman

Description

@bradcarman

Take the following

function MWE(dt; name, ic=0.0)
    pars = []
    vars = @variables begin
        u(t)
        y(t)
    end
    disc = @discretes begin
        us(t)=Initial(u)
        uo(t)=ic
    end
    eqs = [
        u ~ sin(t) + 1
        y ~ uo
    ]
    event = ModelingToolkit.SymbolicDiscreteCallback(dt, [us ~ Pre(u), uo ~ Pre(us)]; discrete_parameters=[us, uo])
    return System(eqs, t, [vars; disc], pars; name, discrete_events=[event])
end

@mtkcompile sys = MWE(0.1; ic=1)
iprob = ModelingToolkit.InitializationProblem(sys, 0.0)
sol = solve(iprob)
@test sol[sys.u] == sol[sys.us]

This gives the following...

julia> @test sol[sys.u] == sol[sys.us]
Test Failed at c:\Work\Packages\PrimitiveComponentsMTK\scrtips\test_unit_delay.jl:125
  Expression: sol[sys.u] == sol[sys.us]
   Evaluated: 1.0 == 0.0

Even though us is defined as us(t) ~ Initial(u(t))

julia> observed(iprob.f.sys)
4-element Vector{Equation}:
 uo(t) ~ Initial(uo(t))
 us(t) ~ Initial(u(t))
 u(t) ~ 1 + sin(t)
 y(t) ~ uo(t)

Using the following versions:

  [961ee093] ModelingToolkit v11.12.0
  [1dea7af3] OrdinaryDiffEq v6.108.0

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions