diff --git a/src/initialization.jl b/src/initialization.jl index 23551e0885..53fcd63f04 100644 --- a/src/initialization.jl +++ b/src/initialization.jl @@ -295,3 +295,23 @@ end function is_trivial_initialization(prob::AbstractSciMLProblem) is_trivial_initialization(prob.f) end + +@enum DETERMINED_STATUS OVERDETERMINED FULLY_DETERMINED UNDERDETERMINED + +function initialization_status(prob::AbstractSciMLProblem) + has_initialization_data(prob.f) || return nothing + + sys = prob.f.initialization_data.initializeprob.f.sys + isnothing(sys) && return nothing + + neqs = length(equations(sys)) + nunknowns = length(unknowns(sys)) + + if neqs > nunknowns + return OVERDETERMINED + elseif neqs < nunknowns + return UNDERDETERMINED + else + return FULLY_DETERMINED + end +end diff --git a/src/problems/problem_utils.jl b/src/problems/problem_utils.jl index f2faaf20b6..ad23cea6a6 100644 --- a/src/problems/problem_utils.jl +++ b/src/problems/problem_utils.jl @@ -26,9 +26,12 @@ function Base.summary(io::IO, prob::AbstractDEProblem) prob.tspan isa Function ? "Unknown" : (prob.tspan === nothing ? "Nothing" : typeof(prob.tspan[1])), - no_color, ". In-place: ", - type_color, isinplace(prob), - no_color) + 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) end function Base.summary(io::IO, prob::AbstractLinearProblem) @@ -111,6 +114,7 @@ function Base.show(io::IO, mime::MIME"text/plain", A::AbstractDEProblem) println(io) print(io, "u0: ") show(io, mime, A.u0) + end function Base.show(io::IO, mime::MIME"text/plain", A::AbstractNoiseProblem) summary(io, A)