Skip to content

Commit 3932a53

Browse files
committed
QSS direct implemented
1 parent 51ba1fb commit 3932a53

5 files changed

Lines changed: 24 additions & 12 deletions

File tree

src/SimJulia.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module SimJulia
1111

1212
import Base.run, Base.now, Base.isless, Base.show, Base.interrupt, Base.yield
1313
import Base.(&), Base.(|)
14-
import TaylorSeries.integrate
14+
import TaylorSeries.integrate, TaylorSeries.evaluate
1515

1616
export AbstractEvent
1717
export value, state, environment
@@ -30,6 +30,7 @@ module SimJulia
3030
export Put, Get, Request, Release, cancel, capacity, request, @request
3131
export Model, Continuous, Variable, ZeroCrossing
3232
export @model, @continuous, @trigger, @zerocrossing
33+
export evaluate
3334
export QSS
3435
export non_stiff, stiff
3536

src/base.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ end
5454

5555
function remove_callback(cb::Function, ev::AbstractEvent)
5656
i = indexin(ev.bev.callbacks, [cb])[1]
57-
deleteat!(ev.bev.callbacks, i)
57+
i != 0 && deleteat!(ev.bev.callbacks, i)
5858
end
5959

6060
function schedule(ev::AbstractEvent, delay::Number=zero(Float64); priority::Int8=zero(Int8), value::Any=nothing)
@@ -65,6 +65,10 @@ function schedule(ev::AbstractEvent, delay::Number=zero(Float64); priority::Int8
6565
bev.state = scheduled
6666
end
6767

68+
function reset(ev::AbstractEvent)
69+
ev.bev.state = idle
70+
end
71+
6872
struct StopSimulation <: Exception
6973
value :: Any
7074
function StopSimulation(value::Any=nothing)

src/continuous.jl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ function advance_time(var::Variable, t::Float64)
1414
var.x.coeffs[1]
1515
end
1616

17+
function evaluate(var::Variable, t::Float64)
18+
evaluate(var.x, t - var.t)
19+
end
20+
1721
struct ZeroCrossing <: AbstractEvent
1822

1923
end
@@ -35,7 +39,8 @@ struct Continuous <: AbstractProcess
3539
push!(cont.vars, Variable(env, i, x₀, t))
3640
end
3741
for var in cont.vars
38-
schedule(var, cont, integrator)
42+
@callback step(var, cont, integrator)
43+
schedule(var)
3944
end
4045
cont
4146
end

src/odes/QSS.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ function step(var::Variable, cont::Continuous, qss::QSS)
4646
i = var.id
4747
t₀ = t + Taylor1(Float64, qss.order+1)
4848
x₀ = advance_time(var, t)
49-
println(t, " ", i, " ", x₀)
5049
update_quantized_state(qss, cont.vars, i, t)
5150
Δt = compute_next_time(var.x, max(qss.Δrel*x₀, qss.Δabs))
5251
schedule(var, cont, qss, Δt)

test/continuous.jl

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@ end
1212
end
1313
end
1414

15+
function report(sim::Simulation, cont::Continuous)
16+
while true
17+
t = now(sim)
18+
println(t, " ", evaluate(cont.vars[1], t), " ", evaluate(cont.vars[2], t))
19+
yield(Timeout(sim, 1.0))
20+
end
21+
end
22+
1523
sim = Simulation()
16-
cont = @continuous diffeq(sim, [0.0, 20.0], [2020.0]; stiff=false, order=4)
24+
cont = @continuous diffeq(sim, [0.0, 20.0], [2020.0]; stiff=false, order=5)
25+
@process report(sim, cont)
1726
zc = @zerocrossing less_prey(cont)
18-
run(sim, 10.0)
19-
for var in cont.vars
20-
println(var.x)
21-
end
22-
for q in cont.integrator.q
23-
println(q)
24-
end
27+
run(sim, 71)

0 commit comments

Comments
 (0)