@@ -450,8 +450,11 @@ in `varmap`, it is ignored.
450450""" 
451451function  evaluate_varmap! (varmap:: AbstractDict , vars; limit =  100 )
452452    for  k in  vars
453+         v =  get (varmap, k, nothing )
454+         v ===  nothing  &&  continue 
455+         symbolic_type (v) ==  NotSymbolic () &&  ! is_array_of_symbolics (v) &&  continue 
453456        haskey (varmap, k) ||  continue 
454-         varmap[k] =  fixpoint_sub (varmap[k] , varmap; maxiters =  limit)
457+         varmap[k] =  fixpoint_sub (v , varmap; maxiters =  limit)
455458    end 
456459end 
457460
@@ -580,15 +583,19 @@ function build_operating_point!(sys::AbstractSystem,
580583        end 
581584    end 
582585
583-     for  k in  keys (u0map)
584-         v =  fixpoint_sub (u0map[k], neithermap; operator =  Symbolics. Operator)
585-         isequal (k, v) &&  continue 
586-         u0map[k] =  v
587-     end 
588-     for  k in  keys (pmap)
589-         v =  fixpoint_sub (pmap[k], neithermap; operator =  Symbolics. Operator)
590-         isequal (k, v) &&  continue 
591-         pmap[k] =  v
586+     if  ! isempty (neithermap)
587+         for  (k, v) in  u0map
588+             symbolic_type (v) ==  NotSymbolic () &&  ! is_array_of_symbolics (v) &&  continue 
589+             v =  fixpoint_sub (v, neithermap; operator =  Symbolics. Operator)
590+             isequal (k, v) &&  continue 
591+             u0map[k] =  v
592+         end 
593+         for  (k, v) in  pmap
594+             symbolic_type (v) ==  NotSymbolic () &&  ! is_array_of_symbolics (v) &&  continue 
595+             v =  fixpoint_sub (v, neithermap; operator =  Symbolics. Operator)
596+             isequal (k, v) &&  continue 
597+             pmap[k] =  v
598+         end 
592599    end 
593600
594601    return  op, missing_unknowns, missing_pars
@@ -1036,6 +1043,9 @@ function (siu::SetInitialUnknowns)(p::AbstractVector, u0)
10361043    return  p
10371044end 
10381045
1046+ safe_float (x) =  x
1047+ safe_float (x:: AbstractArray ) =  isempty (x) ?  x :  float (x)
1048+ 
10391049""" 
10401050    $(TYPEDSIGNATURES)  
10411051
@@ -1100,7 +1110,8 @@ function maybe_build_initialization_problem(
11001110    if  is_time_dependent (sys)
11011111        all_init_syms =  Set (all_symbols (initializeprob))
11021112        solved_unknowns =  filter (var ->  var in  all_init_syms, unknowns (sys))
1103-         initializeprobmap =  u0_constructor ∘  getu (initializeprob, solved_unknowns)
1113+         initializeprobmap =  u0_constructor ∘  safe_float ∘ 
1114+                             getu (initializeprob, solved_unknowns)
11041115    else 
11051116        initializeprobmap =  nothing 
11061117    end 
@@ -1123,20 +1134,24 @@ function maybe_build_initialization_problem(
11231134        update_initializeprob! =  ModelingToolkit. update_initializeprob!
11241135    end 
11251136
1126-     for  p in  punknowns
1127-         is_parameter_solvable (p, pmap, defs, guesses) ||  continue 
1128-         get (op, p, missing ) ===  missing  ||  continue 
1137+     filter! (punknowns) do  p
1138+         is_parameter_solvable (p, op, defs, guesses) &&  get (op, p, missing ) ===  missing 
1139+     end 
1140+     pvals =  getu (initializeprob, punknowns)(initializeprob)
1141+     for  (p, pval) in  zip (punknowns, pvals)
11291142        p =  unwrap (p)
1130-         op[p] =  getu (initializeprob, p)(initializeprob) 
1143+         op[p] =  pval 
11311144        if  iscall (p) &&  operation (p) ===  getindex
11321145            arrp =  arguments (p)[1 ]
1146+             get (op, arrp, nothing ) != =  missing  &&  continue 
11331147            op[arrp] =  collect (arrp)
11341148        end 
11351149    end 
11361150
11371151    if  is_time_dependent (sys)
1138-         for  v in  missing_unknowns
1139-             op[v] =  getu (initializeprob, v)(initializeprob)
1152+         uvals =  getu (initializeprob, collect (missing_unknowns))(initializeprob)
1153+         for  (v, val) in  zip (missing_unknowns, uvals)
1154+             op[v] =  val
11401155        end 
11411156        empty! (missing_unknowns)
11421157    end 
@@ -1371,7 +1386,7 @@ function process_SciMLProblem(
13711386        if  ! (pType <:  AbstractArray )
13721387            pType =  Array
13731388        end 
1374-         p =  MTKParameters (sys, op; floatT =  floatT, p_constructor)
1389+         p =  MTKParameters (sys, op; floatT =  floatT, p_constructor, fast_path  =   true )
13751390    else 
13761391        p =  p_constructor (better_varmap_to_vars (op, ps; tofloat, container_type =  pType))
13771392    end 
0 commit comments