Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/initialization.jl
Original file line number Diff line number Diff line change
Expand Up @@ -301,11 +301,11 @@ end
function initialization_status(prob::AbstractSciMLProblem)
has_initialization_data(prob.f) || return nothing

sys = prob.f.initialization_data.initializeprob.f.sys
isnothing(sys) && return nothing
iprob = prob.f.initialization_data.initializeprob
isnothing(prob) && return nothing

neqs = length(equations(sys))
nunknowns = length(unknowns(sys))
neqs = length(iprob.f(iprob.u0, iprob.p))
nunknowns = length(iprob.u0)

if neqs > nunknowns
return OVERDETERMINED
Expand Down
12 changes: 9 additions & 3 deletions src/problems/problem_utils.jl
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,15 @@ function Base.summary(io::IO, prob::AbstractDEProblem)
no_color,
". In-place: ", type_color, isinplace(prob), no_color)
init = initialization_status(prob)
!isnothing(init) && print(io, "Initialization status: ", type_color, initialization_status(prob), no_color)
println(io)
print(io, "Non-trivial mass matrix: ", type_color, !(prob.f.mass_matrix isa LinearAlgebra.UniformScaling{Bool}), no_color)
!isnothing(init) && begin
println(io)
print(io, "Initialization status: ", type_color, initialization_status(prob), no_color)
end

hasproperty(prob.f, :mass_matrix) && begin
println(io)
print(io, "Non-trivial mass matrix: ", type_color, !(prob.f.mass_matrix isa LinearAlgebra.UniformScaling{Bool}), no_color)
end
end

function Base.summary(io::IO, prob::AbstractLinearProblem)
Expand Down
18 changes: 18 additions & 0 deletions test/downstream/initialization.jl
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,21 @@ end
@test getp(sys, p)(pobj) ≈ 1.0
@test getp(sys, q)(pobj) ≈ sqrt(2)
end

@testset "Initialization info printed" begin
@parameters g
@variables x(t) y(t) [state_priority = 10] λ(t)
eqs = [D(D(x)) ~ λ * x
D(D(y)) ~ λ * y - g
x^2 + y^2 ~ 1]
@mtkbuild pend = ODESystem(eqs, t)

prob = ODEProblem(pend, [x => 1, y => 0], (0.0, 1.5), [g => 1], guesses = [λ => 1])
@test occursin("Initialization status: FULLY_DETERMINED", sprint(summary, prob))

prob = ODEProblem(pend, [], (0.0, 1.5), [g => 1], guesses = [λ => 1, x => 1, y => 0])
@test occursin("Initialization status: UNDERDETERMINED", sprint(summary, prob))

prob = ODEProblem(pend, [x => 1, y => 0, λ => 2], (0.0, 1.5), [g => 1])
@test occursin("Initialization status: OVERDETERMINED", sprint(summary, prob))
end
Loading