Overflow error in `mtkcompile` for friction model with 32 nodes
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
Línea de trabajo
The reproducer calls mtkcompile on a generated friction model network and reports an OverflowError at 32 or more nodes; start by running the script with the listed ModelingToolkit version to confirm the threshold. The issue points to ModelingToolkit PR #2089 as possibly related, so inspect that change and the state selection code reached during compilation. Done means identifying and fixing the overflow so the reproducer compiles at the reported node counts.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
A network of friction model fails to compile with node counts 32 or larger, it seems to be an integer that overflows. With 31 it works fine.
copilot-authored script to reproduce and monkeypatch to use BigInt below.
ModelingToolkit version 11.45.5, Julia 1.13.2.
Maybe ModelingToolkit #2089: Fix Barreiss algorithm is related in some way?
using ModelingToolkit
using ModelingToolkit: t_nounits as t, D_nounits as D
@connector function ContactPort(; name)
variables = @variables begin
velocity(t)
force(t), [connect = Flow]
end
return System(Equation[], t, variables, []; name)
end
function contact_model(; name)
parameters = @parameters stiffness = 1.0 rate_coefficient = 1.0
variables = @variables begin
deformation(t) = 0.0
plastic_slip(t) = 0.0
accumulated_slip(t) = 0.0
resistance(t)
capacity(t)
positive_rate(t)
negative_rate(t)
slip_rate(t)
end
@named port = ContactPort()
equations = [
resistance ~ stiffness * deformation,
capacity ~ 1 + exp(-accumulated_slip),
positive_rate ~ (resistance - capacity + abs(resistance - capacity)) /
(2rate_coefficient),
negative_rate ~ (-resistance - capacity + abs(-resistance - capacity)) /
(2rate_coefficient),
slip_rate ~ positive_rate - negative_rate,
D(deformation) ~ port.velocity - slip_rate,
D(plastic_slip) ~ slip_rate,
D(accumulated_slip) ~ positive_rate + negative_rate,
port.force ~ resistance,
]
return compose(System(equations, t, variables, parameters; name), port)
end
function velocity_source(; name)
@named port = ContactPort()
return compose(System([port.velocity ~ -1.0], t; name), port)
end
function contact_network(contact_count)
@named source = velocity_source()
contacts = [contact_model(; name = Symbol(:contact, index)) for index in 1:contact_count]
equations = [connect(source.port, [contact.port for contact in contacts]...)]
return compose(System(equations, t; name = :contact_network), source, contacts...)
end
function reproduce_main()
for contact_count in (1, 30, 31, 32, 45, 60)
try
elapsed = @elapsed mtkcompile(contact_network(contact_count))
println("PASS contacts=", contact_count, " compile_s=", elapsed)
catch exception
println("FAIL contacts=", contact_count, " ", sprint(showerror, exception))
exception isa OverflowError || rethrow()
end
end
end
function enable_bigint_probe!()
@eval ModelingToolkit.StateSelection begin
function aag_bareiss!(structure, original::CLIL.SparseMatrixCLIL{Int, Int})
pristine = copy(original)
try
return invoke(aag_bareiss!, Tuple{Any, CLIL.SparseMatrixCLIL},
structure, original)
catch exception
exception isa OverflowError || rethrow()
end
reduced, solvable, ranks = aag_bareiss!(structure,
convert(CLIL.SparseMatrixCLIL{BigInt, Int}, pristine))
maximum_coefficient = maximum(
(maximum(abs, row; init = big(0)) for row in reduced.row_vals);
init = big(0))
println("BIGINT_RETRY_OK rows=", size(pristine, 1),
" max_reduced_coefficient=", maximum_coefficient)
return convert(CLIL.SparseMatrixCLIL{Int, Int}, reduced), solvable, ranks
end
end
end
if "--bigint-probe" in ARGS
enable_bigint_probe!()
end
if abspath(PROGRAM_FILE) == @__FILE__
reproduce_main()
end
- Lenguaje dominante
- Julia
- Estrellas
- 8
- Forks
- 14
- Merge medio
- 8 d 8 h
- PR fusionados (30 d)
- 1
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de JuliaComputing/StateSelection.jl
-
Inline linear SCC solves share one `LinearCache` per matrix size, so every call refactorizesAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
-
Inlined linear SCC of three unknowns: the run-time solve dominates the cost of the right-hand sideAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
JuliaComputing/StateSelection.jl#173 · 3 comentarios ·
-
State-machine query operators in ModelingToolkitTearing throw UndefVarError for wrapPosiblemente ocupada @baggepinnen la tomó hace 15 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
-
`maybe_zeros` check does not look inside a division, so tearing divides by a parameter expression that is zero (NaN in initialization)Posiblemente ocupada @mwhincup la tomó hace 19 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
JuliaComputing/StateSelection.jl#166 · 1 comentario ·
Todos los issues de JuliaComputing/StateSelection.jl
Issues similares
-
30-minutes algorithm any-language codewars dart easy elixir hackerrank hacktoberfest haskell help wanted interview-prep julia leetcode lua open-source r scala students zig
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Huerte/algo-solutions-python#163 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
QuantumSavory/QuantumClifford.jl#853 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
JuliaPackaging/Yggdrasil#15441 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
JuliaSmoothOptimizers/Penelopt.jl#260 ·
Los mantenedores suelen responder en 1 día
-
authority-de-dommel ready-for-agent
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
Deltares/Ribasim-NL#997 ·
Los mantenedores suelen responder en 1 día