@@ -149,44 +149,38 @@ 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
189
-
190
184
"""
191
185
oderatelaw(rx; combinatoric_ratelaw=true)
192
186
@@ -419,7 +413,7 @@ function Base.convert(::Type{<:ODESystem}, rs::ReactionSystem;
419
413
name= nameof (rs), combinatoric_ratelaws= true , include_zero_odes= true , kwargs... )
420
414
eqs = assemble_drift (rs; combinatoric_ratelaws= combinatoric_ratelaws, include_zero_odes= include_zero_odes)
421
415
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... )
416
+ ODESystem (eqs, get_iv (rs), get_states (rs), get_ps (rs); name= name, systems= systems, defaults = get_defaults (rs), kwargs... )
423
417
end
424
418
425
419
"""
@@ -439,7 +433,7 @@ function Base.convert(::Type{<:NonlinearSystem},rs::ReactionSystem;
439
433
name= nameof (rs), combinatoric_ratelaws= true , include_zero_odes= true , kwargs... )
440
434
eqs = assemble_drift (rs; combinatoric_ratelaws= combinatoric_ratelaws, as_odes= false , include_zero_odes= include_zero_odes)
441
435
systems = convert .(NonlinearSystem, get_systems (rs))
442
- NonlinearSystem (eqs, get_states (rs), get_ps (rs); name= name, systems= systems, kwargs... )
436
+ NonlinearSystem (eqs, get_states (rs), get_ps (rs); name= name, systems= systems, defaults = get_defaults (rs), kwargs... )
443
437
end
444
438
445
439
"""
@@ -487,6 +481,7 @@ function Base.convert(::Type{<:SDESystem}, rs::ReactionSystem;
487
481
(noise_scaling=== nothing ) ? get_ps (rs) : union (get_ps (rs), toparam (noise_scaling));
488
482
name= name,
489
483
systems= systems,
484
+ defaults= get_defaults (rs),
490
485
kwargs... )
491
486
end
492
487
@@ -507,7 +502,7 @@ function Base.convert(::Type{<:JumpSystem},rs::ReactionSystem;
507
502
name= nameof (rs), combinatoric_ratelaws= true , kwargs... )
508
503
eqs = assemble_jumps (rs; combinatoric_ratelaws= combinatoric_ratelaws)
509
504
systems = convert .(JumpSystem, get_systems (rs))
510
- JumpSystem (eqs, get_iv (rs), get_states (rs), get_ps (rs); name= name, systems= systems, kwargs... )
505
+ JumpSystem (eqs, get_iv (rs), get_states (rs), get_ps (rs); name= name, systems= systems, defaults = get_defaults (rs), kwargs... )
511
506
end
512
507
513
508
0 commit comments