@@ -641,6 +641,22 @@ function maybe_build_initialization_problem(
641
641
642
642
initializeprob = ModelingToolkit. InitializationProblem {true, SciMLBase.FullSpecialize} (
643
643
sys, t, u0map, pmap; guesses, kwargs... )
644
+ if state_values (initializeprob) != = nothing
645
+ initializeprob = remake (initializeprob; u0 = floatT .(state_values (initializeprob)))
646
+ end
647
+ initp = parameter_values (initializeprob)
648
+ if is_split (sys)
649
+ buffer, repack, _ = SciMLStructures. canonicalize (SciMLStructures. Tunable (), initp)
650
+ initp = repack (floatT .(buffer))
651
+ buffer, repack, _ = SciMLStructures. canonicalize (SciMLStructures. Initials (), initp)
652
+ initp = repack (floatT .(buffer))
653
+ elseif initp isa AbstractArray
654
+ initp′ = similar (initp, floatT)
655
+ copyto! (initp′, initp)
656
+ initp = initp′
657
+ end
658
+ initializeprob = remake (initializeprob; p = initp)
659
+
644
660
meta = get_metadata (initializeprob. f. sys)
645
661
646
662
if is_time_dependent (sys)
@@ -800,15 +816,19 @@ function process_SciMLProblem(
800
816
u0map, pmap, defs, cmap, dvs, ps)
801
817
802
818
floatT = Bool
803
- for (k, v) in op
804
- symbolic_type (v) == NotSymbolic () || continue
805
- is_array_of_symbolics (v) && continue
806
-
807
- if v isa AbstractArray
808
- isconcretetype (eltype (v)) || continue
809
- floatT = promote_type (floatT, eltype (v))
810
- elseif v isa Real && isconcretetype (v)
811
- floatT = promote_type (floatT, typeof (v))
819
+ if u0Type <: AbstractArray && isconcretetype (eltype (u0Type)) && eltype (u0Type) <: Real
820
+ floatT = eltype (u0Type)
821
+ else
822
+ for (k, v) in op
823
+ symbolic_type (v) == NotSymbolic () || continue
824
+ is_array_of_symbolics (v) && continue
825
+
826
+ if v isa AbstractArray
827
+ isconcretetype (eltype (v)) || continue
828
+ floatT = promote_type (floatT, eltype (v))
829
+ elseif v isa Real && isconcretetype (v)
830
+ floatT = promote_type (floatT, typeof (v))
831
+ end
812
832
end
813
833
end
814
834
floatT = float (floatT)
0 commit comments