@@ -5,6 +5,7 @@ Generate `NonlinearSystem` which initializes an ODE problem from specified initi
55"""
66function generate_initializesystem (sys:: ODESystem ;
77 u0map = Dict (),
8+ pmap = Dict (),
89 name = nameof (sys),
910 guesses = Dict (), check_defguess = false ,
1011 default_dd_value = 0.0 ,
@@ -69,6 +70,32 @@ function generate_initializesystem(sys::ODESystem;
6970 defs = merge (defaults (sys), filtered_u0)
7071 guesses = merge (get_guesses (sys), todict (guesses), dd_guess)
7172
73+ all_params = parameters (sys)
74+ pars = [parameters (sys); get_iv (sys)]
75+ paramsubs = Dict ()
76+ for p in all_params
77+ haskey (pmap, p) && continue
78+ paramsubs[p] = tovar (p)
79+ push! (full_states, tovar (p))
80+ deleteat! (pars, findfirst (isequal (p), pars))
81+ if haskey (defs, p)
82+ def = defs[p]
83+ if def isa Equation
84+ p ∉ keys (guesses) && check_defguess &&
85+ error (" Invalid setup: parameter $(p) has an initial condition equation with no guess." )
86+ push! (eqs_ics, def)
87+ push! (u0, p => guesses[p])
88+ else
89+ push! (eqs_ics, p ~ def)
90+ push! (u0, p => def)
91+ end
92+ elseif haskey (guesses, p)
93+ push! (u0, p => guesses[p])
94+ elseif check_defguess
95+ error (" Invalid setup: parameter $(p) has no default value or initial guess" )
96+ end
97+ end
98+
7299 if ! algebraic_only
73100 for st in full_states
74101 if st ∈ keys (defs)
@@ -91,12 +118,12 @@ function generate_initializesystem(sys::ODESystem;
91118 end
92119 end
93120
94- pars = [parameters (sys); get_iv (sys)]
95121 nleqs = if algebraic_only
96122 [eqs_ics; observed (sys)]
97123 else
98124 [eqs_ics; get_initialization_eqs (sys); observed (sys)]
99125 end
126+ nleqs = fast_substitute (nleqs, paramsubs)
100127
101128 sys_nl = NonlinearSystem (nleqs,
102129 full_states,
0 commit comments