@@ -77,6 +77,13 @@ function has_functional_affect(cb)
77
77
(affects (cb) isa FunctionalAffect || affects (cb) isa ImperativeAffect)
78
78
end
79
79
80
+ function vars! (vars, aff:: FunctionalAffect ; op = Differential)
81
+ for var in Iterators. flatten ((unknowns (aff), parameters (aff), discretes (aff)))
82
+ vars! (vars, var)
83
+ end
84
+ return vars
85
+ end
86
+
80
87
# ################################### continuous events #####################################
81
88
82
89
const NULL_AFFECT = Equation[]
@@ -333,6 +340,22 @@ function continuous_events(sys::AbstractSystem)
333
340
filter (! isempty, cbs)
334
341
end
335
342
343
+ function vars! (vars, cb:: SymbolicContinuousCallback ; op = Differential)
344
+ for eq in equations (cb)
345
+ vars! (vars, eq; op)
346
+ end
347
+ for aff in (affects (cb), affect_negs (cb), initialize_affects (cb), finalize_affects (cb))
348
+ if aff isa Vector{Equation}
349
+ for eq in aff
350
+ vars! (vars, eq; op)
351
+ end
352
+ elseif aff != = nothing
353
+ vars! (vars, aff; op)
354
+ end
355
+ end
356
+ return vars
357
+ end
358
+
336
359
# ################################### discrete events #####################################
337
360
338
361
struct SymbolicDiscreteCallback
@@ -469,6 +492,28 @@ function discrete_events(sys::AbstractSystem)
469
492
cbs
470
493
end
471
494
495
+ function vars! (vars, cb:: SymbolicDiscreteCallback ; op = Differential)
496
+ if symbolic_type (cb. condition) == NotSymbolic
497
+ if cb. condition isa AbstractArray
498
+ for eq in cb. condition
499
+ vars! (vars, eq; op)
500
+ end
501
+ end
502
+ else
503
+ vars! (vars, cb. condition; op)
504
+ end
505
+ for aff in (cb. affects, cb. initialize, cb. finalize)
506
+ if aff isa Vector{Equation}
507
+ for eq in aff
508
+ vars! (vars, eq; op)
509
+ end
510
+ elseif aff != = nothing
511
+ vars! (vars, aff; op)
512
+ end
513
+ end
514
+ return vars
515
+ end
516
+
472
517
# ################################ compilation functions ####################################
473
518
474
519
# handles ensuring that affect! functions work with integrator arguments
0 commit comments