@@ -16,12 +16,12 @@ function modelingtoolkitize(prob::DiffEqBase.ODEProblem)
16
16
17
17
has_p = ! (p isa Union{DiffEqBase. NullParameters,Nothing})
18
18
19
- var (x, i) = Num ( Sym {FnType{Tuple{symtype(t)}, Real}} ( nameof ( Variable (x, i))) )
20
- _vars = [ var ( :x , i)(ModelingToolkit . value (t)) for i in eachindex (prob . u0)]
19
+ _vars = define_vars (prob . u0,t )
20
+
21
21
vars = prob. u0 isa Number ? _vars : ArrayInterface. restructure (prob. u0,_vars)
22
22
params = if has_p
23
- _params = [ Num ( toparam ( Sym {Real} ( nameof ( Variable ( :α , i))))) for i in eachindex (p)]
24
- p isa Number ? _params[1 ] : reshape (_params, size (p) )
23
+ _params = define_params (p)
24
+ p isa Number ? _params[1 ] : ArrayInterface . restructure (p,_params )
25
25
else
26
26
[]
27
27
end
@@ -46,7 +46,7 @@ function modelingtoolkitize(prob::DiffEqBase.ODEProblem)
46
46
end
47
47
48
48
if DiffEqBase. isinplace (prob)
49
- rhs = similar (vars, Num)
49
+ rhs = ArrayInterface . restructure (prob . u0, similar (vars, Num) )
50
50
prob. f (rhs, vars, params, t)
51
51
else
52
52
rhs = prob. f (vars, params, t)
@@ -71,6 +71,26 @@ function modelingtoolkitize(prob::DiffEqBase.ODEProblem)
71
71
de
72
72
end
73
73
74
+ _defvaridx (x, i, t) = Num (Sym {FnType{Tuple{symtype(t)}, Real}} (nameof (Variable (x, i))))
75
+ _defvar (x, t) = Num (Sym {FnType{Tuple{symtype(t)}, Real}} (nameof (Variable (x))))
76
+
77
+ function define_vars (u,t)
78
+ _vars = [_defvaridx (:x , i, t)(ModelingToolkit. value (t)) for i in eachindex (u)]
79
+ end
80
+
81
+ function define_vars (u:: Union{SLArray,LArray} ,t)
82
+ _vars = [_defvar (x, t)(ModelingToolkit. value (t)) for x in LabelledArrays. symnames (typeof (u))]
83
+ end
84
+
85
+ function define_params (p)
86
+ [Num (toparam (Sym {Real} (nameof (Variable (:α , i))))) for i in eachindex (p)]
87
+ end
88
+
89
+ function define_params (p:: Union{SLArray,LArray} )
90
+ [Num (toparam (Sym {Real} (nameof (Variable (x))))) for x in LabelledArrays. symnames (typeof (p))]
91
+ end
92
+
93
+
74
94
"""
75
95
$(TYPEDSIGNATURES)
76
96
0 commit comments