@@ -149,43 +149,51 @@ struct ReactionSystem <: AbstractSystem
149
149
name:: Symbol
150
150
""" systems: The internal systems"""
151
151
systems:: Vector
152
+ """
153
+ defaults: The default values to use when initial conditions and/or
154
+ parameters are not supplied in `ODEProblem`.
155
+ """
156
+ defaults:: Dict
152
157
153
- function ReactionSystem (eqs, iv, states, ps, observed, name, systems)
158
+ function ReactionSystem (eqs, iv, states, ps, observed, name, systems, defaults )
154
159
iv′ = value (iv)
155
160
states′ = value .(states)
156
161
ps′ = value .(ps)
157
162
check_variables (states′, iv′)
158
163
check_parameters (ps′, iv′)
159
- new (collect (eqs), iv′, states′, ps′, observed, name, systems)
164
+ new (collect (eqs), iv′, states′, ps′, observed, name, systems, defaults )
160
165
end
161
166
end
162
167
163
168
function ReactionSystem (eqs, iv, species, params;
164
169
observed = [],
165
170
systems = [],
166
- name = gensym (:ReactionSystem ))
171
+ name = gensym (:ReactionSystem ),
172
+ default_u0= Dict (),
173
+ default_p= Dict (),
174
+ defaults= _merge (Dict (default_u0), Dict (default_p)))
167
175
168
176
# isempty(species) && error("ReactionSystems require at least one species.")
169
- ReactionSystem (eqs, iv, species, params, observed, name, systems)
177
+ ReactionSystem (eqs, iv, species, params, observed, name, systems, defaults )
170
178
end
171
179
172
180
function ReactionSystem (iv; kwargs... )
173
181
ReactionSystem (Reaction[], iv, [], []; kwargs... )
174
182
end
175
183
176
- function equations (sys:: ModelingToolkit.ReactionSystem )
177
- eqs = get_eqs (sys)
178
- systems = get_systems (sys)
179
- if isempty (systems)
180
- return eqs
181
- else
182
- eqs = [eqs;
183
- reduce (vcat,
184
- namespace_equations .(get_systems (sys));
185
- init= [])]
186
- return eqs
187
- end
188
- end
184
+ # function equations(sys::ModelingToolkit.ReactionSystem)
185
+ # eqs = get_eqs(sys)
186
+ # systems = get_systems(sys)
187
+ # if isempty(systems)
188
+ # return eqs
189
+ # else
190
+ # eqs = [eqs;
191
+ # reduce(vcat,
192
+ # namespace_equations.(get_systems(sys));
193
+ # init=[])]
194
+ # return eqs
195
+ # end
196
+ # end
189
197
190
198
"""
191
199
oderatelaw(rx; combinatoric_ratelaw=true)
@@ -419,7 +427,7 @@ function Base.convert(::Type{<:ODESystem}, rs::ReactionSystem;
419
427
name= nameof (rs), combinatoric_ratelaws= true , include_zero_odes= true , kwargs... )
420
428
eqs = assemble_drift (rs; combinatoric_ratelaws= combinatoric_ratelaws, include_zero_odes= include_zero_odes)
421
429
systems = map (sys -> (sys isa ODESystem) ? sys : convert (ODESystem, sys), get_systems (rs))
422
- ODESystem (eqs, get_iv (rs), get_states (rs), get_ps (rs); name= name, systems= systems, kwargs... )
430
+ ODESystem (eqs, get_iv (rs), get_states (rs), get_ps (rs); name= name, systems= systems, defaults = get_defaults (rs), kwargs... )
423
431
end
424
432
425
433
"""
@@ -439,7 +447,7 @@ function Base.convert(::Type{<:NonlinearSystem},rs::ReactionSystem;
439
447
name= nameof (rs), combinatoric_ratelaws= true , include_zero_odes= true , kwargs... )
440
448
eqs = assemble_drift (rs; combinatoric_ratelaws= combinatoric_ratelaws, as_odes= false , include_zero_odes= include_zero_odes)
441
449
systems = convert .(NonlinearSystem, get_systems (rs))
442
- NonlinearSystem (eqs, get_states (rs), get_ps (rs); name= name, systems= systems, kwargs... )
450
+ NonlinearSystem (eqs, get_states (rs), get_ps (rs); name= name, systems= systems, defaults = get_defaults (rs), kwargs... )
443
451
end
444
452
445
453
"""
@@ -487,6 +495,7 @@ function Base.convert(::Type{<:SDESystem}, rs::ReactionSystem;
487
495
(noise_scaling=== nothing ) ? get_ps (rs) : union (get_ps (rs), toparam (noise_scaling));
488
496
name= name,
489
497
systems= systems,
498
+ defaults= get_defaults (rs),
490
499
kwargs... )
491
500
end
492
501
@@ -507,7 +516,7 @@ function Base.convert(::Type{<:JumpSystem},rs::ReactionSystem;
507
516
name= nameof (rs), combinatoric_ratelaws= true , kwargs... )
508
517
eqs = assemble_jumps (rs; combinatoric_ratelaws= combinatoric_ratelaws)
509
518
systems = convert .(JumpSystem, get_systems (rs))
510
- JumpSystem (eqs, get_iv (rs), get_states (rs), get_ps (rs); name= name, systems= systems, kwargs... )
519
+ JumpSystem (eqs, get_iv (rs), get_states (rs), get_ps (rs); name= name, systems= systems, defaults = get_defaults (rs), kwargs... )
511
520
end
512
521
513
522
0 commit comments