From 1265e78341c092d12ee6d2c26221391a1d0de5d1 Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 2 Jun 2011 19:55:51 +0100 Subject: [PATCH 1/7] BUG: globalMeshData: mergePoints in case of cyclics --- .../polyMesh/globalMeshData/globalMeshData.C | 367 ++++++++++++------ .../polyMesh/globalMeshData/globalMeshData.H | 28 +- .../polyMesh/globalMeshData/globalPoints.C | 5 +- 3 files changed, 273 insertions(+), 127 deletions(-) diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshData.C b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshData.C index 52ccc834ff..ce054e9e9e 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshData.C +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshData.C @@ -525,7 +525,6 @@ void Foam::globalMeshData::calcGlobalPointSlaves() const // Calculate connected points for master points. globalPoints globalData(mesh_, coupledPatch(), true, true); - globalPointNumberingPtr_.reset(new globalIndex(globalData.globalIndices())); globalPointSlavesPtr_.reset ( @@ -1564,6 +1563,42 @@ void Foam::globalMeshData::calcGlobalPointBoundaryCells() const } +void Foam::globalMeshData::calcGlobalCoPointSlaves() const +{ + if (debug) + { + Pout<< "globalMeshData::calcGlobalCoPointSlaves() :" + << " calculating coupled master to collocated" + << " slave point addressing." << endl; + } + + // Calculate connected points for master points. + globalPoints globalData(mesh_, coupledPatch(), true, false); + + globalCoPointSlavesPtr_.reset + ( + new labelListList + ( + globalData.pointPoints().xfer() + ) + ); + globalCoPointSlavesMapPtr_.reset + ( + new mapDistribute + ( + globalData.map().xfer() + ) + ); + + if (debug) + { + Pout<< "globalMeshData::calcGlobalCoPointSlaves() :" + << " finished calculating coupled master to collocated" + << " slave point addressing." << endl; + } +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // Construct from polyMesh @@ -1639,6 +1674,10 @@ void Foam::globalMeshData::clearOut() globalPointBoundaryCellsPtr_.clear(); globalPointTransformedBoundaryCellsPtr_.clear(); globalPointBoundaryCellsMapPtr_.clear(); + + // Other: collocated points + globalCoPointSlavesPtr_.clear(); + globalCoPointSlavesMapPtr_.clear(); } @@ -1971,7 +2010,10 @@ const Foam::globalIndex& Foam::globalMeshData::globalPointNumbering() const { if (!globalPointNumberingPtr_.valid()) { - calcGlobalPointSlaves(); + globalPointNumberingPtr_.reset + ( + new globalIndex(coupledPatch().nPoints()) + ); } return globalPointNumberingPtr_(); } @@ -2161,6 +2203,26 @@ const } +const Foam::labelListList& Foam::globalMeshData::globalCoPointSlaves() const +{ + if (!globalCoPointSlavesPtr_.valid()) + { + calcGlobalCoPointSlaves(); + } + return globalCoPointSlavesPtr_(); +} + + +const Foam::mapDistribute& Foam::globalMeshData::globalCoPointSlavesMap() const +{ + if (!globalCoPointSlavesMapPtr_.valid()) + { + calcGlobalCoPointSlaves(); + } + return globalCoPointSlavesMapPtr_(); +} + + Foam::autoPtr Foam::globalMeshData::mergePoints ( labelList& pointToGlobal, @@ -2168,33 +2230,70 @@ Foam::autoPtr Foam::globalMeshData::mergePoints ) const { const indirectPrimitivePatch& cpp = coupledPatch(); - const labelListList& pointSlaves = globalPointSlaves(); - const mapDistribute& pointSlavesMap = globalPointSlavesMap(); + const globalIndex& globalCoupledPoints = globalPointNumbering(); + // Use collocated only + const labelListList& pointSlaves = globalCoPointSlaves(); + const mapDistribute& pointSlavesMap = globalCoPointSlavesMap(); + + + // Points are either + // - master with slaves + // - slave with a master + // - other (since e.g. non-collocated cyclics not connected) + + labelList masterGlobalPoint(cpp.nPoints(), -1); + forAll(masterGlobalPoint, pointI) + { + const labelList& slavePoints = pointSlaves[pointI]; + if (slavePoints.size() > 0) + { + masterGlobalPoint[pointI] = globalCoupledPoints.toGlobal(pointI); + } + } + + // Sync by taking max + syncData + ( + masterGlobalPoint, + pointSlaves, + labelListList(cpp.nPoints()), // no transforms + pointSlavesMap, + maxEqOp