@@ -42,51 +42,53 @@ function generate_initializesystem(sys::AbstractSystem;
4242        diffmap =  Dict ()
4343    end 
4444
45-     if  has_schedule (sys) &&  (schedule =  get_schedule (sys); ! isnothing (schedule))
46-         #  2) process dummy derivatives and u0map into initialization system
47-         #  prepare map for dummy derivative substitution
48-         for  x in  filter (x ->  ! isnothing (x[1 ]), schedule. dummy_sub)
49-             #  set dummy derivatives to default_dd_guess unless specified
50-             push! (defs, x[1 ] =>  get (guesses, x[1 ], default_dd_guess))
51-         end 
52-         function  process_u0map_with_dummysubs (y, x)
53-             y =  get (schedule. dummy_sub, y, y)
54-             y =  fixpoint_sub (y, diffmap)
55-             if  y ∈  vars_set
56-                 #  variables specified in u0 overrides defaults
57-                 push! (defs, y =>  x)
58-             elseif  y isa  Symbolics. Arr
59-                 #  TODO : don't scalarize arrays
60-                 merge! (defs, Dict (scalarize (y .=>  x)))
61-             elseif  y isa  Symbolics. BasicSymbolic
62-                 #  y is a derivative expression expanded; add it to the initialization equations
63-                 push! (eqs_ics, y ~  x)
64-             else 
65-                 error (" Initialization expression $y  is currently not supported. If its a higher order derivative expression, then only the dummy derivative expressions are supported."  )
45+     if  is_time_dependent (sys)
46+         if  has_schedule (sys) &&  (schedule =  get_schedule (sys); ! isnothing (schedule))
47+             #  2) process dummy derivatives and u0map into initialization system
48+             #  prepare map for dummy derivative substitution
49+             for  x in  filter (x ->  ! isnothing (x[1 ]), schedule. dummy_sub)
50+                 #  set dummy derivatives to default_dd_guess unless specified
51+                 push! (defs, x[1 ] =>  get (guesses, x[1 ], default_dd_guess))
6652            end 
67-         end 
68-         for  (y, x) in  u0map
69-             if  Symbolics. isarraysymbolic (y)
70-                 process_u0map_with_dummysubs .(collect (y), collect (x))
71-             else 
72-                 process_u0map_with_dummysubs (y, x)
53+             function  process_u0map_with_dummysubs (y, x)
54+                 y =  get (schedule. dummy_sub, y, y)
55+                 y =  fixpoint_sub (y, diffmap)
56+                 if  y ∈  vars_set
57+                     #  variables specified in u0 overrides defaults
58+                     push! (defs, y =>  x)
59+                 elseif  y isa  Symbolics. Arr
60+                     #  TODO : don't scalarize arrays
61+                     merge! (defs, Dict (scalarize (y .=>  x)))
62+                 elseif  y isa  Symbolics. BasicSymbolic
63+                     #  y is a derivative expression expanded; add it to the initialization equations
64+                     push! (eqs_ics, y ~  x)
65+                 else 
66+                     error (" Initialization expression $y  is currently not supported. If its a higher order derivative expression, then only the dummy derivative expressions are supported."  )
67+                 end 
68+             end 
69+             for  (y, x) in  u0map
70+                 if  Symbolics. isarraysymbolic (y)
71+                     process_u0map_with_dummysubs .(collect (y), collect (x))
72+                 else 
73+                     process_u0map_with_dummysubs (y, x)
74+                 end 
75+             end 
76+         else 
77+             #  2) System doesn't have a schedule, so dummy derivatives don't exist/aren't handled (SDESystem)
78+             for  (k, v) in  u0map
79+                 defs[k] =  v
7380            end 
7481        end 
75-     else 
76-         #  2) System doesn't have a schedule, so dummy derivatives don't exist/aren't handled (SDESystem)
77-         for  (k, v) in  u0map
78-             defs[k] =  v
79-         end 
80-     end 
8182
82-     #  3) process other variables
83-     for  var in  vars
84-         if  var ∈  keys (defs)
85-             push! (eqs_ics, var ~  defs[var])
86-         elseif  var ∈  keys (guesses)
87-             push! (defs, var =>  guesses[var])
88-         elseif  check_defguess
89-             error (" Invalid setup: variable $(var)  has no default value or initial guess"  )
83+         #  3) process other variables
84+         for  var in  vars
85+             if  var ∈  keys (defs)
86+                 push! (eqs_ics, var ~  defs[var])
87+             elseif  var ∈  keys (guesses)
88+                 push! (defs, var =>  guesses[var])
89+             elseif  check_defguess
90+                 error (" Invalid setup: variable $(var)  has no default value or initial guess"  )
91+             end 
9092        end 
9193    end 
9294
@@ -180,16 +182,24 @@ function generate_initializesystem(sys::AbstractSystem;
180182    pars =  Vector {SymbolicParam} (filter (p ->  ! haskey (paramsubs, p), parameters (sys)))
181183    is_time_dependent (sys) &&  push! (pars, get_iv (sys))
182184
183-     #  8) use observed equations for guesses of observed variables if not provided
184-     for  eq in  trueobs
185-         haskey (defs, eq. lhs) &&  continue 
186-         any (x ->  isequal (default_toterm (x), eq. lhs), keys (defs)) &&  continue 
185+     if  is_time_dependent (sys)
186+         #  8) use observed equations for guesses of observed variables if not provided
187+         for  eq in  trueobs
188+             haskey (defs, eq. lhs) &&  continue 
189+             any (x ->  isequal (default_toterm (x), eq. lhs), keys (defs)) &&  continue 
187190
188-         defs[eq. lhs] =  eq. rhs
191+             defs[eq. lhs] =  eq. rhs
192+         end 
193+         append! (eqs_ics, trueobs)
194+     end 
195+ 
196+     eqs_ics =  Symbolics. substitute .(eqs_ics, (paramsubs,))
197+     if  is_time_dependent (sys)
198+         vars =  [vars; collect (values (paramsubs))]
199+     else 
200+         vars =  collect (values (paramsubs))
189201    end 
190202
191-     eqs_ics =  Symbolics. substitute .([eqs_ics; trueobs], (paramsubs,))
192-     vars =  [vars; collect (values (paramsubs))]
193203    for  k in  keys (defs)
194204        defs[k] =  substitute (defs[k], paramsubs)
195205    end 
0 commit comments