@@ -321,15 +321,31 @@ struct ReconstructInitializeprob
321
321
end
322
322
323
323
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 = [])
326
325
getter = getu (srcsys, map (x -> get (remap, x, x), syms))
327
- setter = setsym_oop (dstsys, syms)
326
+ setter = setp_oop (dstsys, syms)
328
327
return ReconstructInitializeprob (getter, setter)
329
328
end
330
329
331
330
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
333
349
end
334
350
335
351
struct InitializationSystemMetadata
0 commit comments