Skip to content

Commit dd8b432

Browse files
refactor: batch computation of temporary values in maybe_build_initialization_problem
1 parent 9982ed9 commit dd8b432

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/systems/problem_utils.jl

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1153,20 +1153,24 @@ function maybe_build_initialization_problem(
11531153
update_initializeprob! = ModelingToolkit.update_initializeprob!
11541154
end
11551155

1156-
for p in punknowns
1157-
is_parameter_solvable(p, op, defs, guesses) || continue
1158-
get(op, p, missing) === missing || continue
1156+
filter!(punknowns) do p
1157+
is_parameter_solvable(p, op, defs, guesses) && get(op, p, missing) === missing
1158+
end
1159+
pvals = getu(initializeprob, punknowns)(initializeprob)
1160+
for (p, pval) in zip(punknowns, pvals)
11591161
p = unwrap(p)
1160-
op[p] = getu(initializeprob, p)(initializeprob)
1162+
op[p] = pval
11611163
if iscall(p) && operation(p) === getindex
11621164
arrp = arguments(p)[1]
1165+
get(op, arrp, nothing) !== missing && continue
11631166
op[arrp] = collect(arrp)
11641167
end
11651168
end
11661169

11671170
if time_dependent_init
1168-
for v in missing_unknowns
1169-
op[v] = getu(initializeprob, v)(initializeprob)
1171+
uvals = getu(initializeprob, collect(missing_unknowns))(initializeprob)
1172+
for (v, val) in zip(missing_unknowns, uvals)
1173+
op[v] = val
11701174
end
11711175
empty!(missing_unknowns)
11721176
end

0 commit comments

Comments
 (0)