@@ -17,51 +17,52 @@ struct QSS{T} <: Integrator
1717 push! (qss. q, q₀ + Taylor1 (zeros (Float64, order+ 1 )))
1818 end
1919 for i in 1 : order- 1
20+ q = deepcopy (qss. q)
2021 for (j, q₀) in enumerate (x₀)
21- qss. q[j] = integrate (model. f[j](t₀, qss . q, p), q₀)
22+ qss. q[j] = integrate (model. f[j](t₀, q, p), q₀)
2223 end
2324 end
24- println (qss. q)
2525 qss
2626 end
2727end
2828
2929function Continuous (model:: Model , env:: Environment , x₀:: Vector{Float64} , p:: Vector{Float64} = Float64[];
30- stiff:: Bool = false , order:: Number = 4 , Δrel:: Float64 = 1e-6 , Δabs:: Float64 = 1e-6 )
31- stiff ? Continuous (model, env, QSS{SimJulia. stiff}, x₀, p; order= order, Δrel= Δrel, Δabs= Δabs) :
32- Continuous (model, env, QSS{SimJulia. non_stiff}, x₀, p; order= order, Δrel= Δrel, Δabs= Δabs)
30+ stiff:: Bool = false , order:: Number = 4 , Δrel:: Number = 1e-6 , Δabs:: Number = 1e-6 )
31+ stiff ? Continuous (model, env, QSS{SimJulia. stiff}, x₀, p; order= order, Δrel= float ( Δrel) , Δabs= float ( Δabs) ) :
32+ Continuous (model, env, QSS{SimJulia. non_stiff}, x₀, p; order= order, Δrel= float ( Δrel) , Δabs= float ( Δabs) )
3333end
3434
3535function initial_values (qss:: QSS , t:: Float64 )
36- t₀ = t + Taylor1 (Float64, qss. order+ 0 )
36+ t₀ = t + Taylor1 (Float64, qss. order+ 1 )
3737 x₀ = Vector {Taylor1{Float64}} ()
3838 for (i, f) in enumerate (qss. model. f)
3939 push! (x₀, integrate (f (t₀, qss. q, qss. p), qss. q[i][1 ]))
4040 end
41- println (x₀)
4241 x₀
4342end
4443
4544function step (var:: Variable , cont:: Continuous , qss:: QSS )
4645 t = now (environment (var))
4746 n = length (qss. model. f)
4847 i = var. id
49- t₀ = t + Taylor1 (Float64, qss. order+ 0 )
48+ t₀ = t + Taylor1 (Float64, qss. order+ 1 )
5049 x₀ = advance_time (var, t)
51- update_quantized_state (qss, cont. vars, i, t)
52- println (x₀)
50+ update_quantized_state (qss, var, t)
5351 Δt = compute_next_time (var. x, max (qss. Δrel* x₀, qss. Δabs))
54- schedule (var, cont, qss, Δt)
52+ reset (var)
53+ schedule (var, Δt)
5554 for j in filter (j-> qss. model. deps[j,i], 1 : n)
5655 dep = cont. vars[j]
5756 x₀ = evaluate (dep. x, t - dep. t)
5857 dep. t = t
59- for k in filter (k-> qss. model. deps[j,k], 1 : n)
58+ advance_time (qss, j, t)
59+ for k in filter (k-> qss. model. deps[j,k] && k!= j, 1 : n)
6060 advance_time (qss, k, t)
6161 end
6262 dep. x = integrate (qss. model. f[j](t₀, qss. q, qss. p), x₀)
6363 Δt = recompute_next_time (qss, dep. x, qss. q[j], max (qss. Δrel* x₀, qss. Δabs))
64- schedule (dep, cont, qss, Δt)
64+ reset (dep)
65+ schedule (dep, Δt)
6566 end
6667end
6768
@@ -71,8 +72,9 @@ function advance_time(qss::QSS, i::Int, t::Float64)
7172 qss. q[i][1 ]
7273end
7374
74- function update_quantized_state (qss:: QSS{non_stiff} , vars:: Vector{Variable} , i:: UInt , t:: Float64 )
75- qss. q[i] = copy (vars[i]. x)
75+ function update_quantized_state (qss:: QSS{non_stiff} , var:: Variable , t:: Float64 )
76+ i = var. id
77+ qss. q[i] = deepcopy (var. x)
7678 qss. q[i][end ] = 0.0
7779 qss. t[i] = t
7880end
@@ -88,7 +90,7 @@ function compute_next_time(x::Taylor1, Δq::Float64)
8890 (abs (Δq/ x[end ]))^ (1.0 / x. order)
8991end
9092
91- function recompute_next_time (:: QSS{non_stiff} , x:: Taylor1 , q:: Taylor1 , Δq:: Float64 )
93+ function recompute_next_time (:: QSS{non_stiff} , x:: Taylor1{Float64} , q:: Taylor1{Float64} , Δq:: Float64 )
9294 p = (x- q). coeffs
9395 p[1 ] -= Δq
9496 neg = roots (p)
0 commit comments