Skip to content

Commit ad0347b

Browse files
fix: handle u0_constructor, p_constructor in remake_initialization_data
1 parent aff87fa commit ad0347b

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/systems/nonlinear/initializesystem.jl

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -581,11 +581,21 @@ function SciMLBase.remake_initialization_data(
581581
op, missing_unknowns, missing_pars = build_operating_point!(sys,
582582
u0map, pmap, defs, cmap, dvs, ps)
583583
floatT = float_type_from_varmap(op)
584+
u0_constructor = p_constructor = identity
585+
if newu0 isa StaticArray
586+
u0_constructor = vals -> SymbolicUtils.Code.create_array(
587+
typeof(newu0), floatT, Val(1), Val(length(vals)), vals...)
588+
end
589+
if newp isa StaticArray || newp isa MTKParameters && newp.initials isa StaticArray
590+
p_constructor = vals -> SymbolicUtils.Code.create_array(
591+
typeof(newp.initials), floatT, Val(1), Val(length(vals)), vals...)
592+
end
584593
kws = maybe_build_initialization_problem(
585-
sys, op, u0map, pmap, t0, defs, guesses, missing_unknowns;
586-
use_scc, initialization_eqs, floatT, allow_incomplete = true)
594+
sys, SciMLBase.isinplace(odefn), op, u0map, pmap, t0, defs, guesses, missing_unknowns;
595+
use_scc, initialization_eqs, floatT, u0_constructor, p_constructor, allow_incomplete = true)
587596

588-
return SciMLBase.remake_initialization_data(sys, kws, newu0, t0, newp, newu0, newp)
597+
odefn = remake(odefn; kws...)
598+
return SciMLBase.remake_initialization_data(sys, odefn, newu0, t0, newp, newu0, newp)
589599
end
590600

591601
function promote_u0_p(u0, p::MTKParameters, t0)

0 commit comments

Comments
 (0)