diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C index 0a233e97af5d1e953c0638ec4b77fdadcb23f491..bbfe0cf684445793b31441ce4be322eacae9396d 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.C @@ -110,6 +110,7 @@ bool Foam::localPointRegion::isDuplicate void Foam::localPointRegion::countPointRegions ( const polyMesh& mesh, + const boolList& candidatePoint, const Map<label>& candidateFace, faceList& minRegion ) @@ -144,38 +145,45 @@ void Foam::localPointRegion::countPointRegions forAll(f, fp) { label pointI = f[fp]; - label region = minRegion[faceI][fp]; - if (minPointRegion[pointI] == -1) - { - minPointRegion[pointI] = region; - } - else if (minPointRegion[pointI] != region) + // Even points which were not candidates for splitting might + // be on multiple baffles that are being split so check. + + if (candidatePoint[pointI]) { - // Multiple regions for this point. Add. - Map<label>::iterator iter = meshPointMap_.find(pointI); - if (iter != meshPointMap_.end()) + label region = minRegion[faceI][fp]; + + if (minPointRegion[pointI] == -1) { - labelList& regions = pointRegions[iter()]; - if (findIndex(regions, region) == -1) - { - label sz = regions.size(); - regions.setSize(sz+1); - regions[sz] = region; - } + minPointRegion[pointI] = region; } - else + else if (minPointRegion[pointI] != region) { - label localPointI = meshPointMap_.size(); - meshPointMap_.insert(pointI, localPointI); - labelList regions(2); - regions[0] = minPointRegion[pointI]; - regions[1] = region; - pointRegions.append(regions); - } + // Multiple regions for this point. Add. + Map<label>::iterator iter = meshPointMap_.find(pointI); + if (iter != meshPointMap_.end()) + { + labelList& regions = pointRegions[iter()]; + if (findIndex(regions, region) == -1) + { + label sz = regions.size(); + regions.setSize(sz+1); + regions[sz] = region; + } + } + else + { + label localPointI = meshPointMap_.size(); + meshPointMap_.insert(pointI, localPointI); + labelList regions(2); + regions[0] = minPointRegion[pointI]; + regions[1] = region; + pointRegions.append(regions); + } - label meshFaceMapI = meshFaceMap_.size(); - meshFaceMap_.insert(faceI, meshFaceMapI); + label meshFaceMapI = meshFaceMap_.size(); + meshFaceMap_.insert(faceI, meshFaceMapI); + } } } } @@ -194,7 +202,9 @@ void Foam::localPointRegion::countPointRegions forAll(f, fp) { - if (meshPointMap_.found(f[fp])) + // Note: candidatePoint test not really necessary but + // speeds up rejection. + if (candidatePoint[f[fp]] && meshPointMap_.found(f[fp])) { label meshFaceMapI = meshFaceMap_.size(); meshFaceMap_.insert(faceI, meshFaceMapI); @@ -421,7 +431,7 @@ void Foam::localPointRegion::calcPointRegions // Count regions per point - countPointRegions(mesh, candidateFace, minRegion); + countPointRegions(mesh, candidatePoint, candidateFace, minRegion); minRegion.clear(); diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H index e9c03a37e596fe7330b47f8708428a8a5f48e87f..95d05d3aedf29c775c65c9e68583fe06a86d35ce 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H @@ -92,6 +92,7 @@ class localPointRegion void countPointRegions ( const polyMesh& mesh, + const boolList& candidatePoint, const Map<label>& candidateFace, faceList& minRegion );