@@ -151,6 +151,12 @@ function add_integrator_header(out=:u)
151
151
expr. body)
152
152
end
153
153
154
+ function condition_header ()
155
+ integrator = gensym (:MTKIntegrator )
156
+ expr -> Func ([expr. args[1 ], expr. args[2 ],
157
+ DestructuredArgs (expr. args[3 : end ], integrator, inds = [:p ])], [], expr. body)
158
+ end
159
+
154
160
"""
155
161
compile_condition(cb::SymbolicDiscreteCallback, sys, dvs, ps; expression, kwargs...)
156
162
@@ -168,7 +174,7 @@ function compile_condition(cb::SymbolicDiscreteCallback, sys, dvs, ps;
168
174
p = map (x -> time_varying_as_func (value (x), sys), ps)
169
175
t = get_iv (sys)
170
176
condit = condition (cb)
171
- build_function (condit, u, p, t ; expression, kwargs... )
177
+ build_function (condit, u, t, p ; expression, wrap_code = condition_header () , kwargs... )
172
178
end
173
179
174
180
function compile_affect (cb:: SymbolicContinuousCallback , args... ; kwargs... )
@@ -199,7 +205,6 @@ function compile_affect(eqs::Vector{Equation}, sys, dvs, ps; outputidxs = nothin
199
205
end
200
206
else
201
207
rhss = map (x -> x. rhs, eqs)
202
-
203
208
outvar = :u
204
209
if outputidxs === nothing
205
210
lhss = map (x -> x. lhs, eqs)
@@ -332,5 +337,10 @@ function process_events(sys; callback = nothing, has_difference = false, kwargs.
332
337
end
333
338
difference_cb = has_difference ? generate_difference_cb (sys; kwargs... ) : nothing
334
339
335
- foldl (merge_cb, (contin_cb, discrete_cb, difference_cb, callback))
340
+ cb = CallbackSet (contin_cb, difference_cb, callback, discrete_cb... )
341
+ # cb = merge_cb(contin_cb, discrete_cb...)
342
+ # cb = merge_cb(cb, difference_cb)
343
+ # cb = merge_cb(cb, callback)
344
+ # @show typeof(cbs),cbs
345
+ cb
336
346
end
0 commit comments