1919
2020function DiffEqSystem (eqs; iv_name = :IndependentVariable ,
2121 dv_name = :DependentVariable ,
22- v_name = :Variable ,
2322 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 ))
23+ predicates = [_is_derivative, _subtype (iv_name), _is_dependent, _subtype (dv_name), _subtype (p_name)]
24+ _, ivs, dvs, vs, ps = extract_elements (eqs, predicates)
25+ DiffEqSystem (eqs, ivs, dvs, vs, ps, iv_name, dv_name, p_name, Matrix {Expression} (undef,0 ,0 ))
2826end
2927
3028function DiffEqSystem (eqs, ivs;
3129 dv_name = :DependentVariable ,
32- v_name = :Variable ,
3330 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 )
31+ predicates = [_is_derivative, _is_dependent, _subtype (dv_name), _subtype ( p_name)]
32+ _, dvs, vs, ps = extract_elements (eqs, predicates )
3633 DiffEqSystem (eqs, ivs, dvs, vs, ps, ivs[1 ]. subtype, dv_name, p_name, Matrix {Expression} (undef,0 ,0 ))
3734end
3835
3936function 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)]
37+ var_exprs = [:($ (sys. dvs[i]. name) = u[$ i]) for i in eachindex (sys. dvs)]
38+ param_exprs = [:($ (sys. ps[i]. name) = p[$ i]) for i in eachindex (sys. ps)]
4239 sys_exprs = build_equals_expr .(sys. eqs)
4340 if version == ArrayFunction
44- dvar_exprs = [:(du[$ i] = $ (Symbol (" $(sys. dvs[i]. name) _$(sys. ivs[1 ]. name) " ))) for i in 1 : length (sys. dvs)]
41+ dvar_exprs = [:(du[$ i] = $ (Symbol (" $(sys. dvs[i]. name) _$(sys. ivs[1 ]. name) " ))) for i in eachindex (sys. dvs)]
4542 exprs = vcat (var_exprs,param_exprs,sys_exprs,dvar_exprs)
4643 block = expr_arr_to_block (exprs)
4744 :((du,u,p,t)-> $ (toexpr (block)))
4845 elseif version == SArrayFunction
49- dvar_exprs = [:($ (Symbol (" $(sys. dvs[i]. name) _$(sys. ivs[1 ]. name) " ))) for i in 1 : length (sys. dvs)]
46+ dvar_exprs = [:($ (Symbol (" $(sys. dvs[i]. name) _$(sys. ivs[1 ]. name) " ))) for i in eachindex (sys. dvs)]
5047 svector_expr = quote
5148 E = eltype (tuple ($ (dvar_exprs... )))
5249 T = StaticArrays. similar_type (typeof (u), E)
@@ -84,8 +81,8 @@ function calculate_jacobian(sys::DiffEqSystem, simplify=true)
8481end
8582
8683function 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)]
84+ var_exprs = [:($ (sys. dvs[i]. name) = u[$ i]) for i in eachindex (sys. dvs)]
85+ param_exprs = [:($ (sys. ps[i]. name) = p[$ i]) for i in eachindex (sys. ps)]
8986 diff_exprs = filter (! isintermediate, sys. eqs)
9087 jac = calculate_jacobian (sys, simplify)
9188 sys. jac = jac
@@ -96,8 +93,8 @@ function generate_ode_jacobian(sys::DiffEqSystem, simplify=true)
9693end
9794
9895function 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)]
96+ var_exprs = [:($ (sys. dvs[i]. name) = u[$ i]) for i in eachindex (sys. dvs)]
97+ param_exprs = [:($ (sys. ps[i]. name) = p[$ i]) for i in eachindex (sys. ps)]
10198 diff_exprs = filter (! isintermediate, sys. eqs)
10299 jac = sys. jac
103100
0 commit comments