Skip to content

Commit 9943532

Browse files
refactor: add better warnings when SCC initialization cannot be used
1 parent 35b407c commit 9943532

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,11 +1342,17 @@ function InitializationProblem{iip, specialize}(sys::AbstractODESystem,
13421342
neqs = length(equations(isys))
13431343
nunknown = length(unknowns(isys))
13441344

1345+
if use_scc
1346+
scc_message = "`SCCNonlinearProblem` can only be used for initialization of fully determined systems and hence will not be used here. "
1347+
else
1348+
scc_message = ""
1349+
end
1350+
13451351
if warn_initialize_determined && neqs > nunknown
1346-
@warn "Initialization system is overdetermined. $neqs equations for $nunknown unknowns. Initialization will default to using least squares. To suppress this warning pass warn_initialize_determined = false. To make this warning into an error, pass fully_determined = true"
1352+
@warn "Initialization system is overdetermined. $neqs equations for $nunknown unknowns. Initialization will default to using least squares. $(scc_message)To suppress this warning pass warn_initialize_determined = false. To make this warning into an error, pass fully_determined = true"
13471353
end
13481354
if warn_initialize_determined && neqs < nunknown
1349-
@warn "Initialization system is underdetermined. $neqs equations for $nunknown unknowns. Initialization will default to using least squares. To suppress this warning pass warn_initialize_determined = false. To make this warning into an error, pass fully_determined = true"
1355+
@warn "Initialization system is underdetermined. $neqs equations for $nunknown unknowns. Initialization will default to using least squares. $(scc_message)To suppress this warning pass warn_initialize_determined = false. To make this warning into an error, pass fully_determined = true"
13501356
end
13511357

13521358
parammap = parammap isa DiffEqBase.NullParameters || isempty(parammap) ?
@@ -1384,7 +1390,16 @@ function InitializationProblem{iip, specialize}(sys::AbstractODESystem,
13841390
end
13851391

13861392
TProb = if neqs == nunknown && isempty(unassigned_vars)
1387-
use_scc && neqs > 0 && is_split(isys) ? SCCNonlinearProblem : NonlinearProblem
1393+
if use_scc && neqs > 0
1394+
if is_split(isys)
1395+
SCCNonlinearProblem
1396+
else
1397+
@warn "`SCCNonlinearProblem` can only be used with `split = true` systems. Simplify your `ODESystem` with `split = true` or pass `use_scc = false` to disable this warning"
1398+
NonlinearProblem
1399+
end
1400+
else
1401+
NonlinearProblem
1402+
end
13881403
else
13891404
NonlinearLeastSquaresProblem
13901405
end

0 commit comments

Comments
 (0)