Skip to content

Commit e1a4e6f

Browse files
committed
Optimize calculate_massmatrix
1 parent 9915d6d commit e1a4e6f

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,11 @@ function calculate_massmatrix(sys::AbstractODESystem; simplify=false)
109109
eqs = equations(sys)
110110
dvs = states(sys)
111111
M = zeros(length(eqs),length(eqs))
112+
state2idx = Dict(s => i for (i, s) in enumerate(dvs))
112113
for (i,eq) in enumerate(eqs)
113114
if eq.lhs isa Term && operation(eq.lhs) isa Differential
114-
j = findfirst(x->isequal(tosymbol(x),tosymbol(var_from_nested_derivative(eq.lhs)[1])),dvs)
115+
st = var_from_nested_derivative(eq.lhs)[1]
116+
j = state2idx[st]
115117
M[i,j] = 1
116118
else
117119
_iszero(eq.lhs) || error("Only semi-explicit constant mass matrices are currently supported. Faulty equation: $eq.")

0 commit comments

Comments
 (0)