@@ -61,7 +61,7 @@ function AffectSystem(spec::SymbolicAffect; iv = nothing, alg_eqs = Equation[],
6161end
6262
6363function AffectSystem (affect:: Vector{Equation} ; discrete_parameters = Any[],
64- iv = nothing , alg_eqs:: Vector{Equation} = Equation[], warn_no_algebraic = true , kwargs... )
64+ iv = nothing , alg_eqs:: Vector{Equation} = Equation[], obs_eqs :: Vector{Equation} = Equation[], warn_no_algebraic = true , kwargs... )
6565 isempty (affect) && return nothing
6666 if isnothing (iv)
6767 iv = t_nounits
@@ -70,6 +70,7 @@ function AffectSystem(affect::Vector{Equation}; discrete_parameters = Any[],
7070
7171 discrete_parameters isa AbstractVector || (discrete_parameters = [discrete_parameters])
7272 discrete_parameters = unwrap .(discrete_parameters)
73+ obs_vars = [unwrap (eq. lhs) for eq in obs_eqs]
7374
7475 for p in discrete_parameters
7576 occursin (unwrap (iv), unwrap (p)) ||
@@ -79,6 +80,7 @@ function AffectSystem(affect::Vector{Equation}; discrete_parameters = Any[],
7980 dvs = OrderedSet ()
8081 params = OrderedSet ()
8182 _varsbuf = Set ()
83+ eqs_contain_obs = false
8284 for eq in affect
8385 if ! haspre (eq) && ! (symbolic_type (eq. rhs) === NotSymbolic () ||
8486 symbolic_type (eq. lhs) === NotSymbolic ())
@@ -91,6 +93,16 @@ function AffectSystem(affect::Vector{Equation}; discrete_parameters = Any[],
9193 union! (params, _varsbuf)
9294 diffvs = collect_applied_operators (eq, Differential)
9395 union! (dvs, diffvs)
96+
97+ for var in obs_vars
98+ if occursin (var, unwrap (eq. rhs))
99+ eqs_contain_obs = true
100+ end
101+ end
102+ end
103+
104+ if eqs_contain_obs
105+ alg_eqs = [alg_eqs; obs_eqs]
94106 end
95107 for eq in alg_eqs
96108 collect_vars! (dvs, params, eq, iv)
0 commit comments