@@ -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