You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Suppose I solve an ODE with a parameter p that I set to NaN, but where p does not "destroy" any unknowns in the system:
using ModelingToolkit
using ModelingToolkit: t_nounits as t, D_nounits as D
using DifferentialEquations
@parameters p
@variablesx(t) y(t)
@named sys =ODESystem([
D(x) ~0.0
y ~ x * p
], t)
sys =structural_simplify(sys)
prob =ODEProblem(sys, [sys.x =>0.0], (0.0, 1.0), [sys.p =>NaN])
sol =solve(prob, Tsit5())
I know this probably looks stupid from this artificial example. But I would still argue that the ODE should solve successfully, and that sol[x] is "good output", while sol[y] is "bad output" full of NaNs. Instead, promote_u0() gets stuck in an infinite loop:
ERROR: LoadError: StackOverflowError:
Stacktrace:
[1] poptask(W::Base.IntrusiveLinkedListSynchronized{Task})
@ Base ./task.jl:999
[2] wait()
@ Base ./task.jl:1008
[3] uv_write(s::Base.TTY, p::Ptr{UInt8}, n::UInt64)
@ Base ./stream.jl:1048
[4] unsafe_write(s::Base.TTY, p::Ptr{UInt8}, n::UInt64)
@ Base ./stream.jl:1120
[5] write
@ ./strings/io.jl:248 [inlined]
[6] print
@ ./strings/io.jl:250 [inlined]
[7] print(::Base.TTY, ::String, ::String, ::Vararg{String})
@ Base ./strings/io.jl:46
[8] println(::Base.TTY, ::String, ::Vararg{String})
@ Base ./strings/io.jl:75
[9] println(xs::String)
@ Base ./coreio.jl:4
[10] promote_u0(u0::Vector{Float64}, p::Vector{Float64}, t0::Float64)
@ DiffEqBase ~/.julia/dev/DiffEqBase/src/forwarddiff.jl:355
[11] promote_u0(u0::Vector{Float64}, p::Vector{Float64}, t0::Float64) (repeats 36884 times)
@ DiffEqBase ~/.julia/dev/DiffEqBase/src/forwarddiff.jl:361
[12] promote_u0 (repeats 2 times)
@ ~/.julia/dev/DiffEqBase/src/forwarddiff.jl:361 [inlined]
[13] get_concrete_problem(prob::ODEProblem{…}, isadapt::Bool; kwargs::@Kwargs{…})
@ DiffEqBase ~/.julia/dev/DiffEqBase/src/solve.jl:1171
[14] get_concrete_problem
@ ~/.julia/dev/DiffEqBase/src/solve.jl:1167 [inlined]
[15] #solve_up#53
@ ~/.julia/dev/DiffEqBase/src/solve.jl:1074 [inlined]
[16] solve_up
@ ~/.julia/dev/DiffEqBase/src/solve.jl:1066 [inlined]
[17] #solve#51
@ ~/.julia/dev/DiffEqBase/src/solve.jl:1003 [inlined]
[18] solve(prob::ODEProblem{…}, args::Tsit5{…})
@ DiffEqBase ~/.julia/dev/DiffEqBase/src/solve.jl:993
[19] top-level scope
@ ~/.julia/dev/SymBoltz/bug.jl:30
in expression starting at /home/hermasl/.julia/dev/SymBoltz/bug.jl:30
Some type information was truncated. Use `show(err)` to see complete types.
I am quite sure this worked before, but broke with a recent release.
The text was updated successfully, but these errors were encountered:
Suppose I solve an ODE with a parameter
p
that I set toNaN
, but wherep
does not "destroy" any unknowns in the system:I know this probably looks stupid from this artificial example. But I would still argue that the ODE should solve successfully, and that
sol[x]
is "good output", whilesol[y]
is "bad output" full ofNaN
s. Instead,promote_u0()
gets stuck in an infinite loop:I am quite sure this worked before, but broke with a recent release.
The text was updated successfully, but these errors were encountered: