ENH: GAMGAgglomeration: increase repeatability. Fixes #3450

This commit is contained in:
ksaurabh-amd
2025-10-09 11:53:34 +01:00
committed by mattijs
parent 1cb0b7b6c9
commit 55c81bce1b

View File

@ -221,9 +221,14 @@ Foam::tmp<Foam::labelField> Foam::pairGAMGAgglomeration::agglomerate
auto tcoarseCellMap = tmp<labelField>::New(nFineCells, -1); auto tcoarseCellMap = tmp<labelField>::New(nFineCells, -1);
auto& coarseCellMap = tcoarseCellMap.ref(); auto& coarseCellMap = tcoarseCellMap.ref();
// Small tolerance to account for faces potentially having slightly
// different truncation error in their weights from run to run
// (e.g. due to offloading). If all the largest faces per cell are
// within this tolerance use the first one. This guarantees repeatability.
const scalar tol = 1E-10;
nCoarseCells = 0; nCoarseCells = 0;
label celli; label celli;
for (label cellfi=0; cellfi<nFineCells; cellfi++) for (label cellfi=0; cellfi<nFineCells; cellfi++)
{ {
// Change cell ordering depending on direction for this level // Change cell ordering depending on direction for this level
@ -250,7 +255,7 @@ Foam::tmp<Foam::labelField> Foam::pairGAMGAgglomeration::agglomerate
( (
coarseCellMap[upperAddr[facei]] < 0 coarseCellMap[upperAddr[facei]] < 0
&& coarseCellMap[lowerAddr[facei]] < 0 && coarseCellMap[lowerAddr[facei]] < 0
&& faceWeights[facei] > maxFaceWeight && faceWeights[facei] > maxFaceWeight*(1.0 + tol)
) )
{ {
// Match found. Pick up all the necessary data // Match found. Pick up all the necessary data
@ -282,7 +287,7 @@ Foam::tmp<Foam::labelField> Foam::pairGAMGAgglomeration::agglomerate
{ {
label facei = cellFaces[faceOs]; label facei = cellFaces[faceOs];
if (faceWeights[facei] > clusterMaxFaceCoeff) if (faceWeights[facei] > clusterMaxFaceCoeff*(1.0 + tol))
{ {
clusterMatchFaceNo = facei; clusterMatchFaceNo = facei;
clusterMaxFaceCoeff = faceWeights[facei]; clusterMaxFaceCoeff = faceWeights[facei];