11export ODESystem, ODEFunction
22
3-
4- using Base: RefValue
5-
6-
73isintermediate (eq:: Equation ) = ! (isa (eq. lhs, Operation) && isa (eq. lhs. op, Differential))
84
95function flatten_differential (O:: Operation )
@@ -14,21 +10,25 @@ function flatten_differential(O::Operation)
1410 return (x, t, order + 1 )
1511end
1612
13+ <<<<<< < master: src/ systems/ diffeqs/ diffeqsystem. jl
1714struct DiffEq # dⁿx/dtⁿ = rhs
15+ ====== =
16+ struct ODEExpr # dⁿx/dtⁿ = rhs
17+ >>>>>> > add ReactionSystem and start SDESystem components: src/ systems/ diffeqs/ odesystem. jl
1818 x:: Variable
1919 n:: Int
2020 rhs:: Expression
2121end
22- function to_diffeq ( eq:: Equation )
22+ function Base . convert ( :: Type{ODEExpr} , eq:: Equation )
2323 isintermediate (eq) && throw (ArgumentError (" intermediate equation received" ))
2424 (x, t, n) = flatten_differential (eq. lhs)
2525 (isa (t, Operation) && isa (t. op, Variable) && isempty (t. args)) ||
2626 throw (ArgumentError (" invalid independent variable $t " ))
2727 (isa (x, Operation) && isa (x. op, Variable) && length (x. args) == 1 && isequal (first (x. args), t)) ||
2828 throw (ArgumentError (" invalid dependent variable $x " ))
29- return t. op, DiffEq (x. op, n, eq. rhs)
29+ return t. op, ODEExpr (x. op, n, eq. rhs)
3030end
31- Base.:(== )(a:: DiffEq , b:: DiffEq ) = isequal ((a. x, a. n, a. rhs), (b. x, b. n, b. rhs))
31+ Base.:(== )(a:: ODEExpr , b:: ODEExpr ) = isequal ((a. x, a. n, a. rhs), (b. x, b. n, b. rhs))
3232
3333"""
3434$(TYPEDEF)
@@ -56,7 +56,7 @@ de = ODESystem(eqs)
5656"""
5757struct ODESystem <: AbstractSystem
5858 """ The ODEs defining the system."""
59- eqs:: Vector{DiffEq }
59+ eqs:: Vector{ODEExpr }
6060 """ Independent variable."""
6161 iv:: Variable
6262 """ Dependent (state) variables."""
@@ -86,7 +86,7 @@ struct ODESystem <: AbstractSystem
8686end
8787
8888function ODESystem (eqs)
89- reformatted = to_diffeq .( eqs)
89+ reformatted = convert .(ODEExpr, eqs)
9090
9191 ivs = unique (r[1 ] for r ∈ reformatted)
9292 length (ivs) == 1 || throw (ArgumentError (" one independent variable currently supported" ))
@@ -102,8 +102,12 @@ function ODESystem(eqs)
102102 ODESystem (deqs, iv, dvs, ps)
103103end
104104
105+ <<<<<< < master: src/ systems/ diffeqs/ diffeqsystem. jl
105106function ODESystem (deqs:: AbstractVector{DiffEq} , iv, dvs, ps)
106107 tgrad = RefValue (Vector {Expression} (undef, 0 ))
108+ ====== =
109+ function ODESystem (deqs:: AbstractVector{ODEExpr} , iv, dvs, ps)
110+ >>>>>> > add ReactionSystem and start SDESystem components: src/ systems/ diffeqs/ odesystem. jl
107111 jac = RefValue (Matrix {Expression} (undef, 0 , 0 ))
108112 Wfact = RefValue (Matrix {Expression} (undef, 0 , 0 ))
109113 Wfact_t = RefValue (Matrix {Expression} (undef, 0 , 0 ))
@@ -114,7 +118,7 @@ function ODESystem(deqs::AbstractVector{<:Equation}, iv, dvs, ps)
114118 _dvs = [deq. op for deq ∈ dvs]
115119 _iv = iv. op
116120 _ps = [p. op for p ∈ ps]
117- ODESystem (getindex .(to_diffeq .( deqs),2 ), _iv, _dvs, _ps)
121+ ODESystem (getindex .(convert .(ODEExpr, deqs),2 ), _iv, _dvs, _ps)
118122end
119123
120124function _eq_unordered (a, b)
0 commit comments