@@ -17,7 +17,7 @@ function modelingtoolkitize(prob::DiffEqBase.ODEProblem; kwargs...)
17
17
params = if has_p
18
18
_params = define_params (p)
19
19
p isa Number ? _params[1 ] :
20
- (p isa Tuple || p isa NamedTuple ? _params :
20
+ (p isa Tuple || p isa NamedTuple || p isa AbstractDict ? _params :
21
21
ArrayInterfaceCore. restructure (p, _params))
22
22
else
23
23
[]
@@ -44,6 +44,7 @@ function modelingtoolkitize(prob::DiffEqBase.ODEProblem; kwargs...)
44
44
45
45
if DiffEqBase. isinplace (prob)
46
46
rhs = ArrayInterfaceCore. restructure (prob. u0, similar (vars, Num))
47
+ fill! (rhs, 0 )
47
48
prob. f (rhs, vars, params, t)
48
49
else
49
50
rhs = prob. f (vars, params, t)
@@ -53,6 +54,7 @@ function modelingtoolkitize(prob::DiffEqBase.ODEProblem; kwargs...)
53
54
54
55
sts = vec (collect (vars))
55
56
57
+ params = values (params)
56
58
params = if params isa Number || (params isa Array && ndims (params) == 0 )
57
59
[params[1 ]]
58
60
else
@@ -69,29 +71,33 @@ function modelingtoolkitize(prob::DiffEqBase.ODEProblem; kwargs...)
69
71
de
70
72
end
71
73
72
- _defvaridx (x, i, t ) = variable (x, i, T = SymbolicUtils. FnType{Tuple, Real})
73
- _defvar (x, t ) = variable (x, T = SymbolicUtils. FnType{Tuple, Real})
74
+ _defvaridx (x, i) = variable (x, i, T = SymbolicUtils. FnType{Tuple, Real})
75
+ _defvar (x) = variable (x, T = SymbolicUtils. FnType{Tuple, Real})
74
76
75
77
function define_vars (u, t)
76
- _vars = [_defvaridx (:x , i, t )(t) for i in eachindex (u)]
78
+ [_defvaridx (:x , i)(t) for i in eachindex (u)]
77
79
end
78
80
79
81
function define_vars (u:: Union{SLArray, LArray} , t)
80
- _vars = [_defvar (x, t )(t) for x in LabelledArrays. symnames (typeof (u))]
82
+ [_defvar (x)(t) for x in LabelledArrays. symnames (typeof (u))]
81
83
end
82
84
83
85
function define_vars (u:: Tuple , t)
84
- _vars = tuple ((_defvaridx (:x , i, t )(ModelingToolkit. value (t)) for i in eachindex (u)). .. )
86
+ tuple ((_defvaridx (:x , i)(ModelingToolkit. value (t)) for i in eachindex (u)). .. )
85
87
end
86
88
87
89
function define_vars (u:: NamedTuple , t)
88
- _vars = NamedTuple (x => _defvar (x, t )(ModelingToolkit. value (t)) for x in keys (u))
90
+ NamedTuple (x => _defvar (x)(ModelingToolkit. value (t)) for x in keys (u))
89
91
end
90
92
91
93
function define_params (p)
92
94
[toparam (variable (:α , i)) for i in eachindex (p)]
93
95
end
94
96
97
+ function define_params (p:: AbstractDict )
98
+ Dict (k => toparam (variable (:α , i)) for (i, k) in zip (1 : length (p), keys (p)))
99
+ end
100
+
95
101
function define_params (p:: Union{SLArray, LArray} )
96
102
[toparam (variable (x)) for x in LabelledArrays. symnames (typeof (p))]
97
103
end
0 commit comments