Skip to content

Commit ef0b031

Browse files
committed
set hotstart false by default and restore zero-ing forces if cold start
1 parent ed5db1f commit ef0b031

2 files changed

Lines changed: 9 additions & 7 deletions

File tree

Sofa/Component/Constraint/Lagrangian/Solver/src/sofa/component/constraint/lagrangian/solver/UnbuiltConstraintSolver.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ namespace sofa::component::constraint::lagrangian::solver
3131

3232
UnbuiltConstraintSolver::UnbuiltConstraintSolver()
3333
: GenericConstraintSolver()
34-
, d_initialGuess(initData(&d_initialGuess, true, "initialGuess", "Activate constraint force history to improve convergence (hot start)"))
34+
, d_initialGuess(initData(&d_initialGuess, false, "initialGuess", "Activate constraint force history to possibly improve convergence (hot start)."))
3535
{
3636

3737
}
@@ -69,11 +69,9 @@ void UnbuiltConstraintSolver::doBuildSystem( const core::ConstraintParams *cPara
6969
for (unsigned int i = 0; i < numConstraints; i++)
7070
c_current_cp->cclist_elems[i].resize(nbCC, nullptr);
7171

72-
unsigned int nbObjects = 0;
7372
for (unsigned int c_id = 0; c_id < numConstraints;)
7473
{
7574
bool foundCC = false;
76-
nbObjects++;
7775
const unsigned int l = c_current_cp->constraintsResolutions[c_id]->getNbLines();
7876

7977
for (unsigned int j = 0; j < l_constraintCorrections.size(); j++)
@@ -153,7 +151,7 @@ void UnbuiltConstraintSolver::computeInitialGuess()
153151
{
154152
force[c] = 0.0;
155153
}
156-
154+
157155
// Then restore forces from previous timestep for matching persistent IDs
158156
for (const ConstraintBlockInfo& info : m_constraintBlockInfo)
159157
{

Sofa/Component/Constraint/Lagrangian/Solver/src/sofa/component/constraint/lagrangian/solver/UnbuiltGaussSeidelConstraintSolver.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,20 @@ void UnbuiltGaussSeidelConstraintSolver::doSolve(GenericConstraintProblem * prob
7777
{
7878
if(!c_current_cp->constraintsResolutions[i])
7979
{
80-
msg_warning() << "Bad size of constraintsResolutions in GenericConstraintSolver" ;
80+
msg_warning() << "Bad size of constraintsResolutions" ;
8181
c_current_cp->setDimension(i);
8282
break;
8383
}
8484
c_current_cp->constraintsResolutions[i]->init(i, w, force);
8585
i += c_current_cp->constraintsResolutions[i]->getNbLines();
8686
}
87-
// Note: force array is now initialized by GenericConstraintSolver::computeInitialGuess()
88-
// for hot-start support. Do not zero forces here.
8987

88+
// zero forces if cold-start
89+
if(!d_initialGuess.getValue())
90+
{
91+
memset(force, 0, c_current_cp->getDimension() * sizeof(SReal));
92+
}
93+
9094
bool showGraphs = false;
9195
sofa::type::vector<SReal>* graph_residuals = nullptr;
9296
std::map < std::string, sofa::type::vector<SReal> > *graph_forces = nullptr, *graph_violations = nullptr;

0 commit comments

Comments
 (0)