Skip to content

Commit 40f0587

Browse files
refactor: batch computation of temporary values in maybe_build_initialization_problem
1 parent 3b48e63 commit 40f0587

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
@@ -1128,20 +1128,24 @@ function maybe_build_initialization_problem(
11281128
update_initializeprob! = ModelingToolkit.update_initializeprob!
11291129
end
11301130

1131-
for p in punknowns
1132-
is_parameter_solvable(p, pmap, defs, guesses) || continue
1133-
get(op, p, missing) === missing || continue
1131+
filter!(punknowns) do p
1132+
is_parameter_solvable(p, op, defs, guesses) && get(op, p, missing) === missing
1133+
end
1134+
pvals = getu(initializeprob, punknowns)(initializeprob)
1135+
for (p, pval) in zip(punknowns, pvals)
11341136
p = unwrap(p)
1135-
op[p] = getu(initializeprob, p)(initializeprob)
1137+
op[p] = pval
11361138
if iscall(p) && operation(p) === getindex
11371139
arrp = arguments(p)[1]
1140+
get(op, arrp, nothing) !== missing && continue
11381141
op[arrp] = collect(arrp)
11391142
end
11401143
end
11411144

11421145
if is_time_dependent(sys)
1143-
for v in missing_unknowns
1144-
op[v] = getu(initializeprob, v)(initializeprob)
1146+
uvals = getu(initializeprob, collect(missing_unknowns))(initializeprob)
1147+
for (v, val) in zip(missing_unknowns, uvals)
1148+
op[v] = val
11451149
end
11461150
empty!(missing_unknowns)
11471151
end

0 commit comments

Comments
 (0)