diff --git a/ReleaseNotes-dev b/ReleaseNotes-dev index aa3c87699d..b49004337d 100644 --- a/ReleaseNotes-dev +++ b/ReleaseNotes-dev @@ -220,7 +220,8 @@ } #+END_SRC See also [[./doc/changes/dynamicCode.org]] - + + cyclicSlip: cyclic with point motion constrained to tangential plane. + Can be used with any mesh movement, e.g. snapping in snappyHexMesh. * Utilities There have been some utilities added and updated in this release. *** *New* utilities @@ -253,6 +254,8 @@ - works in parallel + =snappyHexMesh=: + extrude across multi-processor boundaries + + specify type of patches created during meshing + + handle cyclics in initial mesh (non parallel meshing only) + preserve faceZones shape during layering + combining coincident patch faces is now default after snapping + *Warning*: diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict index f99b82edb7..b50a614713 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict @@ -144,6 +144,13 @@ castellatedMeshControls } } + // Optional specification of patch type (default is wall). No + // constraint types (cyclic, symmetry) etc. are allowed. + patchInfo + { + type patch; + } + //- Optional angle to detect small-large cell situation // perpendicular to the surface. Is the angle of face w.r.t. // the local surface normal. Use on flat(ish) surfaces only. 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