Skip to content

Commit b69d79e

Browse files
fix: retain type of buffers when promoting u0/p of initialization problem
1 parent fd869e1 commit b69d79e

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

src/systems/problem_utils.jl

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,13 @@ function maybe_build_initialization_problem(
881881
sys, t, u0map, pmap; guesses, initialization_eqs,
882882
use_scc, u0_constructor, p_constructor, kwargs...)
883883
if state_values(initializeprob) !== nothing
884-
initializeprob = remake(initializeprob; u0 = floatT.(state_values(initializeprob)))
884+
_u0 = state_values(initializeprob)
885+
if ArrayInterface.ismutable(_u0)
886+
_u0 = floatT.(_u0)
887+
else
888+
_u0 = similar_type(_u0, floatT)(_u0)
889+
end
890+
initializeprob = remake(initializeprob; u0 = _u0)
885891
end
886892
initp = parameter_values(initializeprob)
887893
if is_split(sys)
@@ -890,9 +896,13 @@ function maybe_build_initialization_problem(
890896
buffer, repack, _ = SciMLStructures.canonicalize(SciMLStructures.Initials(), initp)
891897
initp = repack(floatT.(buffer))
892898
elseif initp isa AbstractArray
893-
initp′ = similar(initp, floatT)
894-
copyto!(initp′, initp)
895-
initp = initp′
899+
if ArrayInterface.ismutable(initp)
900+
initp′ = similar(initp, floatT)
901+
copyto!(initp′, initp)
902+
initp = initp′
903+
else
904+
initp = similar_type(initp, floatT)(initp)
905+
end
896906
end
897907
initializeprob = remake(initializeprob; p = initp)
898908

0 commit comments

Comments
 (0)