Recently I’ve updated a very big project to the latest version of MTK. I now get this warning:
┌ Warning: Initialization system is overdetermined. 1 equations for 0 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
└ @ ModelingToolkit C:\Users\datse\.julia\packages\ModelingToolkit\Vsl3C\src\systems\diffeqs\abstractodesystem.jl:1465
Are there tools to find the culprit equation somehow? My model is massive, with 50+ equations split over 5 files. Even though I am looking, it is very hard to find which one is overspecifying the system.
My code runs perfectly fine mind you - just like it used to run before I updated MTK. I am not really sure of the implications of this warning to be honest.
Check the initialization system, equations(prob.f.initializationprob.f.sys) and you’ll see what the extra equation is.
What’s prob supposed to be here? I am making an ODESystem, at which point I get the aforementioned warning, before making any ODEProblem. I can’t apply the code you cite for this system, it doesn’t have the fields.
If I then make prob = ODEProblem(ssys, nothing, (0.0, Inf)), I still can’t apply the code because I get
ODEProblem with uType Vector{Float64} and tType Float64. In-place: true
timespan: (0.0, Inf)
u0: 5-element Vector{Float64}:
290.0
1.0
1200.0
290.0
11.0
julia> equations(prob.f.initializationprob.f.sys)
ERROR: type ODEFunction has no field initializationprob
Stacktrace:
[1] getproperty(x::Function, f::Symbol)
@ Base .\Base.jl:37
[2] top-level scope
@ REPL[15]:1
I’d need an MWE. If you aren’t creating the problem then it shouldn’t be creating the iniitalizaiton system.
Okay, I have found the solution. The answer is to use
equations(prob.f.initializeprob.f.sys)
on the created ODEProblem resulting from the ODESystem. Notice the typo initializeprob versus initializationprob.