19
19
20
20
function DiffEqSystem (eqs; iv_name = :IndependentVariable ,
21
21
dv_name = :DependentVariable ,
22
- v_name = :Variable ,
23
22
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 ))
28
26
end
29
27
30
28
function DiffEqSystem (eqs, ivs;
31
29
dv_name = :DependentVariable ,
32
- v_name = :Variable ,
33
30
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 )
36
33
DiffEqSystem (eqs, ivs, dvs, vs, ps, ivs[1 ]. subtype, dv_name, p_name, Matrix {Expression} (undef,0 ,0 ))
37
34
end
38
35
39
36
function 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)]
42
39
sys_exprs = build_equals_expr .(sys. eqs)
43
40
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)]
45
42
exprs = vcat (var_exprs,param_exprs,sys_exprs,dvar_exprs)
46
43
block = expr_arr_to_block (exprs)
47
44
:((du,u,p,t)-> $ (toexpr (block)))
48
45
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)]
50
47
svector_expr = quote
51
48
E = eltype (tuple ($ (dvar_exprs... )))
52
49
T = StaticArrays. similar_type (typeof (u), E)
@@ -84,8 +81,8 @@ function calculate_jacobian(sys::DiffEqSystem, simplify=true)
84
81
end
85
82
86
83
function 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)]
89
86
diff_exprs = filter (! isintermediate, sys. eqs)
90
87
jac = calculate_jacobian (sys, simplify)
91
88
sys. jac = jac
@@ -96,8 +93,8 @@ function generate_ode_jacobian(sys::DiffEqSystem, simplify=true)
96
93
end
97
94
98
95
function 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)]
101
98
diff_exprs = filter (! isintermediate, sys. eqs)
102
99
jac = sys. jac
103
100
0 commit comments