Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

StackOverflow when simulating large-scale models #43

Closed
ivborissov opened this issue Dec 1, 2023 · 1 comment
Closed

StackOverflow when simulating large-scale models #43

ivborissov opened this issue Dec 1, 2023 · 1 comment
Assignees
Labels
bug Something isn't working

Comments

@ivborissov
Copy link
Collaborator

StackOverflow warning is printed while running sim on large-scale model, with FBDF() solver (and other sovers except Sundials.CVODE_BDF()). However StackOverflow does't terminate the simulation.
The environment is:

julia> versioninfo()
Julia Version 1.9.2
Commit e4ee485e90 (2023-07-05 09:39 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: 4 × Intel(R) Core(TM) i3-6100U CPU @ 2.30GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-14.0.6 (ORCJIT, skylake)
  Threads: 4 on 4 virtual cores

Stacktrace is :

Internal error: stack overflow in type inference of 

  kwcall(
    NamedTuple{
      (:alg, :reltol, :abstol), 
      Tuple{OrdinaryDiffEq.FBDF{5, 0, true, Nothing, OrdinaryDiffEq.NLNewton{Base.Rational{Int64}, Base.Rational{Int64}, Base.Rational{Int64}, Base.Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Base.Val{:forward}, true, nothing, Nothing, Nothing}, Float64, Float64}
    }, 
    typeof(HetaSimulator.sim), 
    HetaSimulator.Scenario{
      Main.var"#nameless_init_func_#10", 
      SciMLBase.ODEProblem{
        Array{Float64, 1}, Tuple{Float64, Float64}, true, Array{Float64, 1}, 
        SciMLBase.ODEFunction{true, SciMLBase.FullSpecialize, Main.var"#nameless_ode_func_#11", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, 
        Base.Pairs{
          Symbol, 
          SciMLBase.CallbackSet{
            Tuple{}, 
            Tuple{
              SciMLBase.DiscreteCallback{HetaSimulator.var"#92#93", HetaSimulator.SavingEvent{Main.var"#saving_#14"{Array{Union{Nothing, Int64}, 1}}, HetaSimulator.SavedValues{Array{LabelledArrays.LArray{Float64, 1, Array{Float64, 1}, (:v1, :v2)}, 1}, Array{Float64, 1}, Array{Symbol, 1}}, DataStructures.BinaryHeap{Float64, Base.Order.ForwardOrdering}, Array{Float64, 1}}, typeof(HetaSimulator.saving_initialize), typeof(SciMLBase.FINALIZE_DEFAULT)}, 
              SciMLBase.DiscreteCallback{HetaSimulator.var"#37#42"{Array{Float64, 1}}, HetaSimulator.var"#38#43"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#15", Main.var"#nameless_affect_func_#27"}, Tuple{Bool, Bool}, Symbol}, HetaSimulator.var"#init_time_event#39"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#15", Main.var"#nameless_affect_func_#27"}, Array{Float64, 1}}, typeof(SciMLBase.FINALIZE_DEFAULT)}, 
              SciMLBase.DiscreteCallback{HetaSimulator.var"#37#42"{Array{Float64, 1}}, HetaSimulator.var"#38#43"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#18", Main.var"#nameless_affect_func_#30"}, Tuple{Bool, Bool}, Symbol}, HetaSimulator.var"#init_time_event#39"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#18", Main.var"#nameless_affect_func_#30"}, Array{Float64, 1}}, typeof(SciMLBase.FINALIZE_DEFAULT)}, 
              SciMLBase.DiscreteCallback{HetaSimulator.var"#37#42"{Array{Float64, 1}}, HetaSimulator.var"#38#43"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#19", Main.var"#nameless_affect_func_#31"}, Tuple{Bool, Bool}, Symbol}, HetaSimulator.var"#init_time_event#39"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#19", Main.var"#nameless_affect_func_#31"}, Array{Float64, 1}}, typeof(SciMLBase.FINALIZE_DEFAULT)}, 
              SciMLBase.DiscreteCallback{HetaSimulator.var"#37#42"{Array{Float64, 1}}, HetaSimulator.var"#38#43"{HetaSimulator.TimeEvent{Main.var"#nameless_on_tstops_func_#20", Main.var"#nameless_on_affect_func_#32"}, Tuple{Bool, Bool}, Symbol}, HetaSimulator.var"#init_time_event#39"{HetaSimulator.TimeEvent{Main.var"#nameless_on_tstops_func_#20", Main.var"#nameless_on_affect_func_#32"}, Array{Float64, 1}}, typeof(SciMLBase.FINALIZE_DEFAULT)}, 
              SciMLBase.DiscreteCallback{HetaSimulator.var"#37#42"{Array{Float64, 1}}, HetaSimulator.var"#38#43"{HetaSimulator.TimeEvent{Main.var"#nameless_off_tstops_func_#21", Main.var"#nameless_off_affect_func_#33"}, Tuple{Bool, Bool}, Symbol}, HetaSimulator.var"#init_time_event#39"{HetaSimulator.TimeEvent{Main.var"#nameless_off_tstops_func_#21", Main.var"#nameless_off_affect_func_#33"}, Array{Float64, 1}}, typeof(SciMLBase.FINALIZE_DEFAULT)}, 
              SciMLBase.DiscreteCallback{Main.var"#nameless_condition_func_#26", HetaSimulator.var"#48#49"{Tuple{Bool, Bool}, Symbol}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(SciMLBase.FINALIZE_DEFAULT)}
            }
          },
          Tuple{Symbol}, 
          NamedTuple{
            (:callback,), 
            Tuple{
              SciMLBase.CallbackSet{Tuple{}, Tuple{
                SciMLBase.DiscreteCallback{HetaSimulator.var"#92#93", HetaSimulator.SavingEvent{Main.var"#saving_#14"{Array{Union{Nothing, Int64}, 1}}, HetaSimulator.SavedValues{Array{LabelledArrays.LArray{Float64, 1, Array{Float64, 1}, (:v1, :v2)}, 1}, Array{Float64, 1}, Array{Symbol, 1}}, DataStructures.BinaryHeap{Float64, Base.Order.ForwardOrdering}, Array{Float64, 1}}, typeof(HetaSimulator.saving_initialize), typeof(SciMLBase.FINALIZE_DEFAULT)}, 
                SciMLBase.DiscreteCallback{HetaSimulator.var"#37#42"{Array{Float64, 1}}, HetaSimulator.var"#38#43"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#15", Main.var"#nameless_affect_func_#27"}, Tuple{Bool, Bool}, Symbol}, HetaSimulator.var"#init_time_event#39"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#15", Main.var"#nameless_affect_func_#27"}, Array{Float64, 1}}, typeof(SciMLBase.FINALIZE_DEFAULT)}, 
                SciMLBase.DiscreteCallback{HetaSimulator.var"#37#42"{Array{Float64, 1}}, HetaSimulator.var"#38#43"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#18", Main.var"#nameless_affect_func_#30"}, Tuple{Bool, Bool}, Symbol}, HetaSimulator.var"#init_time_event#39"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#18", Main.var"#nameless_affect_func_#30"}, Array{Float64, 1}}, typeof(SciMLBase.FINALIZE_DEFAULT)}, 
                SciMLBase.DiscreteCallback{HetaSimulator.var"#37#42"{Array{Float64, 1}}, HetaSimulator.var"#38#43"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#19", Main.var"#nameless_affect_func_#31"}, Tuple{Bool, Bool}, Symbol}, HetaSimulator.var"#init_time_event#39"{HetaSimulator.TimeEvent{Main.var"#nameless_tstops_func_#19", Main.var"#nameless_affect_func_#31"}, Array{Float64, 1}}, typeof(SciMLBase.FINALIZE_DEFAULT)}, 
                SciMLBase.DiscreteCallback{HetaSimulator.var"#37#42"{Array{Float64, 1}}, HetaSimulator.var"#38#43"{HetaSimulator.TimeEvent{Main.var"#nameless_on_tstops_func_#20", Main.var"#nameless_on_affect_func_#32"}, Tuple{Bool, Bool}, Symbol}, HetaSimulator.var"#init_time_event#39"{HetaSimulator.TimeEvent{Main.var"#nameless_on_tstops_func_#20", Main.var"#nameless_on_affect_func_#32"}, Array{Float64, 1}}, typeof(SciMLBase.FINALIZE_DEFAULT)}, 
                SciMLBase.DiscreteCallback{HetaSimulator.var"#37#42"{Array{Float64, 1}}, HetaSimulator.var"#38#43"{HetaSimulator.TimeEvent{Main.var"#nameless_off_tstops_func_#21", Main.var"#nameless_off_affect_func_#33"}, Tuple{Bool, Bool}, Symbol}, HetaSimulator.var"#init_time_event#39"{HetaSimulator.TimeEvent{Main.var"#nameless_off_tstops_func_#21", Main.var"#nameless_off_affect_func_#33"}, Array{Float64, 1}}, typeof(SciMLBase.FINALIZE_DEFAULT)}, 
                SciMLBase.DiscreteCallback{Main.var"#nameless_condition_func_#26", HetaSimulator.var"#48#49"{Tuple{Bool, Bool}, Symbol}, typeof(SciMLBase.INITIALIZE_DEFAULT), typeof(SciMLBase.FINALIZE_DEFAULT)}}
              }
            }
          }
        }, 
        SciMLBase.StandardODEProblem
      }, 
      Array{HetaSimulator.AbstractMeasurementPoint, 1}
    }
  ).

This might be caused by recursion over very long tuples or argument lists.

@ivborissov ivborissov added the bug Something isn't working label Dec 1, 2023
@ivborissov ivborissov self-assigned this Dec 1, 2023
@ivborissov
Copy link
Collaborator Author

Solved in heta-compiler 0.8.1 by optimizing saving_func 4be9639

This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant