diff --git a/Project.toml b/Project.toml index d26ffac8ee..ee2ac2a56c 100644 --- a/Project.toml +++ b/Project.toml @@ -149,7 +149,7 @@ RecursiveArrayTools = "3.26" Reexport = "0.2, 1" RuntimeGeneratedFunctions = "0.5.9" SCCNonlinearSolve = "1.0.0" -SciMLBase = "2.100.0" +SciMLBase = "2.104.0" SciMLPublic = "1.0.0" SciMLStructures = "1.7" Serialization = "1" diff --git a/src/systems/solver_nlprob.jl b/src/systems/solver_nlprob.jl index 006241bf44..463f25e5e6 100644 --- a/src/systems/solver_nlprob.jl +++ b/src/systems/solver_nlprob.jl @@ -18,7 +18,7 @@ function generate_ODENLStepData(sys::System, u0, p, mm = calculate_massmatrix(sy set_gamma_c = setsym(nlsys, (ODE_GAMMA..., ODE_C)) set_outer_tmp = setsym(nlsys, outer_tmp) set_inner_tmp = setsym(nlsys, inner_tmp) - nlprobmap = getsym(nlsys, unknowns(sys)) + nlprobmap = generate_nlprobmap(sys, nlsys) return SciMLBase.ODENLStepData(nlprob, subsetidxs, set_gamma_c, set_outer_tmp, set_inner_tmp, nlprobmap) end @@ -58,3 +58,19 @@ function inner_nlsystem(sys::System, mm) nlsys = mtkcompile(System(new_eqs, new_dvs, new_ps; name = :nlsys); split = is_split(sys)) return nlsys, outer_tmp, inner_tmp end + +struct NLStep_probmap{F} + f::F +end + +function (nlp::NLStep_probmap)(buffer, nlsol) + nlp.f(buffer, state_values(nlsol), parameter_values(nlsol)) +end + +function (nlp::NLStep_probmap)(nlsol) + nlp.f(state_values(nlsol), parameter_values(nlsol)) +end + +function generate_nlprobmap(sys::System, nlsys::System) + return NLStep_probmap(build_explicit_observed_function(nlsys, unknowns(sys))) +end