@@ -2,51 +2,35 @@ mutable struct DiffEqSystem <: AbstractSystem
22 eqs:: Vector{Equation}
33 ivs:: Vector{Variable}
44 dvs:: Vector{Variable}
5- vs:: Vector{Variable}
65 ps:: Vector{Variable}
7- iv_name:: Symbol
8- dv_name:: Symbol
9- p_name:: Symbol
106 jac:: Matrix{Expression}
117end
128
13- function DiffEqSystem (eqs, ivs, dvs, vs, ps)
14- iv_name = ivs[1 ]. subtype
15- dv_name = dvs[1 ]. subtype
16- p_name = isempty (ps) ? :Parameter : ps[1 ]. subtype
17- DiffEqSystem (eqs, ivs, dvs, vs, ps, iv_name, dv_name, p_name, Matrix {Expression} (undef,0 ,0 ))
18- end
9+ DiffEqSystem (eqs, ivs, dvs, ps) = DiffEqSystem (eqs, ivs, dvs, ps, Matrix {Expression} (undef,0 ,0 ))
1910
20- function DiffEqSystem (eqs; iv_name = :IndependentVariable ,
21- dv_name = :DependentVariable ,
22- v_name = :Variable ,
23- p_name = :Parameter )
24- targetmap = Dict (iv_name => iv_name, dv_name => dv_name, v_name => v_name,
25- p_name => p_name)
26- ivs, dvs, vs, ps = extract_elements (eqs, targetmap)
27- DiffEqSystem (eqs, ivs, dvs, vs, ps, iv_name, dv_name, p_name, Matrix {Expression} (0 ,0 ))
11+ function DiffEqSystem (eqs)
12+ predicates = [_is_derivative, _subtype (:IndependentVariable ), _is_dependent, _subtype (:Parameter )]
13+ _, ivs, dvs, ps = extract_elements (eqs, predicates)
14+ DiffEqSystem (eqs, ivs, dvs, ps, Matrix {Expression} (undef,0 ,0 ))
2815end
2916
30- function DiffEqSystem (eqs, ivs;
31- dv_name = :DependentVariable ,
32- v_name = :Variable ,
33- p_name = :Parameter )
34- targetmap = Dict (dv_name => dv_name, v_name => v_name, p_name => p_name)
35- dvs, vs, ps = extract_elements (eqs, targetmap)
36- DiffEqSystem (eqs, ivs, dvs, vs, ps, ivs[1 ]. subtype, dv_name, p_name, Matrix {Expression} (undef,0 ,0 ))
17+ function DiffEqSystem (eqs, ivs)
18+ predicates = [_is_derivative, _is_dependent, _subtype (:Parameter )]
19+ _, dvs, ps = extract_elements (eqs, predicates)
20+ DiffEqSystem (eqs, ivs, dvs, ps, Matrix {Expression} (undef,0 ,0 ))
3721end
3822
3923function generate_ode_function (sys:: DiffEqSystem ;version = ArrayFunction)
40- var_exprs = [:($ (sys. dvs[i]. name) = u[$ i]) for i in 1 : length (sys. dvs)]
41- param_exprs = [:($ (sys. ps[i]. name) = p[$ i]) for i in 1 : length (sys. ps)]
24+ var_exprs = [:($ (sys. dvs[i]. name) = u[$ i]) for i in eachindex (sys. dvs)]
25+ param_exprs = [:($ (sys. ps[i]. name) = p[$ i]) for i in eachindex (sys. ps)]
4226 sys_exprs = build_equals_expr .(sys. eqs)
4327 if version == ArrayFunction
44- dvar_exprs = [:(du[$ i] = $ (Symbol (" $(sys. dvs[i]. name) _$(sys. ivs[1 ]. name) " ))) for i in 1 : length (sys. dvs)]
28+ dvar_exprs = [:(du[$ i] = $ (Symbol (" $(sys. dvs[i]. name) _$(sys. ivs[1 ]. name) " ))) for i in eachindex (sys. dvs)]
4529 exprs = vcat (var_exprs,param_exprs,sys_exprs,dvar_exprs)
4630 block = expr_arr_to_block (exprs)
4731 :((du,u,p,t)-> $ (toexpr (block)))
4832 elseif version == SArrayFunction
49- dvar_exprs = [:($ (Symbol (" $(sys. dvs[i]. name) _$(sys. ivs[1 ]. name) " ))) for i in 1 : length (sys. dvs)]
33+ dvar_exprs = [:($ (Symbol (" $(sys. dvs[i]. name) _$(sys. ivs[1 ]. name) " ))) for i in eachindex (sys. dvs)]
5034 svector_expr = quote
5135 E = eltype (tuple ($ (dvar_exprs... )))
5236 T = StaticArrays. similar_type (typeof (u), E)
@@ -84,8 +68,8 @@ function calculate_jacobian(sys::DiffEqSystem, simplify=true)
8468end
8569
8670function generate_ode_jacobian (sys:: DiffEqSystem , simplify= true )
87- var_exprs = [:($ (sys. dvs[i]. name) = u[$ i]) for i in 1 : length (sys. dvs)]
88- param_exprs = [:($ (sys. ps[i]. name) = p[$ i]) for i in 1 : length (sys. ps)]
71+ var_exprs = [:($ (sys. dvs[i]. name) = u[$ i]) for i in eachindex (sys. dvs)]
72+ param_exprs = [:($ (sys. ps[i]. name) = p[$ i]) for i in eachindex (sys. ps)]
8973 diff_exprs = filter (! isintermediate, sys. eqs)
9074 jac = calculate_jacobian (sys, simplify)
9175 sys. jac = jac
@@ -96,12 +80,12 @@ function generate_ode_jacobian(sys::DiffEqSystem, simplify=true)
9680end
9781
9882function generate_ode_iW (sys:: DiffEqSystem , simplify= true )
99- var_exprs = [:($ (sys. dvs[i]. name) = u[$ i]) for i in 1 : length (sys. dvs)]
100- param_exprs = [:($ (sys. ps[i]. name) = p[$ i]) for i in 1 : length (sys. ps)]
83+ var_exprs = [:($ (sys. dvs[i]. name) = u[$ i]) for i in eachindex (sys. dvs)]
84+ param_exprs = [:($ (sys. ps[i]. name) = p[$ i]) for i in eachindex (sys. ps)]
10185 diff_exprs = filter (! isintermediate, sys. eqs)
10286 jac = sys. jac
10387
104- gam = Variable (:gam )
88+ gam = Unknown (:gam )
10589
10690 W = LinearAlgebra. I - gam* jac
10791 W = SMatrix {size(W,1),size(W,2)} (W)
0 commit comments