@@ -22,9 +22,10 @@ Notes:
22
22
`combinatoric_ratelaw=false` then the ratelaw is `k*S^2`, i.e. the scaling
23
23
factor is ignored.
24
24
"""
25
- function oderatelaw (rx; combinatoric_ratelaw = true )
25
+ function oderatelaw (rx; combinatoric_ratelaw = true , expand_catalyst_funs = true )
26
26
@unpack rate, substrates, substoich, only_use_rate = rx
27
27
rl = rate
28
+ expand_catalyst_funs && (rl = expand_registered_functions (rl))
28
29
29
30
# if the stoichiometric coefficients are not integers error if asking to scale rates
30
31
! all (s -> s isa Union{Integer, Symbolic}, substoich) &&
46
47
# including non-species variables.
47
48
drop_dynamics (s) = isconstant (s) || isbc (s) || (! isspecies (s))
48
49
49
- function assemble_oderhs (rs, ispcs; combinatoric_ratelaws = true , remove_conserved = false )
50
+ function assemble_oderhs (rs, ispcs; combinatoric_ratelaws = true ,
51
+ remove_conserved = false , expand_catalyst_funs = true )
50
52
nps = get_networkproperties (rs)
51
53
species_to_idx = Dict (x => i for (i, x) in enumerate (ispcs))
52
54
rhsvec = Any[0 for _ in ispcs]
@@ -57,7 +59,8 @@ function assemble_oderhs(rs, ispcs; combinatoric_ratelaws = true, remove_conserv
57
59
end
58
60
59
61
for rx in get_rxs (rs)
60
- rl = oderatelaw (rx; combinatoric_ratelaw = combinatoric_ratelaws)
62
+ rl = oderatelaw (rx; combinatoric_ratelaw = combinatoric_ratelaws,
63
+ expand_catalyst_funs)
61
64
remove_conserved && (rl = substitute (rl, depspec_submap))
62
65
for (spec, stoich) in rx. netstoich
63
66
# dependent species don't get an ODE, so are skipped
@@ -90,8 +93,9 @@ function assemble_oderhs(rs, ispcs; combinatoric_ratelaws = true, remove_conserv
90
93
end
91
94
92
95
function assemble_drift (rs, ispcs; combinatoric_ratelaws = true , as_odes = true ,
93
- include_zero_odes = true , remove_conserved = false )
94
- rhsvec = assemble_oderhs (rs, ispcs; combinatoric_ratelaws, remove_conserved)
96
+ include_zero_odes = true , remove_conserved = false , expand_catalyst_funs = true )
97
+ rhsvec = assemble_oderhs (rs, ispcs; combinatoric_ratelaws, remove_conserved,
98
+ expand_catalyst_funs)
95
99
if as_odes
96
100
D = Differential (get_iv (rs))
97
101
eqs = [Equation (D (x), rhs)
@@ -484,9 +488,9 @@ Keyword args and default values:
484
488
"""
485
489
function Base. convert (:: Type{<:ODESystem} , rs:: ReactionSystem ; name = nameof (rs),
486
490
combinatoric_ratelaws = get_combinatoric_ratelaws (rs),
487
- include_zero_odes = true , remove_conserved = false ,
488
- checks = false , default_u0 = Dict (), default_p = Dict (),
489
- defaults = _merge (Dict (default_u0), Dict (default_p)),
491
+ include_zero_odes = true , remove_conserved = false , checks = false ,
492
+ default_u0 = Dict (), default_p = Dict (),
493
+ defaults = _merge (Dict (default_u0), Dict (default_p)), expand_catalyst_funs = true ,
490
494
kwargs... )
491
495
# Error checks.
492
496
iscomplete (rs) || error (COMPLETENESS_ERROR)
@@ -496,7 +500,7 @@ function Base.convert(::Type{<:ODESystem}, rs::ReactionSystem; name = nameof(rs)
496
500
remove_conserved && conservationlaws (fullrs)
497
501
ists, ispcs = get_indep_sts (fullrs, remove_conserved)
498
502
eqs = assemble_drift (fullrs, ispcs; combinatoric_ratelaws, remove_conserved,
499
- include_zero_odes)
503
+ include_zero_odes, expand_catalyst_funs )
500
504
eqs, us, ps, obs, defs = addconstraints! (eqs, fullrs, ists, ispcs; remove_conserved)
501
505
502
506
ODESystem (eqs, get_iv (fullrs), us, ps;
@@ -553,7 +557,7 @@ function Base.convert(::Type{<:NonlinearSystem}, rs::ReactionSystem; name = name
553
557
remove_conserved = false , conseqs_remake_warn = true , checks = false ,
554
558
default_u0 = Dict (), default_p = Dict (),
555
559
defaults = _merge (Dict (default_u0), Dict (default_p)),
556
- all_differentials_permitted = false , kwargs... )
560
+ all_differentials_permitted = false , expand_catalyst_funs = true , kwargs... )
557
561
# Error checks.
558
562
iscomplete (rs) || error (COMPLETENESS_ERROR)
559
563
spatial_convert_err (rs:: ReactionSystem , NonlinearSystem)
@@ -631,7 +635,9 @@ Notes:
631
635
function Base. convert (:: Type{<:SDESystem} , rs:: ReactionSystem ;
632
636
name = nameof (rs), combinatoric_ratelaws = get_combinatoric_ratelaws (rs),
633
637
include_zero_odes = true , checks = false , remove_conserved = false ,
634
- default_u0 = Dict (), default_p = Dict (), defaults = _merge (Dict (default_u0), Dict (default_p)),
638
+ default_u0 = Dict (), default_p = Dict (),
639
+ defaults = _merge (Dict (default_u0), Dict (default_p)),
640
+ expand_catalyst_funs = true ,
635
641
kwargs... )
636
642
# Error checks.
637
643
iscomplete (rs) || error (COMPLETENESS_ERROR)
@@ -681,9 +687,8 @@ Notes:
681
687
"""
682
688
function Base. convert (:: Type{<:JumpSystem} , rs:: ReactionSystem ; name = nameof (rs),
683
689
combinatoric_ratelaws = get_combinatoric_ratelaws (rs),
684
- remove_conserved = nothing , checks = false ,
685
- default_u0 = Dict (), default_p = Dict (),
686
- defaults = _merge (Dict (default_u0), Dict (default_p)),
690
+ remove_conserved = nothing , checks = false , default_u0 = Dict (), default_p = Dict (),
691
+ defaults = _merge (Dict (default_u0), Dict (default_p)), expand_catalyst_funs = true ,
687
692
kwargs... )
688
693
iscomplete (rs) || error (COMPLETENESS_ERROR)
689
694
spatial_convert_err (rs:: ReactionSystem , JumpSystem)
@@ -720,9 +725,9 @@ function DiffEqBase.ODEProblem(rs::ReactionSystem, u0, tspan,
720
725
check_length = false , name = nameof (rs),
721
726
combinatoric_ratelaws = get_combinatoric_ratelaws (rs),
722
727
include_zero_odes = true , remove_conserved = false , checks = false ,
723
- structural_simplify = false , kwargs... )
728
+ expand_catalyst_funs = true , structural_simplify = false , kwargs... )
724
729
osys = convert (ODESystem, rs; name, combinatoric_ratelaws, include_zero_odes, checks,
725
- remove_conserved)
730
+ remove_conserved, expand_catalyst_funs )
726
731
727
732
# Handles potential differential algebraic equations (which requires `structural_simplify`).
728
733
if structural_simplify
@@ -768,10 +773,12 @@ Keyword args and default values:
768
773
function DiffEqBase. NonlinearProblem (rs:: ReactionSystem , u0,
769
774
p = DiffEqBase. NullParameters (), args... ;
770
775
name = nameof (rs), combinatoric_ratelaws = get_combinatoric_ratelaws (rs),
771
- remove_conserved = false , conseqs_remake_warn = true , checks = false , check_length = false ,
776
+ remove_conserved = false , conseqs_remake_warn = true , checks = false ,
777
+ check_length = false , expand_catalyst_funs = true ,
772
778
structural_simplify = false , all_differentials_permitted = false , kwargs... )
773
779
nlsys = convert (NonlinearSystem, rs; name, combinatoric_ratelaws, checks,
774
- all_differentials_permitted, remove_conserved, conseqs_remake_warn)
780
+ all_differentials_permitted, remove_conserved, conseqs_remake_warn,
781
+ expand_catalyst_funs)
775
782
nlsys = structural_simplify ? MT. structural_simplify (nlsys) : complete (nlsys)
776
783
return NonlinearProblem (nlsys, u0, p, args... ; check_length,
777
784
kwargs... )
781
788
function DiffEqBase. SDEProblem (rs:: ReactionSystem , u0, tspan,
782
789
p = DiffEqBase. NullParameters (), args... ;
783
790
name = nameof (rs), combinatoric_ratelaws = get_combinatoric_ratelaws (rs),
784
- include_zero_odes = true , checks = false , check_length = false , remove_conserved = false ,
785
- structural_simplify = false , kwargs... )
786
- sde_sys = convert (SDESystem, rs; name, combinatoric_ratelaws,
791
+ include_zero_odes = true , checks = false , check_length = false ,
792
+ remove_conserved = false , structural_simplify = false ,
793
+ expand_catalyst_funs = true , kwargs... )
794
+ sde_sys = convert (SDESystem, rs; name, combinatoric_ratelaws, expand_catalyst_funs,
787
795
include_zero_odes, checks, remove_conserved)
788
796
789
797
# Handles potential differential algebraic equations (which requires `structural_simplify`).
@@ -848,8 +856,9 @@ plot(sol, idxs = :A)
848
856
"""
849
857
function JumpInputs (rs:: ReactionSystem , u0, tspan, p = DiffEqBase. NullParameters ();
850
858
name = nameof (rs), combinatoric_ratelaws = get_combinatoric_ratelaws (rs),
851
- checks = false , kwargs... )
852
- jsys = complete (convert (JumpSystem, rs; name, combinatoric_ratelaws, checks))
859
+ expand_catalyst_funs = true , checks = false , kwargs... )
860
+ jsys = complete (convert (JumpSystem, rs; name, combinatoric_ratelaws,
861
+ expand_catalyst_funs, checks))
853
862
if MT. has_variableratejumps (jsys)
854
863
prob = ODEProblem (jsys, u0, tspan, p; kwargs... )
855
864
else
@@ -873,11 +882,11 @@ end
873
882
874
883
# DiscreteProblem from AbstractReactionNetwork
875
884
function DiffEqBase. DiscreteProblem (rs:: ReactionSystem , u0, tspan:: Tuple ,
876
- p = DiffEqBase. NullParameters (), args... ;
877
- name = nameof (rs),
878
- combinatoric_ratelaws = get_combinatoric_ratelaws (rs),
879
- checks = false , kwargs ... )
880
- jsys = convert (JumpSystem, rs; name, combinatoric_ratelaws, checks )
885
+ p = DiffEqBase. NullParameters (), args... ; name = nameof (rs),
886
+ combinatoric_ratelaws = get_combinatoric_ratelaws (rs), checks = false ,
887
+ expand_catalyst_funs = true , kwargs ... )
888
+ jsys = convert (JumpSystem, rs; name, combinatoric_ratelaws, checks,
889
+ expand_catalyst_funs )
881
890
jsys = complete (jsys)
882
891
return DiscreteProblem (jsys, u0, tspan, p, args... ; kwargs... )
883
892
end
886
895
function JumpProcesses. JumpProblem (rs:: ReactionSystem , prob,
887
896
aggregator = JumpProcesses. NullAggregator (); name = nameof (rs),
888
897
combinatoric_ratelaws = get_combinatoric_ratelaws (rs),
889
- checks = false , kwargs... )
890
- jsys = convert (JumpSystem, rs; name, combinatoric_ratelaws, checks)
898
+ expand_catalyst_funs = true , checks = false , kwargs... )
899
+ jsys = convert (JumpSystem, rs; name, combinatoric_ratelaws,
900
+ expand_catalyst_funs, checks)
891
901
jsys = complete (jsys)
892
902
return JumpProblem (jsys, prob, aggregator; kwargs... )
893
903
end
@@ -905,9 +915,9 @@ function DiffEqBase.SteadyStateProblem(rs::ReactionSystem, u0,
905
915
check_length = false , name = nameof (rs),
906
916
combinatoric_ratelaws = get_combinatoric_ratelaws (rs),
907
917
remove_conserved = false , include_zero_odes = true , checks = false ,
908
- structural_simplify = false , kwargs... )
918
+ expand_catalyst_funs = true , structural_simplify = false , kwargs... )
909
919
osys = convert (ODESystem, rs; name, combinatoric_ratelaws, include_zero_odes, checks,
910
- remove_conserved)
920
+ remove_conserved, expand_catalyst_funs )
911
921
912
922
# Handles potential differential algebraic equations (which requires `structural_simplify`).
913
923
if structural_simplify
0 commit comments