SciML / OrdinaryDiffEq.jl

High performance ordinary differential equation (ODE) and differential-algebraic equation (DAE) solvers, including neural ordinary differential equations (neural ODEs) and scientific machine learning (SciML)
https://diffeq.sciml.ai/latest/
Other
533 stars 201 forks source link

ImplicitEuler and ImplicitMidpoint try to convert LinearAlgebra.LU to LinearAlgebra.QR #1764

Closed TheZombie1999 closed 1 year ago

TheZombie1999 commented 1 year ago

Hi, i am running Julia 1.8.0 with the OrdinaryDiffEq.jl package.

I utilized the ImplicitEuler and implicitMidpoint solver.

Both give me the same error.

The problem is that the update_W! method in derivative_utils.jl tries to set a property of the NLNewtonConstantCache.

To do this it tries to convert the LinearAlgebra.Lu struct into LinearAlgebra.QR struct.

Which doesn't work because no such function exists.

From my limited understanding of both factorizations this conversion doesn't really make any sense and isn't possible.

This means that the update_W! method gets the wrong input somehow.

One idea that i had, was that the lu_instance method of the ArrayInterfaceCUDA returns a QR struct and not an LU struct, which seems strange .... but i am not sure whether that's the problem.

I have included the error log below maybe some one can make sense of the error:

ImplicitMidpoint{0, true, Nothing, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}
ERROR: LoadError: MethodError: no method matching LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}(::LinearAlgebra.LU{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}})
Closest candidates are:
  LinearAlgebra.QR{T, S, C}(::Any, ::Any) where {T, S<:AbstractMatrix{T}, C<:AbstractVector{T}} at ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/qr.jl:41
Stacktrace:
  [1] convert(#unused#::Type{LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}}, f::LinearAlgebra.LU{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}})
    @ LinearAlgebra ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/factorization.jl:56
  [2] setproperty!(x::OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}, f::Symbol, v::LinearAlgebra.LU{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}})
    @ Base ./Base.jl:39
  [3] update_W!(nlsolver::OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}, integrator::OrdinaryDiffEq.ODEIntegrator{ImplicitMidpoint{12, true, LinearSolve.LUFactorization{LinearAlgebra.RowMaximum}, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Nothing, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}, Float32, Float32, Float32, Float32, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, SciMLBase.ODESolution{Float32, 3, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Nothing, Nothing, Vector{Float32}, Vector{Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, SciMLBase.ODEProblem{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ImplicitMidpoint{12, true, LinearSolve.LUFactorization{LinearAlgebra.RowMaximum}, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, OrdinaryDiffEq.InterpolationData{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Vector{Float32}, Vector{Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}}, DiffEqBase.DEStats}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}, OrdinaryDiffEq.DEOptions{Float32, Float32, Float32, Float32, OrdinaryDiffEq.PIController{Int64}, typeof(DiffEqBase.ODE_DEFAULT_NORM), typeof(LinearAlgebra.opnorm), Nothing, SciMLBase.CallbackSet{Tuple{}, Tuple{}}, typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, Nothing, Nothing, Int64, Tuple{}, StepRangeLen{Float32, Float64, Float64, Int64}, Tuple{}}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Float32, Nothing, OrdinaryDiffEq.DefaultInit}, cache::OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}, dtgamma::Float32, repeat_step::Bool, newJW::Nothing)
    @ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/nidTv/src/derivative_utils.jl:815
  [4] update_W!
    @ ~/.julia/packages/OrdinaryDiffEq/nidTv/src/derivative_utils.jl:805 [inlined]
  [5] nlsolve!(nlsolver::OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}, integrator::OrdinaryDiffEq.ODEIntegrator{ImplicitMidpoint{12, true, LinearSolve.LUFactorization{LinearAlgebra.RowMaximum}, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Nothing, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}, Float32, Float32, Float32, Float32, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, SciMLBase.ODESolution{Float32, 3, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Nothing, Nothing, Vector{Float32}, Vector{Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, SciMLBase.ODEProblem{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ImplicitMidpoint{12, true, LinearSolve.LUFactorization{LinearAlgebra.RowMaximum}, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, OrdinaryDiffEq.InterpolationData{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Vector{Float32}, Vector{Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}}, DiffEqBase.DEStats}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}, OrdinaryDiffEq.DEOptions{Float32, Float32, Float32, Float32, OrdinaryDiffEq.PIController{Int64}, typeof(DiffEqBase.ODE_DEFAULT_NORM), typeof(LinearAlgebra.opnorm), Nothing, SciMLBase.CallbackSet{Tuple{}, Tuple{}}, typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, Nothing, Nothing, Int64, Tuple{}, StepRangeLen{Float32, Float64, Float64, Int64}, Tuple{}}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Float32, Nothing, OrdinaryDiffEq.DefaultInit}, cache::OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}, repeat_step::Bool)
    @ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/nidTv/src/nlsolve/nlsolve.jl:25
  [6] perform_step!(integrator::OrdinaryDiffEq.ODEIntegrator{ImplicitMidpoint{12, true, LinearSolve.LUFactorization{LinearAlgebra.RowMaximum}, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Nothing, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}, Float32, Float32, Float32, Float32, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, SciMLBase.ODESolution{Float32, 3, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Nothing, Nothing, Vector{Float32}, Vector{Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, SciMLBase.ODEProblem{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ImplicitMidpoint{12, true, LinearSolve.LUFactorization{LinearAlgebra.RowMaximum}, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, OrdinaryDiffEq.InterpolationData{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Vector{Float32}, Vector{Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}}, DiffEqBase.DEStats}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}, OrdinaryDiffEq.DEOptions{Float32, Float32, Float32, Float32, OrdinaryDiffEq.PIController{Int64}, typeof(DiffEqBase.ODE_DEFAULT_NORM), typeof(LinearAlgebra.opnorm), Nothing, SciMLBase.CallbackSet{Tuple{}, Tuple{}}, typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, Nothing, Nothing, Int64, Tuple{}, StepRangeLen{Float32, Float64, Float64, Int64}, Tuple{}}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Float32, Nothing, OrdinaryDiffEq.DefaultInit}, cache::OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}, repeat_step::Bool)
    @ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/nidTv/src/perform_step/sdirk_perform_step.jl:164
  [7] perform_step!
    @ ~/.julia/packages/OrdinaryDiffEq/nidTv/src/perform_step/sdirk_perform_step.jl:150 [inlined]
  [8] solve!(integrator::OrdinaryDiffEq.ODEIntegrator{ImplicitMidpoint{12, true, LinearSolve.LUFactorization{LinearAlgebra.RowMaximum}, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Nothing, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}, Float32, Float32, Float32, Float32, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, SciMLBase.ODESolution{Float32, 3, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Nothing, Nothing, Vector{Float32}, Vector{Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, SciMLBase.ODEProblem{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ImplicitMidpoint{12, true, LinearSolve.LUFactorization{LinearAlgebra.RowMaximum}, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, OrdinaryDiffEq.InterpolationData{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Vector{Float32}, Vector{Vector{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}}, DiffEqBase.DEStats}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, OrdinaryDiffEq.ImplicitMidpointConstantCache{OrdinaryDiffEq.NLSolver{DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Rational{Int64}, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}}}}}, OrdinaryDiffEq.DEOptions{Float32, Float32, Float32, Float32, OrdinaryDiffEq.PIController{Int64}, typeof(DiffEqBase.ODE_DEFAULT_NORM), typeof(LinearAlgebra.opnorm), Nothing, SciMLBase.CallbackSet{Tuple{}, Tuple{}}, typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, Nothing, Nothing, Int64, Tuple{}, StepRangeLen{Float32, Float64, Float64, Int64}, Tuple{}}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Float32, Nothing, OrdinaryDiffEq.DefaultInit})
    @ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/nidTv/src/solve.jl:510
  [9] #__solve#562
    @ ~/.julia/packages/OrdinaryDiffEq/nidTv/src/solve.jl:6 [inlined]
 [10] #solve_call#26
    @ ~/.julia/packages/DiffEqBase/BHoDE/src/solve.jl:470 [inlined]
 [11] solve_up(prob::SciMLBase.ODEProblem{CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}, SciMLBase.ODEFunction{false, SciMLBase.AutoSpecialize, typeof(MeshGraphNets.fast_step), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, sensealg::Nothing, u0::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, p::Tuple{GraphNetCore.GraphNetwork, Dict{String, DenseMatrix}, Vector{Any}, Dict{String, Int32}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, ProgressMeter.ProgressUnknown}, args::ImplicitMidpoint{0, true, Nothing, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; kwargs::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol, Symbol}, NamedTuple{(:adaptive, :dt, :saveat), Tuple{Bool, Float32, StepRangeLen{Float32, Float64, Float64, Int64}}}})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/BHoDE/src/solve.jl:825
 [12] #solve#31
    @ ~/.julia/packages/DiffEqBase/BHoDE/src/solve.jl:795 [inlined]
 [13] rollout(solver::ImplicitMidpoint{0, true, Nothing, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, mgn::GraphNetCore.GraphNetwork, initial_state::Dict{String, DenseMatrix}, fields::Vector{Any}, target_dict::Dict{String, Int32}, node_type::CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, edge_features::CUDA.CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, senders::CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, receivers::CUDA.CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}, mask::CUDA.CuArray{Bool, 2, CUDA.Mem.DeviceBuffer}, start::Float32, stop::Float32, dt::Float32, saves::StepRangeLen{Float32, Float64, Float64, Int64})
    @ MeshGraphNets ~/MeshGraphNets.jl/src/MeshGraphNets.jl:426
 [14] eval_network!(solver::ImplicitMidpoint{0, true, Nothing, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, mgn::GraphNetCore.GraphNetwork, dataset::MeshGraphNets.Dataset, device::Function, out_path::String, start::Float32, stop::Float32, dt::Float32, saves::StepRangeLen{Float32, Float64, Float64, Int64}, mse_steps::Vector{Float32}, args::MeshGraphNets.Args)
    @ MeshGraphNets ~/MeshGraphNets.jl/src/MeshGraphNets.jl:345
 [15] eval_network(ds_path::String, cp_path::String, out_path::String, solver::ImplicitMidpoint{0, true, Nothing, DiffEqBase.NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; start::Float32, stop::Float32, dt::Float32, saves::StepRangeLen{Float32, Float64, Float64, Int64}, mse_steps::Vector{Float32}, kws::Base.Pairs{Symbol, Bool, Tuple{Symbol}, NamedTuple{(:use_cuda,), Tuple{Bool}}})
    @ MeshGraphNets ~/MeshGraphNets.jl/src/MeshGraphNets.jl:278
 [16] top-level scope
    @ ~/MeshGraphNets.jl/example/ExampleEuler.jl:105
 [17] include(fname::String)
    @ Base.MainInclude ./client.jl:476
 [18] top-level scope
    @ REPL[1]:1
 [19] top-level scope
    @ ~/.julia/packages/CUDA/DfvRa/src/initialization.jl:52
in expression starting at /home/schntimo/MeshGraphNets.jl/example/ExampleEuler.jl:103
ChrisRackauckas commented 1 year ago

Can you share an MWE?

TheZombie1999 commented 1 year ago

I am working on one. But it is not so easy.

TheZombie1999 commented 1 year ago

I found a MWE.

using DifferentialEquations
import DifferentialEquations: ImplicitEuler

using CUDA
using ArrayInterfaceCUDA

u0 = CUDA.CuArray([1.f0 1.f0; 1.f0 1.f0; 1.f0 1.f0; 1.f0 1.f0; 1.f0 1.f0; 1.f0 1.f0])

function f(u, p, t)
    return 1.01f0 .* u
end

tspan = (0.f0, 1.f0)
prob = ODEProblem(f, u0, tspan)

sol = solve(prob, ImplicitEuler())

I also included my error output:

ERROR: LoadError: MethodError: no method matching LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}(::LinearAlgebra.LU{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}})
Closest candidates are:
  LinearAlgebra.QR{T, S, C}(::Any, ::Any) where {T, S<:AbstractMatrix{T}, C<:AbstractVector{T}} at ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/qr.jl:41
Stacktrace:
  [1] convert(#unused#::Type{LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}}, f::LinearAlgebra.LU{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}})
    @ LinearAlgebra ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/factorization.jl:56
  [2] setproperty!(x::OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}, f::Symbol, v::LinearAlgebra.LU{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Int32, 1, CUDA.Mem.DeviceBuffer}})
    @ Base ./Base.jl:39
  [3] update_W!(nlsolver::OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}, integrator::OrdinaryDiffEq.ODEIntegrator{ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Nothing, Float32, SciMLBase.NullParameters, Float32, Float32, Float32, Float32, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, ODESolution{Float32, 3, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Nothing, Nothing, Vector{Float32}, Vector{Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, OrdinaryDiffEq.InterpolationData{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Vector{Float32}, Vector{Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}}, DiffEqBase.DEStats}, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}, OrdinaryDiffEq.DEOptions{Float32, Float32, Float32, Float32, PIController{Rational{Int64}}, typeof(DiffEqBase.ODE_DEFAULT_NORM), typeof(LinearAlgebra.opnorm), Nothing, CallbackSet{Tuple{}, Tuple{}}, typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, Nothing, Nothing, Int64, Tuple{}, Tuple{}, Tuple{}}, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Float32, Nothing, OrdinaryDiffEq.DefaultInit}, cache::OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}, dtgamma::Float32, repeat_step::Bool, newJW::Nothing)
    @ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/nidTv/src/derivative_utils.jl:815
  [4] update_W!(nlsolver::OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}, integrator::OrdinaryDiffEq.ODEIntegrator{ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Nothing, Float32, SciMLBase.NullParameters, Float32, Float32, Float32, Float32, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, ODESolution{Float32, 3, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Nothing, Nothing, Vector{Float32}, Vector{Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, OrdinaryDiffEq.InterpolationData{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Vector{Float32}, Vector{Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}}, DiffEqBase.DEStats}, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}, OrdinaryDiffEq.DEOptions{Float32, Float32, Float32, Float32, PIController{Rational{Int64}}, typeof(DiffEqBase.ODE_DEFAULT_NORM), typeof(LinearAlgebra.opnorm), Nothing, CallbackSet{Tuple{}, Tuple{}}, typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, Nothing, Nothing, Int64, Tuple{}, Tuple{}, Tuple{}}, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Float32, Nothing, OrdinaryDiffEq.DefaultInit}, cache::OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}, dtgamma::Float32, repeat_step::Bool)
    @ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/nidTv/src/derivative_utils.jl:805
  [5] nlsolve!(nlsolver::OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}, integrator::OrdinaryDiffEq.ODEIntegrator{ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Nothing, Float32, SciMLBase.NullParameters, Float32, Float32, Float32, Float32, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, ODESolution{Float32, 3, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Nothing, Nothing, Vector{Float32}, Vector{Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, OrdinaryDiffEq.InterpolationData{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Vector{Float32}, Vector{Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}}, DiffEqBase.DEStats}, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}, OrdinaryDiffEq.DEOptions{Float32, Float32, Float32, Float32, PIController{Rational{Int64}}, typeof(DiffEqBase.ODE_DEFAULT_NORM), typeof(LinearAlgebra.opnorm), Nothing, CallbackSet{Tuple{}, Tuple{}}, typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, Nothing, Nothing, Int64, Tuple{}, Tuple{}, Tuple{}}, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Float32, Nothing, OrdinaryDiffEq.DefaultInit}, cache::OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}, repeat_step::Bool)
    @ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/nidTv/src/nlsolve/nlsolve.jl:25
  [6] perform_step!(integrator::OrdinaryDiffEq.ODEIntegrator{ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Nothing, Float32, SciMLBase.NullParameters, Float32, Float32, Float32, Float32, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, ODESolution{Float32, 3, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Nothing, Nothing, Vector{Float32}, Vector{Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, OrdinaryDiffEq.InterpolationData{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Vector{Float32}, Vector{Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}}, DiffEqBase.DEStats}, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}, OrdinaryDiffEq.DEOptions{Float32, Float32, Float32, Float32, PIController{Rational{Int64}}, typeof(DiffEqBase.ODE_DEFAULT_NORM), typeof(LinearAlgebra.opnorm), Nothing, CallbackSet{Tuple{}, Tuple{}}, typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, Nothing, Nothing, Int64, Tuple{}, Tuple{}, Tuple{}}, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Float32, Nothing, OrdinaryDiffEq.DefaultInit}, cache::OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}, repeat_step::Bool)
    @ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/nidTv/src/perform_step/sdirk_perform_step.jl:70
  [7] perform_step!
    @ ~/.julia/packages/OrdinaryDiffEq/nidTv/src/perform_step/sdirk_perform_step.jl:56 [inlined]
  [8] solve!(integrator::OrdinaryDiffEq.ODEIntegrator{ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Nothing, Float32, SciMLBase.NullParameters, Float32, Float32, Float32, Float32, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, ODESolution{Float32, 3, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Nothing, Nothing, Vector{Float32}, Vector{Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, OrdinaryDiffEq.InterpolationData{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}, Vector{Float32}, Vector{Vector{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}}}, OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}}, DiffEqBase.DEStats}, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, OrdinaryDiffEq.ImplicitEulerConstantCache{OrdinaryDiffEq.NLSolver{NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, false, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Int64, Nothing, Float32, OrdinaryDiffEq.NLNewtonConstantCache{Float32, Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, LinearAlgebra.QR{Float32, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, CuArray{Float32, 1, CUDA.Mem.DeviceBuffer}}, SciMLBase.UDerivativeWrapper{ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Float32, SciMLBase.NullParameters}}}}, OrdinaryDiffEq.DEOptions{Float32, Float32, Float32, Float32, PIController{Rational{Int64}}, typeof(DiffEqBase.ODE_DEFAULT_NORM), typeof(LinearAlgebra.opnorm), Nothing, CallbackSet{Tuple{}, Tuple{}}, typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, DataStructures.BinaryHeap{Float32, DataStructures.FasterForward}, Nothing, Nothing, Int64, Tuple{}, Tuple{}, Tuple{}}, CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Float32, Nothing, OrdinaryDiffEq.DefaultInit})
    @ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/nidTv/src/solve.jl:510
  [9] __solve(::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ::ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ OrdinaryDiffEq ~/.julia/packages/OrdinaryDiffEq/nidTv/src/solve.jl:6
 [10] __solve
    @ ~/.julia/packages/OrdinaryDiffEq/nidTv/src/solve.jl:1 [inlined]
 [11] #solve_call#26
    @ ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:472 [inlined]
 [12] solve_call(_prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, args::ImplicitEuler{12, true, LUFactorization{LinearAlgebra.RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:442
 [13] solve_up(prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, sensealg::Nothing, u0::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, p::SciMLBase.NullParameters, args::ImplicitEuler{0, true, Nothing, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:834
 [14] solve_up
    @ ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:807 [inlined]
 [15] solve(prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, args::ImplicitEuler{0, true, Nothing, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; sensealg::Nothing, u0::Nothing, p::Nothing, wrap::Val{true}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:801
 [16] solve(prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, args::ImplicitEuler{0, true, Nothing, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:791
 [17] top-level scope
    @ ~/Fixes.jl/ImplizitEuler-error.jl:19
 [18] include(fname::String)
    @ Base.MainInclude ./client.jl:476
 [19] top-level scope
    @ REPL[1]:1
in expression starting at /home/schntimo/Fixes.jl/ImplizitEuler-error.jl:19
TheZombie1999 commented 1 year ago

I made some progess.

If found these conversion rules in the LinearAlgebra package which are not sufficient for our current use case.

LinearAlgebra-factorization

convert(::Type{T}, f::T) where {T<:Factorization} = f
convert(::Type{T}, f::Factorization) where {T<:Factorization} = T(f)::T

convert(::Type{T}, f::Factorization) where {T<:AbstractArray} = T(f)::T

It's probably sufficient just to add the proper conversion rule, but I can't quite figure out how to write it.

TheZombie1999 commented 1 year ago

I added this line to the example code which makes it at least run without error:

Base.convert(::Type{H}, f::T) where{H <: LinearAlgebra.QR, T <: LinearAlgebra.LU} = LinearAlgebra.QR(getfield(f, :factors),Float32.(getfield(f, :ipiv)))
ChrisRackauckas commented 1 year ago

If you do sol = solve(prob, ImplicitEuler(linsolve = LUFactorization())) is it fine? Needs using LinearSolve

ChrisRackauckas commented 1 year ago

ArrayInterfaceGPUArrays.jl should be all that's needed, but yes

One idea that i had, was that the lu_instance method of the ArrayInterfaceCUDA returns a QR struct and not an LU struct, which seems strange .... but i am not sure whether that's the problem.

That's a problem. https://github.com/JuliaArrays/ArrayInterface.jl/pull/349 see if that fixes it.

TheZombie1999 commented 1 year ago

I added your commit to ArrayInteraface.jl to my dev of arrayInterface.jl. But it still doesn't work.

I get the following error:

ERROR: LoadError: SingularException(1)
Stacktrace:
  [1] checknonsingular
    @ ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/factorization.jl:19 [inlined]
  [2] checknonsingular
    @ ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/factorization.jl:21 [inlined]
  [3] #lu!#2777
    @ ~/.julia/packages/CUDA/DfvRa/lib/cusolver/linalg.jl:318 [inlined]
  [4] #lu!#171
    @ ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/lu.jl:79 [inlined]
  [5] lu!
    @ ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/lu.jl:79 [inlined]
  [6] lu_instance
    @ ~/.julia/dev/ArrayInterface/lib/ArrayInterfaceCUDA/src/ArrayInterfaceCUDA.jl:12 [inlined]
  [7] build_J_W(alg::ImplicitEuler{4, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, u::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, uprev::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, p::SciMLBase.NullParameters, t::Float32, dt::Float32, f::ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, #unused#::Type{Float32}, #unused#::Val{false})
    @ OrdinaryDiffEq ~/.julia/dev/OrdinaryDiffEq/src/derivative_utils.jl:898
  [8] build_nlsolver(alg::ImplicitEuler{4, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, nlalg::NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, u::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, uprev::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, p::SciMLBase.NullParameters, t::Float32, dt::Float32, f::Function, rate_prototype::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, #unused#::Type{Float32}, #unused#::Type{Float32}, #unused#::Type{Float32}, γ::Int64, c::Int64, α::Int64, #unused#::Val{false})
    @ OrdinaryDiffEq ~/.julia/dev/OrdinaryDiffEq/src/nlsolve/utils.jl:258
  [9] build_nlsolver
    @ ~/.julia/dev/OrdinaryDiffEq/src/nlsolve/utils.jl:139 [inlined]
 [10] build_nlsolver
    @ ~/.julia/dev/OrdinaryDiffEq/src/nlsolve/utils.jl:130 [inlined]
 [11] alg_cache
    @ ~/.julia/dev/OrdinaryDiffEq/src/caches/sdirk_caches.jl:37 [inlined]
 [12] __init(prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, alg::ImplicitEuler{4, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, timeseries_init::Tuple{}, ts_init::Tuple{}, ks_init::Tuple{}, recompile::Type{Val{true}}; saveat::Tuple{}, tstops::Tuple{}, d_discontinuities::Tuple{}, save_idxs::Nothing, save_everystep::Bool, save_on::Bool, save_start::Bool, save_end::Nothing, callback::Nothing, dense::Bool, calck::Bool, dt::Float32, dtmin::Nothing, dtmax::Float32, force_dtmin::Bool, adaptive::Bool, gamma::Rational{Int64}, abstol::Nothing, reltol::Nothing, qmin::Rational{Int64}, qmax::Int64, qsteady_min::Int64, qsteady_max::Rational{Int64}, beta1::Nothing, beta2::Nothing, qoldinit::Rational{Int64}, controller::Nothing, fullnormalize::Bool, failfactor::Int64, maxiters::Int64, internalnorm::typeof(DiffEqBase.ODE_DEFAULT_NORM), internalopnorm::typeof(opnorm), isoutofdomain::typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), unstable_check::typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), verbose::Bool, timeseries_errors::Bool, dense_errors::Bool, advance_to_tstop::Bool, stop_at_next_tstop::Bool, initialize_save::Bool, progress::Bool, progress_steps::Int64, progress_name::String, progress_message::typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), userdata::Nothing, allow_extrapolation::Bool, initialize_integrator::Bool, alias_u0::Bool, alias_du0::Bool, initializealg::OrdinaryDiffEq.DefaultInit, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ OrdinaryDiffEq ~/.julia/dev/OrdinaryDiffEq/src/solve.jl:312
 [13] __solve(::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ::ImplicitEuler{4, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; kwargs::Base.Pairs{Symbol, Real, Tuple{Symbol, Symbol}, NamedTuple{(:adaptive, :dt), Tuple{Bool, Float32}}})
    @ OrdinaryDiffEq ~/.julia/dev/OrdinaryDiffEq/src/solve.jl:5
 [14] #solve_call#26
    @ ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:472 [inlined]
 [15] solve_up(prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, sensealg::Nothing, u0::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, p::SciMLBase.NullParameters, args::ImplicitEuler{0, true, Nothing, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; kwargs::Base.Pairs{Symbol, Real, Tuple{Symbol, Symbol}, NamedTuple{(:adaptive, :dt), Tuple{Bool, Float32}}})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:834
 [16] solve(prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, args::ImplicitEuler{0, true, Nothing, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; sensealg::Nothing, u0::Nothing, p::Nothing, wrap::Val{true}, kwargs::Base.Pairs{Symbol, Real, Tuple{Symbol, Symbol}, NamedTuple{(:adaptive, :dt), Tuple{Bool, Float32}}})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:801
 [17] top-level scope
    @ ~/Fixes.jl/ImplizitEuler-error.jl:38
 [18] include(fname::String)
    @ Base.MainInclude ./client.jl:476
 [19] top-level scope
    @ REPL[1]:1
 [20] top-level scope
    @ ~/.julia/packages/CUDA/DfvRa/src/initialization.jl:52
in expression starting at /home/schntimo/Fixes.jl/ImplizitEuler-error.jl:38

The Code that I ran :

using DifferentialEquations
import DifferentialEquations: ImplicitEuler

using CUDA
using ArrayInterfaceCUDA
using LinearSolve

using ArrayInterfaceGPUArrays
using LinearAlgebra
import Base

u0 = CUDA.CuArray([1.f0 1.f0; 1.f0 1.f0; 1.f0 1.f0; 1.f0 1.f0; 1.f0 1.f0; 1.f0 1.f0])

function f(u, p, t)
    return 2.f0 .+ u
end

tspan = (0.f0, 2.f0)
prob = ODEProblem(f, u0, tspan)

sol = solve(prob, ImplicitEuler(),adaptive=false, dt=0.01f0)# LU(qr::QR) = LU(qr.factors, qr.τ)
TheZombie1999 commented 1 year ago

If you do sol = solve(prob, ImplicitEuler(linsolve = LUFactorization())) is it fine? Needs using LinearSolve

This also didn't work. Threw the exact same error as before.

And combining both solutions results in the nonsingular error.

ChrisRackauckas commented 1 year ago

Oh it's because the lu is on a zero matrix. Try https://github.com/JuliaArrays/ArrayInterface.jl/pull/349 now.

TheZombie1999 commented 1 year ago

adding fill!(A, true) didn't change anything.

I am still getting the checknonsingular error.

ChrisRackauckas commented 1 year ago

In the same spot? That should be impossible

TheZombie1999 commented 1 year ago

I print out A after it got filled and before it gets handed over to the lu! function. This results in the following error:

Filled ...
Float32[1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0]
ERROR: LoadError: SingularException(2)
Stacktrace:
  [1] checknonsingular
    @ ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/factorization.jl:19 [inlined]
  [2] checknonsingular
    @ ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/factorization.jl:21 [inlined]
  [3] #lu!#2777
    @ ~/.julia/packages/CUDA/DfvRa/lib/cusolver/linalg.jl:318 [inlined]
  [4] #lu!#171
    @ ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/lu.jl:79 [inlined]
  [5] lu!
    @ ~/.local/julia-1.8.0/share/julia/stdlib/v1.8/LinearAlgebra/src/lu.jl:79 [inlined]
  [6] lu_instance
    @ ~/.julia/dev/ArrayInterface/lib/ArrayInterfaceCUDA/src/ArrayInterfaceCUDA.jl:17 [inlined]
  [7] build_J_W(alg::ImplicitEuler{12, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, u::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, uprev::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, p::SciMLBase.NullParameters, t::Float32, dt::Float32, f::ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, #unused#::Type{Float32}, #unused#::Val{false})
    @ OrdinaryDiffEq ~/.julia/dev/OrdinaryDiffEq/src/derivative_utils.jl:898
  [8] build_nlsolver
    @ ~/.julia/dev/OrdinaryDiffEq/src/nlsolve/utils.jl:258 [inlined]
  [9] build_nlsolver
    @ ~/.julia/dev/OrdinaryDiffEq/src/nlsolve/utils.jl:139 [inlined]
 [10] build_nlsolver
    @ ~/.julia/dev/OrdinaryDiffEq/src/nlsolve/utils.jl:130 [inlined]
 [11] alg_cache
    @ ~/.julia/dev/OrdinaryDiffEq/src/caches/sdirk_caches.jl:37 [inlined]
 [12] __init(prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, alg::ImplicitEuler{12, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}, timeseries_init::Tuple{}, ts_init::Tuple{}, ks_init::Tuple{}, recompile::Type{Val{true}}; saveat::Tuple{}, tstops::Tuple{}, d_discontinuities::Tuple{}, save_idxs::Nothing, save_everystep::Bool, save_on::Bool, save_start::Bool, save_end::Nothing, callback::Nothing, dense::Bool, calck::Bool, dt::Float32, dtmin::Nothing, dtmax::Float32, force_dtmin::Bool, adaptive::Bool, gamma::Rational{Int64}, abstol::Nothing, reltol::Nothing, qmin::Rational{Int64}, qmax::Int64, qsteady_min::Int64, qsteady_max::Rational{Int64}, beta1::Nothing, beta2::Nothing, qoldinit::Rational{Int64}, controller::Nothing, fullnormalize::Bool, failfactor::Int64, maxiters::Int64, internalnorm::typeof(DiffEqBase.ODE_DEFAULT_NORM), internalopnorm::typeof(opnorm), isoutofdomain::typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), unstable_check::typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), verbose::Bool, timeseries_errors::Bool, dense_errors::Bool, advance_to_tstop::Bool, stop_at_next_tstop::Bool, initialize_save::Bool, progress::Bool, progress_steps::Int64, progress_name::String, progress_message::typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), userdata::Nothing, allow_extrapolation::Bool, initialize_integrator::Bool, alias_u0::Bool, alias_du0::Bool, initializealg::OrdinaryDiffEq.DefaultInit, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ OrdinaryDiffEq ~/.julia/dev/OrdinaryDiffEq/src/solve.jl:312
 [13] __init (repeats 5 times)
    @ ~/.julia/dev/OrdinaryDiffEq/src/solve.jl:10 [inlined]
 [14] __solve(::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, ::ImplicitEuler{12, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ OrdinaryDiffEq ~/.julia/dev/OrdinaryDiffEq/src/solve.jl:5
 [15] __solve
    @ ~/.julia/dev/OrdinaryDiffEq/src/solve.jl:1 [inlined]
 [16] #solve_call#26
    @ ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:472 [inlined]
 [17] solve_call(_prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, args::ImplicitEuler{12, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:442
 [18] solve_up(prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, sensealg::Nothing, u0::CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, p::SciMLBase.NullParameters, args::ImplicitEuler{0, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:834
 [19] solve_up
    @ ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:807 [inlined]
 [20] solve(prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, args::ImplicitEuler{0, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing}; sensealg::Nothing, u0::Nothing, p::Nothing, wrap::Val{true}, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:801
 [21] solve(prob::ODEProblem{CuArray{Float32, 2, CUDA.Mem.DeviceBuffer}, Tuple{Float32, Float32}, false, SciMLBase.NullParameters, ODEFunction{false, SciMLBase.AutoSpecialize, typeof(f), UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SciMLBase.StandardODEProblem}, args::ImplicitEuler{0, true, LUFactorization{RowMaximum}, NLNewton{Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}}, typeof(OrdinaryDiffEq.DEFAULT_PRECS), Val{:forward}, true, nothing})
    @ DiffEqBase ~/.julia/packages/DiffEqBase/5rKYk/src/solve.jl:791
 [22] top-level scope
    @ ~/Fixes.jl/ImplizitEuler-error.jl:26
 [23] include(fname::String)
    @ Base.MainInclude ./client.jl:476
 [24] top-level scope
    @ REPL[1]:1
in expression starting at /home/schntimo/Fixes.jl/ImplizitEuler-error.jl:26
ChrisRackauckas commented 1 year ago

That's definitely not a singular matrix 😅

ChrisRackauckas commented 1 year ago

Aha, got it, merged and tagged. Try it out with the latest ArrayInterfaceCUDA which now has the fixed LU construction. On a dev computer it seems to have fixed downstream.

TheZombie1999 commented 1 year ago

I have tried it and it works. Thank you for your help.