Skip to content

Commit a427126

Browse files
fix: copy MTKParameters over setp_oop for initializeprobpmap
1 parent 083240d commit a427126

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -768,12 +768,14 @@ end
768768
struct GetUpdatedMTKParameters{G, S}
769769
# `getu` functor which gets parameters that are unknowns during initialization
770770
getpunknowns::G
771-
# `setu_oop` functor which returns a modified MTKParameters using those parameters
771+
# `setu` functor which returns a modified MTKParameters using those parameters
772772
setpunknowns::S
773773
end
774774

775775
function (f::GetUpdatedMTKParameters)(prob, initializesol)
776-
f.setpunknowns(prob, f.getpunknowns(initializesol))
776+
mtkp = copy(parameter_values(prob))
777+
f.setpunknowns(mtkp, f.getpunknowns(initializesol))
778+
mtkp
777779
end
778780

779781
function get_temporary_value(p)
@@ -836,16 +838,13 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
836838
end
837839
end
838840
defs = defaults(sys)
839-
missingpars = [p
841+
guesses = merge(ModelingToolkit.guesses(sys), isempty(guesses) ? Dict() : todict(guesses))
842+
solvablepars = [p
840843
for p in parameters(sys)
841-
if (parammap !== SciMLBase.NullParameters() &&
842-
get(parammap, p, nothing) === missing) ||
843-
((parammap isa SciMLBase.NullParameters ||
844-
get(parammap, p, nothing) !== missing) &&
845-
get(defs, p, nothing) === missing)]
844+
if is_parameter_solvable(p, parammap, defs, guesses)]
846845
# ModelingToolkit.get_tearing_state(sys) !== nothing => Requires structural_simplify first
847846
if sys isa ODESystem && build_initializeprob &&
848-
(((implicit_dae || !isempty(missingvars) || !isempty(missingpars)) &&
847+
(((implicit_dae || !isempty(missingvars) || !isempty(solvablepars)) &&
849848
ModelingToolkit.get_tearing_state(sys) !== nothing) ||
850849
!isempty(initialization_equations(sys))) && t !== nothing
851850
if eltype(u0map) <: Number
@@ -861,9 +860,8 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
861860
punknowns = [p
862861
for p in all_variable_symbols(initializeprob) if is_parameter(sys, p)]
863862
getpunknowns = getu(initializeprob, punknowns)
864-
setpunknowns = setp_oop(sys, punknowns)
863+
setpunknowns = setp(sys, punknowns)
865864
initializeprobpmap = GetUpdatedMTKParameters(getpunknowns, setpunknowns)
866-
# TODO: Initializeprobpmap when setp_oop is a thing
867865

868866
zerovars = Dict(setdiff(unknowns(sys), keys(defaults(sys))) .=> 0.0)
869867
if parammap isa SciMLBase.NullParameters

0 commit comments

Comments
 (0)