Skip to content

Commit 9a3cd2e

Browse files
fix: copy MTKParameters over setp_oop for initializeprobpmap
1 parent 129f9df commit 9a3cd2e

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)
@@ -839,16 +841,13 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
839841
end
840842
end
841843
defs = defaults(sys)
842-
missingpars = [p
844+
guesses = merge(ModelingToolkit.guesses(sys), isempty(guesses) ? Dict() : todict(guesses))
845+
solvablepars = [p
843846
for p in parameters(sys)
844-
if (parammap !== SciMLBase.NullParameters() &&
845-
get(parammap, p, nothing) === missing) ||
846-
((parammap isa SciMLBase.NullParameters ||
847-
get(parammap, p, nothing) !== missing) &&
848-
get(defs, p, nothing) === missing)]
847+
if is_parameter_solvable(p, parammap, defs, guesses)]
849848
# ModelingToolkit.get_tearing_state(sys) !== nothing => Requires structural_simplify first
850849
if sys isa ODESystem && build_initializeprob &&
851-
(((implicit_dae || !isempty(missingvars) || !isempty(missingpars) || !isempty(setobserved)) &&
850+
(((implicit_dae || !isempty(missingvars) || !isempty(solvablepars) || !isempty(setobserved)) &&
852851
ModelingToolkit.get_tearing_state(sys) !== nothing) ||
853852
!isempty(initialization_equations(sys))) && t !== nothing
854853
if eltype(u0map) <: Number
@@ -864,9 +863,8 @@ function process_DEProblem(constructor, sys::AbstractODESystem, u0map, parammap;
864863
punknowns = [p
865864
for p in all_variable_symbols(initializeprob) if is_parameter(sys, p)]
866865
getpunknowns = getu(initializeprob, punknowns)
867-
setpunknowns = setp_oop(sys, punknowns)
866+
setpunknowns = setp(sys, punknowns)
868867
initializeprobpmap = GetUpdatedMTKParameters(getpunknowns, setpunknowns)
869-
# TODO: Initializeprobpmap when setp_oop is a thing
870868

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

0 commit comments

Comments
 (0)