From ea736dd82b45443813c24a3710c261be221f793e Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 10 Mar 2009 09:42:29 +0000 Subject: [PATCH] breaking infinite loop for bad decompositions --- .../hierarchGeomDecomp/hierarchGeomDecomp.C | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/decompositionAgglomeration/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.C b/src/decompositionAgglomeration/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.C index 882123c526..72d39d215c 100644 --- a/src/decompositionAgglomeration/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.C +++ b/src/decompositionAgglomeration/decompositionMethods/hierarchGeomDecomp/hierarchGeomDecomp.C @@ -165,6 +165,11 @@ void Foam::hierarchGeomDecomp::findBinary // (one beyond) index of highValue label high = values.size(); + // Safeguards to avoid infinite loop. + label lowPrev = -1; + label midPrev = -1; + label highPrev = -1; + //while (low <= high) while (true) { @@ -197,6 +202,20 @@ void Foam::hierarchGeomDecomp::findBinary // Update mid, midValue midValue = 0.5*(lowValue+highValue); mid = findLower(values, midValue, low, high); + + // Safeguard if same as previous. + bool hasNotChanged = (mid == midPrev) && (low == lowPrev) && (high == highPrev); + if (returnReduce(hasNotChanged, andOp())) + { + WarningIn("hierarchGeomDecomp::findBinary(..)") + << "unable to find desired deomposition split, making do!" + << endl; + break; + } + + midPrev = mid; + lowPrev = low; + highPrev = high; } }