fix: use previous iteration dxNorm in convergence check
isConvergedToNumericalLimit() compared dxNorms->at(iterNo) to itself instead of comparing current vs previous iteration. This prevented the solver from detecting convergence improvement, causing it to exhaust its iteration limit on assemblies with many constraints. Fix: read dxNorms->at(iterNo - 1) for the previous iteration's norm.
This commit is contained in:
@@ -112,7 +112,7 @@ bool NewtonRaphson::isConvergedToNumericalLimit()
|
||||
size_t nDivergenceMax = 3;
|
||||
auto dxNormIterNo = dxNorms->at(iterNo);
|
||||
if (iterNo > 0) {
|
||||
auto dxNormIterNoOld = dxNorms->at(iterNo);
|
||||
auto dxNormIterNoOld = dxNorms->at(iterNo - 1);
|
||||
auto farTooLargeError = dxNormIterNo > tooLargeTol;
|
||||
auto worthIterating = dxNormIterNo > (smallEnoughTol * pow(10.0, (iterNo / iterMax) * nDecade));
|
||||
bool stillConverging;
|
||||
|
||||
Reference in New Issue
Block a user