@@ -10,7 +10,8 @@ struct MTKParameters{T, D, C, E, N, F, G}
1010 dependent_update_oop:: G
1111end
1212
13- function MTKParameters (sys:: AbstractSystem , p; tofloat = false , use_union = false )
13+ function MTKParameters (
14+ sys:: AbstractSystem , p, u0 = Dict (); tofloat = false , use_union = false )
1415 ic = if has_index_cache (sys) && get_index_cache (sys) != = nothing
1516 get_index_cache (sys)
1617 else
@@ -23,21 +24,27 @@ function MTKParameters(sys::AbstractSystem, p; tofloat = false, use_union = fals
2324 length (p) == length (ps) || error (" Invalid parameters" )
2425 p = ps .=> p
2526 end
27+ if p isa SciMLBase. NullParameters || isempty (p)
28+ p = Dict ()
29+ end
30+ p = todict (p)
2631 defs = Dict (default_toterm (unwrap (k)) => v
2732 for (k, v) in defaults (sys)
2833 if unwrap (k) in all_ps || default_toterm (unwrap (k)) in all_ps)
29- if p isa SciMLBase. NullParameters
30- p = defs
31- else
32- extra_params = Dict (unwrap (k) => v
33- for (k, v) in p if ! in (unwrap (k), all_ps) && ! in (default_toterm (unwrap (k)), all_ps))
34- p = merge (defs,
35- Dict (default_toterm (unwrap (k)) => v
36- for (k, v) in p if unwrap (k) in all_ps || default_toterm (unwrap (k)) in all_ps))
37- p = Dict (k => fixpoint_sub (v, extra_params)
38- for (k, v) in p if ! haskey (extra_params, unwrap (k)))
34+ if eltype (u0) <: Pair
35+ u0 = todict (u0)
36+ elseif u0 isa AbstractArray && ! isempty (u0)
37+ u0 = Dict (unknowns (sys) .=> vec (u0))
38+ elseif u0 === nothing || isempty (u0)
39+ u0 = Dict ()
3940 end
40-
41+ defs = merge (defs, u0)
42+ defs = merge (defs, Dict (eq. lhs => eq. rhs for eq in observed (sys)))
43+ p = merge (defs, p)
44+ p = merge (Dict (unwrap (k) => v for (k, v) in p),
45+ Dict (default_toterm (unwrap (k)) => v for (k, v) in p))
46+ p = Dict (k => fixpoint_sub (v, p)
47+ for (k, v) in p if k in all_ps || default_toterm (k) in all_ps)
4148 for (sym, _) in p
4249 if istree (sym) && operation (sym) === getindex &&
4350 first (arguments (sym)) in all_ps
0 commit comments