Skip to content

Commit 7f8c129

Browse files
refactor: change SCCNonlinearProblem fields
1 parent 7d4a687 commit 7f8c129

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

src/problems/nonlinear_problems.jl

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -462,28 +462,30 @@ Note that this example aliases the parameters together for a memory-reduced repr
462462
* `probs`: the collection of problems to solve
463463
* `explictfuns!`: the explicit functions for mutating the parameter set
464464
"""
465-
mutable struct SCCNonlinearProblem{uType, iip, P, E, I, Par} <:
465+
mutable struct SCCNonlinearProblem{uType, iip, P, E, F <: NonlinearFunction{iip}, Par} <:
466466
AbstractNonlinearProblem{uType, iip}
467467
probs::P
468468
explicitfuns!::E
469-
full_index_provider::I
470-
parameter_object::Par
469+
# NonlinearFunction with `f = Returns(nothing)`
470+
f::F
471+
p::Par
471472
parameters_alias::Bool
472473

473-
function SCCNonlinearProblem{P, E, I, Par}(
474-
probs::P, funs::E, indp::I, pobj::Par, alias::Bool) where {P, E, I, Par}
474+
function SCCNonlinearProblem{P, E, F, Par}(probs::P, funs::E, f::F, pobj::Par,
475+
alias::Bool) where {P, E, F <: NonlinearFunction, Par}
475476
u0 = mapreduce(
476477
state_values, vcat, probs; init = similar(state_values(first(probs)), 0))
477478
uType = typeof(u0)
478-
new{uType, false, P, E, I, Par}(probs, funs, indp, pobj, alias)
479+
new{uType, false, P, E, F, Par}(probs, funs, f, pobj, alias)
479480
end
480481
end
481482

482-
function SCCNonlinearProblem(probs, explicitfuns!, full_index_provider = nothing,
483-
parameter_object = nothing, parameters_alias = false)
483+
function SCCNonlinearProblem(probs, explicitfuns!, parameter_object = nothing,
484+
parameters_alias = false; kwargs...)
485+
f = NonlinearFunction{false}(Returns(nothing); kwargs...)
484486
return SCCNonlinearProblem{typeof(probs), typeof(explicitfuns!),
485-
typeof(full_index_provider), typeof(parameter_object)}(
486-
probs, explicitfuns!, full_index_provider, parameter_object, parameters_alias)
487+
typeof(f), typeof(parameter_object)}(
488+
probs, explicitfuns!, f, parameter_object, parameters_alias)
487489
end
488490

489491
function Base.getproperty(prob::SCCNonlinearProblem, name::Symbol)
@@ -496,10 +498,10 @@ function Base.getproperty(prob::SCCNonlinearProblem, name::Symbol)
496498
end
497499

498500
function SymbolicIndexingInterface.symbolic_container(prob::SCCNonlinearProblem)
499-
prob.full_index_provider
501+
prob.f
500502
end
501503
function SymbolicIndexingInterface.parameter_values(prob::SCCNonlinearProblem)
502-
prob.parameter_object
504+
prob.p
503505
end
504506
function SymbolicIndexingInterface.state_values(prob::SCCNonlinearProblem)
505507
mapreduce(
@@ -517,7 +519,7 @@ end
517519

518520
function SymbolicIndexingInterface.set_parameter!(prob::SCCNonlinearProblem, val, idx)
519521
if prob.parameter_object !== nothing
520-
set_parameter!(prob.parameter_object, val, idx)
522+
set_parameter!(prob.p, val, idx)
521523
prob.parameters_alias && return
522524
end
523525
for scc in prob.probs

test/downstream/problem_interface.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ prob = SteadyStateProblem(osys, u0, ps)
367367
prob = NonlinearProblem(model, [])
368368
sccprob = SciMLBase.SCCNonlinearProblem([prob1, prob2, prob3],
369369
SciMLBase.Void{Any}.([explicitfun1, explicitfun2, explicitfun3]),
370-
model, copy(cache))
370+
copy(cache); sys = model)
371371

372372
for sym in [u, u..., u[2] + u[3], p * u[1] + u[2]]
373373
@test prob[sym] sccprob[sym]

0 commit comments

Comments
 (0)