From ac2d145b6f5dd6dddf0c8bb9a1d96aacdcdd5919 Mon Sep 17 00:00:00 2001 From: Frederick Roy Date: Tue, 20 Jan 2026 13:32:46 +0900 Subject: [PATCH] fix resetForUnbuilt in UnbuiltGCSolver --- .../lagrangian/solver/UnbuiltConstraintSolver.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Sofa/Component/Constraint/Lagrangian/Solver/src/sofa/component/constraint/lagrangian/solver/UnbuiltConstraintSolver.cpp b/Sofa/Component/Constraint/Lagrangian/Solver/src/sofa/component/constraint/lagrangian/solver/UnbuiltConstraintSolver.cpp index 551d03e6836..b12caccab5b 100644 --- a/Sofa/Component/Constraint/Lagrangian/Solver/src/sofa/component/constraint/lagrangian/solver/UnbuiltConstraintSolver.cpp +++ b/Sofa/Component/Constraint/Lagrangian/Solver/src/sofa/component/constraint/lagrangian/solver/UnbuiltConstraintSolver.cpp @@ -37,13 +37,14 @@ void UnbuiltConstraintSolver::doBuildSystem( const core::ConstraintParams *cPara return; } + // Initialize constraint sequence ONCE before iterating over constraint corrections + c_current_cp->constraints_sequence.resize(numConstraints); + std::iota(c_current_cp->constraints_sequence.begin(), c_current_cp->constraints_sequence.end(), 0); + for (const auto& cc : l_constraintCorrections) { if (!cc->isActive()) continue; - c_current_cp->constraints_sequence.resize(numConstraints); - std::iota(c_current_cp->constraints_sequence.begin(), c_current_cp->constraints_sequence.end(), 0); - // some constraint corrections (e.g LinearSolverConstraintCorrection) // can change the order of the constraints, to optimize later computations cc->resetForUnbuiltResolution(c_current_cp->getF(), c_current_cp->constraints_sequence);