diff --git a/src/dynamicMesh/polyMeshAdder/polyMeshAdder.C b/src/dynamicMesh/polyMeshAdder/polyMeshAdder.C index 9fef59a208..b04bc9101e 100644 --- a/src/dynamicMesh/polyMeshAdder/polyMeshAdder.C +++ b/src/dynamicMesh/polyMeshAdder/polyMeshAdder.C @@ -1737,85 +1737,218 @@ Foam::autoPtr Foam::polyMeshAdder::add Foam::Map Foam::polyMeshAdder::findSharedPoints ( const polyMesh& mesh, - const scalar mergeTol + const scalar mergeDist ) { const labelList& sharedPointLabels = mesh.globalData().sharedPointLabels(); + const labelList& sharedPointAddr = mesh.globalData().sharedPointAddr(); - labelList sharedToMerged; - pointField mergedPoints; - bool hasMerged = Foam::mergePoints - ( - pointField - ( - IndirectList + // Because of adding the missing pieces e.g. when redistributing a mesh + // it can be that there are multiple points on the same processor that + // refer to the same shared point. + + // Invert point-to-shared addressing + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Map sharedToMesh(sharedPointLabels.size()); + + label nMultiple = 0; + + forAll(sharedPointLabels, i) + { + label pointI = sharedPointLabels[i]; + + label sharedI = sharedPointAddr[i]; + + Map::iterator iter = sharedToMesh.find(sharedI); + + if (iter != sharedToMesh.end()) + { + // sharedI already used by other point. Add this one. + + nMultiple++; + + labelList& connectedPointLabels = iter(); + + label sz = connectedPointLabels.size(); + + // Check just to make sure. + if (findIndex(connectedPointLabels, pointI) != -1) + { + FatalErrorIn("polyMeshAdder::findSharedPoints(..)") + << "Duplicate point in sharedPoint addressing." << endl + << "When trying to add point " << pointI << " on shared " + << sharedI << " with connected points " + << connectedPointLabels + << abort(FatalError); + } + + connectedPointLabels.setSize(sz+1); + connectedPointLabels[sz] = pointI; + } + else + { + sharedToMesh.insert(sharedI, labelList(1, pointI)); + } + } + + + // Assign single master for every shared with multiple geometric points + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Map