Skip to content

Commit 80d1fa0

Browse files
fix: fix ReconstructInitializeprob overriding guesses
1 parent e1e53f5 commit 80d1fa0

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

src/systems/nonlinear/initializesystem.jl

+20-4
Original file line numberDiff line numberDiff line change
@@ -321,15 +321,31 @@ struct ReconstructInitializeprob
321321
end
322322

323323
function ReconstructInitializeprob(srcsys::AbstractSystem, dstsys::AbstractSystem; remap = Dict())
324-
syms = [unknowns(dstsys);
325-
reduce(vcat, reorder_parameters(dstsys, parameters(dstsys)); init = [])]
324+
syms = reduce(vcat, reorder_parameters(dstsys, parameters(dstsys)); init = [])
326325
getter = getu(srcsys, map(x -> get(remap, x, x), syms))
327-
setter = setsym_oop(dstsys, syms)
326+
setter = setp_oop(dstsys, syms)
328327
return ReconstructInitializeprob(getter, setter)
329328
end
330329

331330
function (rip::ReconstructInitializeprob)(srcvalp, dstvalp)
332-
rip.setter(dstvalp, rip.getter(srcvalp))
331+
newp = rip.setter(dstvalp, rip.getter(srcvalp))
332+
if state_values(dstvalp) === nothing
333+
return nothing, newp
334+
end
335+
T = eltype(state_values(srcvalp))
336+
if parameter_values(dstvalp) isa MTKParameters
337+
if !isempty(newp.tunable)
338+
T = promote_type(eltype(newp.tunable), T)
339+
end
340+
elseif !isempty(newp)
341+
T = promote_type(eltype(newp), T)
342+
end
343+
if T == eltype(state_values(dstvalp))
344+
u0 = state_values(dstvalp)
345+
else
346+
u0 = T.(state_values(dstvalp))
347+
end
348+
return u0, newp
333349
end
334350

335351
struct InitializationSystemMetadata

0 commit comments

Comments
 (0)