diff --git a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C index be267f8724..b61d997399 100644 --- a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C +++ b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C @@ -45,7 +45,7 @@ Description so cannot have any cells in any other zone. - useCellZonesOnly does not do a walk and uses the cellZones only. Use this if you don't mind having disconnected domains in a single region. - This option requires all cells to be in one (and one only) region. + This option requires all cells to be in one (and one only) cellZone. \*---------------------------------------------------------------------------*/ diff --git a/bin/mpirunDebug b/bin/mpirunDebug index 57df760873..2376d22601 100755 --- a/bin/mpirunDebug +++ b/bin/mpirunDebug @@ -206,6 +206,21 @@ done cmd="" if [ .$WM_MPLIB = .OPENMPI ]; then cmd="mpirun -app $PWD/mpirun.schema $procXtermCmdFile + echo "$procCmd" >> $procXtermCmdFile + chmod +x $procXtermCmdFile + if [ $proc -ne 0 ]; then + cmd="${cmd} :" + fi + cmd="${cmd} -n 1 ${procXtermCmdFile}" + done < $PWD/mpirun.schema fi echo "Constructed $PWD/mpirun.schema file." diff --git a/src/OpenFOAM/containers/Lists/UList/UList.H b/src/OpenFOAM/containers/Lists/UList/UList.H index 087f685ff6..b829c99ea5 100644 --- a/src/OpenFOAM/containers/Lists/UList/UList.H +++ b/src/OpenFOAM/containers/Lists/UList/UList.H @@ -184,6 +184,12 @@ public: // an out-of-range element returns false without any ill-effects inline const T& operator[](const label) const; + //- Return last element of UList. + inline T& last(); + + //- Return last element of UList. + inline const T& last() const; + //- Allow cast to a const List& inline operator const Foam::List&() const; diff --git a/src/OpenFOAM/containers/Lists/UList/UListI.H b/src/OpenFOAM/containers/Lists/UList/UListI.H index 5c1df4be15..aa7d396f10 100644 --- a/src/OpenFOAM/containers/Lists/UList/UListI.H +++ b/src/OpenFOAM/containers/Lists/UList/UListI.H @@ -114,6 +114,20 @@ inline void Foam::UList::checkIndex(const label i) const } +template +inline T& Foam::UList::last() +{ + return this->operator[](this->size()-1); +} + + +template +inline const T& Foam::UList::last() const +{ + return this->operator[](this->size()-1); +} + + template inline const T* Foam::UList::cdata() const { diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.C b/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.C index 87f940db40..41cb1c4f11 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.C +++ b/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.C @@ -82,9 +82,6 @@ void Foam::PstreamBuffers::finishedSends(labelListList& sizes, const bool block) if (commsType_ == UPstream::nonBlocking) { - labelListList sizes; - labelListList send,recv; - Pstream::exchange, char> ( sendBuf_, @@ -96,20 +93,30 @@ void Foam::PstreamBuffers::finishedSends(labelListList& sizes, const bool block) } else { - sizes.setSize(UPstream::nProcs()); - labelList& nsTransPs = sizes[UPstream::myProcNo()]; - nsTransPs.setSize(UPstream::nProcs()); + FatalErrorIn + ( + "PstreamBuffers::finishedSends(labelListList&, const bool)" + ) << "Obtaining sizes not supported in " + << UPstream::commsTypeNames[commsType_] << endl + << " since transfers already in progress. Use non-blocking instead." + << exit(FatalError); - forAll(sendBuf_, procI) - { - nsTransPs[procI] = sendBuf_[procI].size(); - } - - // Send sizes across. - int oldTag = UPstream::msgType(); - UPstream::msgType() = tag_; - combineReduce(sizes, UPstream::listEq()); - UPstream::msgType() = oldTag; + // Note: possible only if using different tag from write started + // by ~UOPstream. Needs some work. + //sizes.setSize(UPstream::nProcs()); + //labelList& nsTransPs = sizes[UPstream::myProcNo()]; + //nsTransPs.setSize(UPstream::nProcs()); + // + //forAll(sendBuf_, procI) + //{ + // nsTransPs[procI] = sendBuf_[procI].size(); + //} + // + //// Send sizes across. + //int oldTag = UPstream::msgType(); + //UPstream::msgType() = tag_; + //combineReduce(sizes, UPstream::listEq()); + //UPstream::msgType() = oldTag; } } diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.H b/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.H index d3dbbf23db..75f26f1d6a 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.H +++ b/src/OpenFOAM/db/IOstreams/Pstreams/PstreamBuffers.H @@ -138,7 +138,8 @@ public: void finishedSends(const bool block = true); //- Mark all sends as having been done. Same as above but also returns - // sizes (bytes) transferred. + // sizes (bytes) transferred. Note:currently only valid for + // non-blocking. void finishedSends(labelListList& sizes, const bool block = true); }; diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C b/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C index 64ced34ecf..b950ed22f0 100644 --- a/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C +++ b/src/OpenFOAM/db/IOstreams/Pstreams/exchange.C @@ -50,43 +50,42 @@ void Pstream::exchange const bool block ) { - if (UPstream::parRun()) + if (!contiguous()) { - if (!contiguous()) - { - FatalErrorIn - ( - "Pstream::exchange(..)" - ) << "Continuous data only." << Foam::abort(FatalError); - } + FatalErrorIn + ( + "Pstream::exchange(..)" + ) << "Continuous data only." << Foam::abort(FatalError); + } - if (sendBufs.size() != UPstream::nProcs()) - { - FatalErrorIn - ( - "Pstream::exchange(..)" - ) << "Size of list:" << sendBufs.size() - << " does not equal the number of processors:" - << UPstream::nProcs() - << Foam::abort(FatalError); - } + if (sendBufs.size() != UPstream::nProcs()) + { + FatalErrorIn + ( + "Pstream::exchange(..)" + ) << "Size of list:" << sendBufs.size() + << " does not equal the number of processors:" + << UPstream::nProcs() + << Foam::abort(FatalError); + } - sizes.setSize(UPstream::nProcs()); - labelList& nsTransPs = sizes[UPstream::myProcNo()]; - nsTransPs.setSize(UPstream::nProcs()); + sizes.setSize(UPstream::nProcs()); + labelList& nsTransPs = sizes[UPstream::myProcNo()]; + nsTransPs.setSize(UPstream::nProcs()); - forAll(sendBufs, procI) - { - nsTransPs[procI] = sendBufs[procI].size(); - } - - // Send sizes across. - int oldTag = UPstream::msgType(); - UPstream::msgType() = tag; - combineReduce(sizes, UPstream::listEq()); - UPstream::msgType() = oldTag; + forAll(sendBufs, procI) + { + nsTransPs[procI] = sendBufs[procI].size(); + } + // Send sizes across. + int oldTag = UPstream::msgType(); + UPstream::msgType() = tag; + combineReduce(sizes, UPstream::listEq()); + UPstream::msgType() = oldTag; + if (Pstream::parRun()) + { // Set up receives // ~~~~~~~~~~~~~~~ diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C index 4e3bf3fad6..5c9b96fe68 100644 --- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C +++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C @@ -37,8 +37,43 @@ void Foam::OutputFilterFunctionObject::readDict() dict_.readIfPresent("region", regionName_); dict_.readIfPresent("dictionary", dictName_); dict_.readIfPresent("enabled", enabled_); + dict_.readIfPresent("storeFilter", storeFilter_); } +template +void Foam::OutputFilterFunctionObject::allocateFilter() +{ + if (dictName_.size()) + { + ptr_.reset + ( + new IOOutputFilter + ( + name(), + time_.lookupObject(regionName_), + dictName_ + ) + ); + } + else + { + ptr_.reset + ( + new OutputFilter + ( + name(), + time_.lookupObject(regionName_), + dict_ + ) + ); + } +} + +template +void Foam::OutputFilterFunctionObject::destroyFilter() +{ + ptr_.reset(); +} // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -56,6 +91,7 @@ Foam::OutputFilterFunctionObject::OutputFilterFunctionObject regionName_(polyMesh::defaultRegion), dictName_(), enabled_(true), + storeFilter_(true), outputControl_(t, dict) { readDict(); @@ -83,32 +119,9 @@ bool Foam::OutputFilterFunctionObject::start() { readDict(); - if (enabled_) + if (enabled_&&storeFilter_) { - if (dictName_.size()) - { - ptr_.reset - ( - new IOOutputFilter - ( - name(), - time_.lookupObject(regionName_), - dictName_ - ) - ); - } - else - { - ptr_.reset - ( - new OutputFilter - ( - name(), - time_.lookupObject(regionName_), - dict_ - ) - ); - } + allocateFilter(); } return true; @@ -120,12 +133,22 @@ bool Foam::OutputFilterFunctionObject::execute() { if (enabled_) { + if (!storeFilter_) + { + allocateFilter(); + } + ptr_->execute(); if (enabled_ && outputControl_.output()) { ptr_->write(); } + + if (!storeFilter_) + { + destroyFilter(); + } } return true; @@ -137,12 +160,22 @@ bool Foam::OutputFilterFunctionObject::end() { if (enabled_) { + if (!storeFilter_) + { + allocateFilter(); + } + ptr_->end(); if (enabled_ && outputControl_.output()) { ptr_->write(); } + + if (!storeFilter_) + { + destroyFilter(); + } } return true; diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H index f6c183e803..47009d2643 100644 --- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H +++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H @@ -78,6 +78,10 @@ class OutputFilterFunctionObject //- Switch for the execution of the functionObject bool enabled_; + //- Switch to store filter in between writes or use on-the-fly + // construction + bool storeFilter_; + //- Output controls outputFilterOutputControl outputControl_; @@ -89,6 +93,12 @@ class OutputFilterFunctionObject //- Read relevant dictionary entries void readDict(); + + //- Creates most of the data associated with this object. + void allocateFilter(); + + //- Destroys most of the data associated with this object. + void destroyFilter(); //- Disallow default bitwise copy construct OutputFilterFunctionObject(const OutputFilterFunctionObject&); diff --git a/src/OpenFOAM/meshes/pointMesh/pointBoundaryMesh/pointBoundaryMesh.C b/src/OpenFOAM/meshes/pointMesh/pointBoundaryMesh/pointBoundaryMesh.C index 11be3c3b86..36e6fe6afd 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointBoundaryMesh/pointBoundaryMesh.C +++ b/src/OpenFOAM/meshes/pointMesh/pointBoundaryMesh/pointBoundaryMesh.C @@ -28,6 +28,9 @@ License #include "polyBoundaryMesh.H" #include "facePointPatch.H" #include "globalPointPatch.H" +#include "PstreamBuffers.H" +#include "lduSchedule.H" +#include "globalMeshData.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -58,14 +61,46 @@ Foam::pointBoundaryMesh::pointBoundaryMesh void Foam::pointBoundaryMesh::calcGeometry() { - forAll(*this, patchi) - { - operator[](patchi).initGeometry(); - } + PstreamBuffers pBufs(Pstream::defaultCommsType); - forAll(*this, patchi) + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - operator[](patchi).calcGeometry(); + forAll(*this, patchi) + { + operator[](patchi).initGeometry(pBufs); + } + + pBufs.finishedSends(); + + forAll(*this, patchi) + { + operator[](patchi).calcGeometry(pBufs); + } + } + else if (Pstream::defaultCommsType == Pstream::scheduled) + { + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initGeometry(pBufs); + } + else + { + operator[](patchi).calcGeometry(pBufs); + } + } } } @@ -97,32 +132,92 @@ Foam::pointBoundaryMesh::globalPatch() const void Foam::pointBoundaryMesh::movePoints(const pointField& p) { - pointPatchList& patches = *this; + PstreamBuffers pBufs(Pstream::defaultCommsType); - forAll(patches, patchi) + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - patches[patchi].initMovePoints(p); + forAll(*this, patchi) + { + operator[](patchi).initMovePoints(pBufs, p); + } + + pBufs.finishedSends(); + + forAll(*this, patchi) + { + operator[](patchi).movePoints(pBufs, p); + } } - - forAll(patches, patchi) + else if (Pstream::defaultCommsType == Pstream::scheduled) { - patches[patchi].movePoints(p); + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initMovePoints(pBufs, p); + } + else + { + operator[](patchi).movePoints(pBufs, p); + } + } } } void Foam::pointBoundaryMesh::updateMesh() { - pointPatchList& patches = *this; + PstreamBuffers pBufs(Pstream::defaultCommsType); - forAll(patches, patchi) + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - patches[patchi].initUpdateMesh(); + forAll(*this, patchi) + { + operator[](patchi).initUpdateMesh(pBufs); + } + + pBufs.finishedSends(); + + forAll(*this, patchi) + { + operator[](patchi).updateMesh(pBufs); + } } - - forAll(patches, patchi) + else if (Pstream::defaultCommsType == Pstream::scheduled) { - patches[patchi].updateMesh(); + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initUpdateMesh(pBufs); + } + else + { + operator[](patchi).updateMesh(pBufs); + } + } } } diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/basic/coupled/coupledPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/basic/coupled/coupledPointPatch.H index 77cbb4162f..79a2f2363c 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/basic/coupled/coupledPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/basic/coupled/coupledPointPatch.H @@ -66,22 +66,22 @@ protected: // Protected Member Functions //- Initialise the calculation of the patch geometry - virtual void initGeometry() = 0; + virtual void initGeometry(PstreamBuffers&) = 0; //- Calculate the patch geometry - virtual void calcGeometry() = 0; + virtual void calcGeometry(PstreamBuffers&) = 0; //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&) = 0; + virtual void initMovePoints(PstreamBuffers&, const pointField&) = 0; //- Correct patches after moving points - virtual void movePoints(const pointField&) = 0; + virtual void movePoints(PstreamBuffers&, const pointField&) = 0; //- Initialise the update of the patch topology - virtual void initUpdateMesh() = 0; + virtual void initUpdateMesh(PstreamBuffers&) = 0; //- Update of the patch topology - virtual void updateMesh() = 0; + virtual void updateMesh(PstreamBuffers&) = 0; public: diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C index 81104d726e..6f65c70764 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.C @@ -50,13 +50,13 @@ addToRunTimeSelectionTable // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // -void Foam::cyclicPointPatch::initGeometry() +void Foam::cyclicPointPatch::initGeometry(PstreamBuffers&) { transformPairs_.setSize(0); } -void Foam::cyclicPointPatch::calcGeometry() +void Foam::cyclicPointPatch::calcGeometry(PstreamBuffers&) { const edgeList& cp = cyclicPolyPatch_.coupledPoints(); const labelList& mp = cyclicPolyPatch_.meshPoints(); @@ -128,16 +128,20 @@ void Foam::cyclicPointPatch::calcGeometry() } else if (pointMap[cp[i][0]] == -1 && pointMap[cp[i][1]] != -1) { - FatalErrorIn("cyclicPointPatch::calcGeometry() const") - << "Point " << cp[i][0] << "of point-pair " << i + FatalErrorIn + ( + "cyclicPointPatch::calcGeometry(PstreamBuffers&) const" + ) << "Point " << cp[i][0] << "of point-pair " << i << " is a global point but the other point " << cp[i][1] << " is not" << exit(FatalError); } else if (pointMap[cp[i][0]] != -1 && pointMap[cp[i][1]] == -1) { - FatalErrorIn("cyclicPointPatch::calcGeometry() const") - << "Point " << cp[i][1] << "of point-pair " << i + FatalErrorIn + ( + "cyclicPointPatch::calcGeometry(PstreamBuffers&) const" + ) << "Point " << cp[i][1] << "of point-pair " << i << " is a global point but the other point " << cp[i][0] << " is not" << exit(FatalError); @@ -149,25 +153,25 @@ void Foam::cyclicPointPatch::calcGeometry() } -void cyclicPointPatch::initMovePoints(const pointField&) +void cyclicPointPatch::initMovePoints(PstreamBuffers&, const pointField&) {} -void cyclicPointPatch::movePoints(const pointField&) +void cyclicPointPatch::movePoints(PstreamBuffers&, const pointField&) {} -void cyclicPointPatch::initUpdateMesh() +void cyclicPointPatch::initUpdateMesh(PstreamBuffers& pBufs) { - facePointPatch::initUpdateMesh(); - cyclicPointPatch::initGeometry(); + facePointPatch::initUpdateMesh(pBufs); + cyclicPointPatch::initGeometry(pBufs); } -void cyclicPointPatch::updateMesh() +void cyclicPointPatch::updateMesh(PstreamBuffers& pBufs) { - facePointPatch::updateMesh(); - cyclicPointPatch::calcGeometry(); + facePointPatch::updateMesh(pBufs); + cyclicPointPatch::calcGeometry(pBufs); } diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H index 999c45613d..1d013f3421 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/cyclic/cyclicPointPatch.H @@ -74,22 +74,22 @@ class cyclicPointPatch edgeList transformPairs_; //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C index eb99350c13..d3aae3ec87 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.C @@ -52,7 +52,7 @@ addToRunTimeSelectionTable // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // -void Foam::processorPointPatch::initGeometry() +void Foam::processorPointPatch::initGeometry(PstreamBuffers& pBufs) { // Algorithm: // Depending on whether the patch is a master or a slave, get the primitive @@ -84,16 +84,16 @@ void Foam::processorPointPatch::initGeometry() if (Pstream::parRun()) { - initPatchPatchPoints(); + initPatchPatchPoints(pBufs); } } -void Foam::processorPointPatch::calcGeometry() +void Foam::processorPointPatch::calcGeometry(PstreamBuffers& pBufs) { if (Pstream::parRun()) { - calcPatchPatchPoints(); + calcPatchPatchPoints(pBufs); } // If it is not runing parallel or there are no global points @@ -149,11 +149,11 @@ void Foam::processorPointPatch::calcGeometry() } -void processorPointPatch::initPatchPatchPoints() +void processorPointPatch::initPatchPatchPoints(PstreamBuffers& pBufs) { if (debug) { - Info<< "processorPointPatch::calcPatchPatchPoints() : " + Info<< "processorPointPatch::initPatchPatchPoints(PstreamBuffers&) : " << "constructing patch-patch points" << endl; } @@ -229,7 +229,7 @@ void processorPointPatch::initPatchPatchPoints() // Send the patchPatchPoints to the neighbouring processor - OPstream toNeighbProc(Pstream::blocking, neighbProcNo()); + UOPstream toNeighbProc(neighbProcNo(), pBufs); toNeighbProc << ppmp.size() // number of points for checking @@ -238,17 +238,17 @@ void processorPointPatch::initPatchPatchPoints() if (debug) { - Info<< "processorPointPatch::calcPatchPatchPoints() : " + Info<< "processorPointPatch::initPatchPatchPoints() : " << "constructed patch-patch points" << endl; } } -void Foam::processorPointPatch::calcPatchPatchPoints() +void Foam::processorPointPatch::calcPatchPatchPoints(PstreamBuffers& pBufs) { // Get the patchPatchPoints from the neighbouring processor - IPstream fromNeighbProc(Pstream::blocking, neighbProcNo()); + UIPstream fromNeighbProc(neighbProcNo(), pBufs); label nbrNPoints(readLabel(fromNeighbProc)); labelListList patchPatchPoints(fromNeighbProc); @@ -265,7 +265,7 @@ void Foam::processorPointPatch::calcPatchPatchPoints() // separate. if (nbrNPoints != ppmp.size()) { - WarningIn("processorPointPatch::calcPatchPatchPoints()") + WarningIn("processorPointPatch::calcPatchPatchPoints(PstreamBuffers&)") << "Processor patch " << name() << " has " << ppmp.size() << " points; coupled patch has " << nbrNPoints << " points." << endl @@ -352,25 +352,25 @@ void Foam::processorPointPatch::calcPatchPatchPoints() } -void processorPointPatch::initMovePoints(const pointField&) +void processorPointPatch::initMovePoints(PstreamBuffers&, const pointField&) {} -void processorPointPatch::movePoints(const pointField&) +void processorPointPatch::movePoints(PstreamBuffers&, const pointField&) {} -void processorPointPatch::initUpdateMesh() +void processorPointPatch::initUpdateMesh(PstreamBuffers& pBufs) { - facePointPatch::initUpdateMesh(); - processorPointPatch::initGeometry(); + facePointPatch::initUpdateMesh(pBufs); + processorPointPatch::initGeometry(pBufs); } -void processorPointPatch::updateMesh() +void processorPointPatch::updateMesh(PstreamBuffers& pBufs) { - facePointPatch::updateMesh(); - processorPointPatch::calcGeometry(); + facePointPatch::updateMesh(pBufs); + processorPointPatch::calcGeometry(pBufs); } diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H index f17a00ca83..373416ac0a 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/constraint/processor/processorPointPatch.H @@ -68,30 +68,30 @@ class processorPointPatch // Private Member Functions //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the points on this patch which are should also be // on a neighbouring patch but are not part of faces of that patch - void initPatchPatchPoints(); + void initPatchPatchPoints(PstreamBuffers&); //- Calculate the points on this patch which are should also be // on a neighbouring patch but are not part of faces of that patch - void calcPatchPatchPoints(); + void calcPatchPatchPoints(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); //- Disallow default construct as copy diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H index dc2437877d..a77af7af30 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/coupled/coupledFacePointPatch.H @@ -86,7 +86,7 @@ protected: // Construction of demand-driven data //- Calculate mesh points - virtual void calcGeometry() = 0; + virtual void calcGeometry(PstreamBuffers&) = 0; public: diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/global/globalPointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/global/globalPointPatch.H index 990ab0de9a..ba89ca950c 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/global/globalPointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/derived/global/globalPointPatch.H @@ -67,27 +67,27 @@ class globalPointPatch // Protected Member Functions //- Initialise the calculation of the patch geometry - virtual void initGeometry() + virtual void initGeometry(PstreamBuffers&) {} //- Calculate the patch geometry - virtual void calcGeometry() + virtual void calcGeometry(PstreamBuffers&) {} //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&) + virtual void initMovePoints(PstreamBuffers&, const pointField&) {} //- Correct patches after moving points - virtual void movePoints(const pointField&) + virtual void movePoints(PstreamBuffers&, const pointField&) {} //- Initialise the update of the patch topology - virtual void initUpdateMesh() + virtual void initUpdateMesh(PstreamBuffers&) {} //- Update of the patch topology - virtual void updateMesh() + virtual void updateMesh(PstreamBuffers&) {} diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.C b/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.C index 25c91dd398..fb15ac4b96 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.C +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.C @@ -51,7 +51,7 @@ addToRunTimeSelectionTable // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // -void facePointPatch::initGeometry() +void facePointPatch::initGeometry(PstreamBuffers&) { meshPoints_.setSize(0); localPoints_.setSize(0); @@ -59,25 +59,25 @@ void facePointPatch::initGeometry() } -void facePointPatch::calcGeometry() +void facePointPatch::calcGeometry(PstreamBuffers&) {} -void facePointPatch::initMovePoints(const pointField&) +void facePointPatch::initMovePoints(PstreamBuffers&, const pointField&) {} -void facePointPatch::movePoints(const pointField&) +void facePointPatch::movePoints(PstreamBuffers&, const pointField&) {} -void facePointPatch::initUpdateMesh() +void facePointPatch::initUpdateMesh(PstreamBuffers& pBufs) { - facePointPatch::initGeometry(); + facePointPatch::initGeometry(pBufs); } -void facePointPatch::updateMesh() +void facePointPatch::updateMesh(PstreamBuffers&) {} diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.H index 7a75b4017f..0094d4ce1a 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/facePointPatch/facePointPatch.H @@ -76,22 +76,22 @@ protected: // Protected Member Functions //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); private: diff --git a/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H b/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H index bdf67c879b..637ac659dd 100644 --- a/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H +++ b/src/OpenFOAM/meshes/pointMesh/pointPatches/pointPatch/pointPatch.H @@ -49,6 +49,7 @@ namespace Foam class pointBoundaryMesh; class pointConstraint; +class PstreamBuffers; /*---------------------------------------------------------------------------*\ Class pointPatch Declaration @@ -79,27 +80,27 @@ protected: friend class pointBoundaryMesh; //- Initialise the calculation of the patch geometry - virtual void initGeometry() + virtual void initGeometry(PstreamBuffers&) {} //- Calculate the patch geometry - virtual void calcGeometry() + virtual void calcGeometry(PstreamBuffers&) {} //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&) + virtual void initMovePoints(PstreamBuffers&, const pointField&) {} //- Correct patches after moving points - virtual void movePoints(const pointField&) + virtual void movePoints(PstreamBuffers&, const pointField&) {} //- Initialise the update of the patch topology - virtual void initUpdateMesh() + virtual void initUpdateMesh(PstreamBuffers&) {} //- Update of the patch topology - virtual void updateMesh() + virtual void updateMesh(PstreamBuffers&) {} diff --git a/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C b/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C index eff7af933c..a111e0435d 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C +++ b/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C @@ -29,6 +29,9 @@ License #include "primitiveMesh.H" #include "processorPolyPatch.H" #include "stringListOps.H" +#include "PstreamBuffers.H" +#include "lduSchedule.H" +#include "globalMeshData.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -144,14 +147,46 @@ void Foam::polyBoundaryMesh::clearAddressing() void Foam::polyBoundaryMesh::calcGeometry() { - forAll(*this, patchi) - { - operator[](patchi).initGeometry(); - } + PstreamBuffers pBufs(Pstream::defaultCommsType); - forAll(*this, patchi) + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - operator[](patchi).calcGeometry(); + forAll(*this, patchi) + { + operator[](patchi).initGeometry(pBufs); + } + + pBufs.finishedSends(); + + forAll(*this, patchi) + { + operator[](patchi).calcGeometry(pBufs); + } + } + else if (Pstream::defaultCommsType == Pstream::scheduled) + { + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initGeometry(pBufs); + } + else + { + operator[](patchi).calcGeometry(pBufs); + } + } } } @@ -573,16 +608,46 @@ bool Foam::polyBoundaryMesh::checkDefinition(const bool report) const void Foam::polyBoundaryMesh::movePoints(const pointField& p) { - polyPatchList& patches = *this; + PstreamBuffers pBufs(Pstream::defaultCommsType); - forAll(patches, patchi) + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - patches[patchi].initMovePoints(p); + forAll(*this, patchi) + { + operator[](patchi).initMovePoints(pBufs, p); + } + + pBufs.finishedSends(); + + forAll(*this, patchi) + { + operator[](patchi).movePoints(pBufs, p); + } } - - forAll(patches, patchi) + else if (Pstream::defaultCommsType == Pstream::scheduled) { - patches[patchi].movePoints(p); + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initMovePoints(pBufs, p); + } + else + { + operator[](patchi).movePoints(pBufs, p); + } + } } } @@ -591,16 +656,46 @@ void Foam::polyBoundaryMesh::updateMesh() { deleteDemandDrivenData(neighbourEdgesPtr_); - polyPatchList& patches = *this; + PstreamBuffers pBufs(Pstream::defaultCommsType); - forAll(patches, patchi) + if + ( + Pstream::defaultCommsType == Pstream::blocking + || Pstream::defaultCommsType == Pstream::nonBlocking + ) { - patches[patchi].initUpdateMesh(); + forAll(*this, patchi) + { + operator[](patchi).initUpdateMesh(pBufs); + } + + pBufs.finishedSends(); + + forAll(*this, patchi) + { + operator[](patchi).updateMesh(pBufs); + } } - - forAll(patches, patchi) + else if (Pstream::defaultCommsType == Pstream::scheduled) { - patches[patchi].updateMesh(); + const lduSchedule& patchSchedule = mesh().globalData().patchSchedule(); + + // Dummy. + pBufs.finishedSends(); + + forAll(patchSchedule, patchEvali) + { + label patchi = patchSchedule[patchEvali].patch; + + if (patchSchedule[patchEvali].init) + { + operator[](patchi).initUpdateMesh(pBufs); + } + else + { + operator[](patchi).updateMesh(pBufs); + } + } } } diff --git a/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.H b/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.H index e3277defcc..fdea473ed3 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.H +++ b/src/OpenFOAM/meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.H @@ -50,8 +50,6 @@ class polyMesh; // Forward declaration of friend functions and operators -class polyBoundaryMesh; - Ostream& operator<<(Ostream&, const polyBoundaryMesh&); diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H index f823148d3a..e1afad60a8 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H @@ -90,22 +90,22 @@ protected: ) const; //- Initialise the calculation of the patch geometry - virtual void initGeometry() = 0; + virtual void initGeometry(PstreamBuffers&) = 0; //- Calculate the patch geometry - virtual void calcGeometry() = 0; + virtual void calcGeometry(PstreamBuffers&) = 0; //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&) = 0; + virtual void initMovePoints(PstreamBuffers&, const pointField&) = 0; //- Correct patches after moving points - virtual void movePoints(const pointField&) = 0; + virtual void movePoints(PstreamBuffers&, const pointField&) = 0; //- Initialise the update of the patch topology - virtual void initUpdateMesh() = 0; + virtual void initUpdateMesh(PstreamBuffers&) = 0; //- Update of the patch topology - virtual void updateMesh() = 0; + virtual void updateMesh(PstreamBuffers&) = 0; //- Write point in OBJ format @@ -283,7 +283,11 @@ public: //- Initialize ordering for primitivePatch. Does not // refer to *this (except for name() and type() etc.) - virtual void initOrder(const primitivePatch&) const = 0; + virtual void initOrder + ( + PstreamBuffers&, + const primitivePatch& + ) const = 0; //- Return new ordering for primitivePatch. // Ordering is -faceMap: for every face @@ -292,6 +296,7 @@ public: // (faceMap is identity, rotation is 0), true otherwise. virtual bool order ( + PstreamBuffers&, const primitivePatch&, labelList& faceMap, labelList& rotation diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C index 8c6b202079..fef6c98ec0 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C @@ -516,7 +516,8 @@ void Foam::cyclicPolyPatch::getCentresAndAnchors // if (debug) // { // Pout<< "cyclicPolyPatch::getCentresAndAnchors :" - // << "Specified translation : " << separationVector_ << endl; + // << "Specified translation : " << separationVector_ + // << endl; // } // // half0Ctrs += separationVector_; @@ -858,36 +859,44 @@ Foam::cyclicPolyPatch::~cyclicPolyPatch() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::cyclicPolyPatch::initGeometry() +void Foam::cyclicPolyPatch::initGeometry(PstreamBuffers& pBufs) { - polyPatch::initGeometry(); + polyPatch::initGeometry(pBufs); } -void Foam::cyclicPolyPatch::calcGeometry() +void Foam::cyclicPolyPatch::calcGeometry(PstreamBuffers& pBufs) { - polyPatch::calcGeometry(); + polyPatch::calcGeometry(pBufs); calcTransforms(); } -void Foam::cyclicPolyPatch::initMovePoints(const pointField& p) +void Foam::cyclicPolyPatch::initMovePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - polyPatch::initMovePoints(p); + polyPatch::initMovePoints(pBufs, p); } -void Foam::cyclicPolyPatch::movePoints(const pointField& p) +void Foam::cyclicPolyPatch::movePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - polyPatch::movePoints(p); + polyPatch::movePoints(pBufs, p); calcTransforms(); } -void Foam::cyclicPolyPatch::initUpdateMesh() +void Foam::cyclicPolyPatch::initUpdateMesh(PstreamBuffers& pBufs) { - polyPatch::initUpdateMesh(); + polyPatch::initUpdateMesh(pBufs); } -void Foam::cyclicPolyPatch::updateMesh() +void Foam::cyclicPolyPatch::updateMesh(PstreamBuffers& pBufs) { - polyPatch::updateMesh(); + polyPatch::updateMesh(pBufs); deleteDemandDrivenData(coupledPointsPtr_); deleteDemandDrivenData(coupledEdgesPtr_); } @@ -1105,7 +1114,11 @@ const Foam::edgeList& Foam::cyclicPolyPatch::coupledEdges() const } -void Foam::cyclicPolyPatch::initOrder(const primitivePatch& pp) const +void Foam::cyclicPolyPatch::initOrder +( + PstreamBuffers&, + const primitivePatch& pp +) const {} @@ -1115,6 +1128,7 @@ void Foam::cyclicPolyPatch::initOrder(const primitivePatch& pp) const // is identity, rotation is 0) bool Foam::cyclicPolyPatch::order ( + PstreamBuffers& pBufs, const primitivePatch& pp, labelList& faceMap, labelList& rotation @@ -1300,7 +1314,8 @@ bool Foam::cyclicPolyPatch::order << endl; // Recalculate untransformed face centres - //pointField rawHalf0Ctrs = calcFaceCentres(half0Faces, pp.points()); + //pointField rawHalf0Ctrs = + // calcFaceCentres(half0Faces, pp.points()); label vertI = 0; forAll(half1Ctrs, i) @@ -1413,7 +1428,8 @@ bool Foam::cyclicPolyPatch::order << endl; // Recalculate untransformed face centres - //pointField rawHalf0Ctrs = calcFaceCentres(half0Faces, pp.points()); + //pointField rawHalf0Ctrs = + // calcFaceCentres(half0Faces, pp.points()); label vertI = 0; forAll(half1Ctrs, i) @@ -1499,7 +1515,8 @@ bool Foam::cyclicPolyPatch::order << endl; // Recalculate untransformed face centres - //pointField rawHalf0Ctrs = calcFaceCentres(half0Faces, pp.points()); + //pointField rawHalf0Ctrs = + // calcFaceCentres(half0Faces, pp.points()); label vertI = 0; forAll(half1Ctrs, i) diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H index ea67348891..4f81975e60 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H @@ -176,22 +176,22 @@ protected: // Protected Member functions //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: @@ -391,7 +391,7 @@ public: //- Initialize ordering for primitivePatch. Does not // refer to *this (except for name() and type() etc.) - virtual void initOrder(const primitivePatch&) const; + virtual void initOrder(PstreamBuffers&, const primitivePatch&) const; //- Return new ordering for primitivePatch. // Ordering is -faceMap: for every face @@ -400,6 +400,7 @@ public: // (faceMap is identity, rotation is 0), true otherwise. virtual bool order ( + PstreamBuffers&, const primitivePatch&, labelList& faceMap, labelList& rotation diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.C index 6e4df9f4e5..05969ee593 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.C @@ -34,6 +34,7 @@ License #include "polyMesh.H" #include "Time.H" #include "transformList.H" +#include "PstreamBuffers.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -155,16 +156,11 @@ Foam::processorPolyPatch::~processorPolyPatch() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::processorPolyPatch::initGeometry() +void Foam::processorPolyPatch::initGeometry(PstreamBuffers& pBufs) { if (Pstream::parRun()) { - OPstream toNeighbProc - ( - Pstream::blocking, - neighbProcNo(), - 3*(sizeof(label) + size()*sizeof(vector) + sizeof(scalar)) - ); + UOPstream toNeighbProc(neighbProcNo(), pBufs); toNeighbProc << faceCentres() @@ -174,17 +170,13 @@ void Foam::processorPolyPatch::initGeometry() } -void Foam::processorPolyPatch::calcGeometry() +void Foam::processorPolyPatch::calcGeometry(PstreamBuffers& pBufs) { if (Pstream::parRun()) { { - IPstream fromNeighbProc - ( - Pstream::blocking, - neighbProcNo(), - 3*(sizeof(label) + size()*sizeof(vector) + sizeof(scalar)) - ); + UIPstream fromNeighbProc(neighbProcNo(), pBufs); + fromNeighbProc >> neighbFaceCentres_ >> neighbFaceAreas_ @@ -251,22 +243,30 @@ void Foam::processorPolyPatch::calcGeometry() } -void Foam::processorPolyPatch::initMovePoints(const pointField& p) +void Foam::processorPolyPatch::initMovePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - polyPatch::movePoints(p); - processorPolyPatch::initGeometry(); + polyPatch::movePoints(pBufs, p); + processorPolyPatch::initGeometry(pBufs); } -void Foam::processorPolyPatch::movePoints(const pointField&) +void Foam::processorPolyPatch::movePoints +( + PstreamBuffers& pBufs, + const pointField& +) { - processorPolyPatch::calcGeometry(); + processorPolyPatch::calcGeometry(pBufs); } -void Foam::processorPolyPatch::initUpdateMesh() +void Foam::processorPolyPatch::initUpdateMesh(PstreamBuffers& pBufs) { - polyPatch::initUpdateMesh(); + polyPatch::initUpdateMesh(pBufs); deleteDemandDrivenData(neighbPointsPtr_); deleteDemandDrivenData(neighbEdgesPtr_); @@ -303,14 +303,7 @@ void Foam::processorPolyPatch::initUpdateMesh() edgeIndex[patchEdgeI] = findIndex(fEdges, patchEdgeI); } - OPstream toNeighbProc - ( - Pstream::blocking, - neighbProcNo(), - 8*sizeof(label) // four headers of labelList - + 2*nPoints()*sizeof(label) // two point-based labellists - + 2*nEdges()*sizeof(label) // two edge-based labelLists - ); + UOPstream toNeighbProc(neighbProcNo(), pBufs); toNeighbProc << pointFace @@ -321,10 +314,10 @@ void Foam::processorPolyPatch::initUpdateMesh() } -void Foam::processorPolyPatch::updateMesh() +void Foam::processorPolyPatch::updateMesh(PstreamBuffers& pBufs) { // For completeness - polyPatch::updateMesh(); + polyPatch::updateMesh(pBufs); if (Pstream::parRun()) { @@ -336,7 +329,7 @@ void Foam::processorPolyPatch::updateMesh() { // Note cannot predict exact size since opposite nPoints might // be different from one over here. - IPstream fromNeighbProc(Pstream::blocking, neighbProcNo()); + UIPstream fromNeighbProc(neighbProcNo(), pBufs); fromNeighbProc >> nbrPointFace @@ -446,7 +439,11 @@ const Foam::labelList& Foam::processorPolyPatch::neighbEdges() const } -void Foam::processorPolyPatch::initOrder(const primitivePatch& pp) const +void Foam::processorPolyPatch::initOrder +( + PstreamBuffers& pBufs, + const primitivePatch& pp +) const { if (!Pstream::parRun()) { @@ -491,7 +488,7 @@ void Foam::processorPolyPatch::initOrder(const primitivePatch& pp) const pointField anchors(getAnchorPoints(pp, pp.points())); // Now send all info over to the neighbour - OPstream toNeighbour(Pstream::blocking, neighbProcNo()); + UOPstream toNeighbour(neighbProcNo(), pBufs); toNeighbour << ctrs << anchors; } } @@ -503,6 +500,7 @@ void Foam::processorPolyPatch::initOrder(const primitivePatch& pp) const // is identity, rotation is 0) bool Foam::processorPolyPatch::order ( + PstreamBuffers& pBufs, const primitivePatch& pp, labelList& faceMap, labelList& rotation @@ -539,7 +537,7 @@ bool Foam::processorPolyPatch::order // Receive data from neighbour { - IPstream fromNeighbour(Pstream::blocking, neighbProcNo()); + UIPstream fromNeighbour(neighbProcNo(), pBufs); fromNeighbour >> masterCtrs >> masterAnchors; } diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.H index a8948fee43..1955892727 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.H @@ -28,11 +28,9 @@ Class Description Neighbour processor patch. - Note: morph patch face ordering comes geometric or topological. - Geometric: no cyclics allowed (assumes faces coincident) - Topological: needs unmodified faces on both sides to correspond. Also - needs at least one per connected patch area (so all patch faces can be - visited from an unmodified face) + Note: morph patch face ordering tries to do a geometric ordering. + (assumes faces coincident) Hence will have problems when cyclics + are present. SourceFiles processorPolyPatch.C @@ -97,22 +95,22 @@ protected: // Protected Member functions //- Initialise the calculation of the patch geometry - void initGeometry(); + void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - void calcGeometry(); + void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - void initMovePoints(const pointField&); + void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - void movePoints(const pointField&); + void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: @@ -283,7 +281,7 @@ public: //- Initialize ordering for primitivePatch. Does not // refer to *this (except for name() and type() etc.) - virtual void initOrder(const primitivePatch&) const; + virtual void initOrder(PstreamBuffers&, const primitivePatch&) const; //- Return new ordering for primitivePatch. // Ordering is -faceMap: for every face @@ -292,6 +290,7 @@ public: // (faceMap is identity, rotation is 0), true otherwise. virtual bool order ( + PstreamBuffers&, const primitivePatch&, labelList& faceMap, labelList& rotation diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.C index be0aa378a6..0a6bde6b4f 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.C @@ -55,12 +55,12 @@ namespace Foam // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -void Foam::polyPatch::movePoints(const pointField& p) +void Foam::polyPatch::movePoints(PstreamBuffers&, const pointField& p) { primitivePatch::movePoints(p); } -void Foam::polyPatch::updateMesh() +void Foam::polyPatch::updateMesh(PstreamBuffers&) { clearAddressing(); } @@ -334,12 +334,13 @@ void Foam::polyPatch::write(Ostream& os) const } -void Foam::polyPatch::initOrder(const primitivePatch&) const +void Foam::polyPatch::initOrder(PstreamBuffers&, const primitivePatch&) const {} bool Foam::polyPatch::order ( + PstreamBuffers&, const primitivePatch&, labelList& faceMap, labelList& rotation diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.H index f8c8fa72e7..5694e53823 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/polyPatch/polyPatch.H @@ -56,6 +56,7 @@ namespace Foam class polyBoundaryMesh; class polyPatch; +class PstreamBuffers; Ostream& operator<<(Ostream&, const polyPatch&); @@ -101,26 +102,26 @@ protected: friend class polyBoundaryMesh; //- Initialise the calculation of the patch geometry - virtual void initGeometry() + virtual void initGeometry(PstreamBuffers&) {} //- Calculate the patch geometry - virtual void calcGeometry() + virtual void calcGeometry(PstreamBuffers&) {} //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&) + virtual void initMovePoints(PstreamBuffers&, const pointField&) {} //- Correct patches after moving points - virtual void movePoints(const pointField& p); + virtual void movePoints(PstreamBuffers&, const pointField& p); //- Initialise the update of the patch topology - virtual void initUpdateMesh() + virtual void initUpdateMesh(PstreamBuffers&) {} //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: @@ -358,7 +359,7 @@ public: //- Initialize ordering for primitivePatch. Does not // refer to *this (except for name() and type() etc.) - virtual void initOrder(const primitivePatch&) const; + virtual void initOrder(PstreamBuffers&, const primitivePatch&) const; //- Return new ordering for primitivePatch. // Ordering is -faceMap: for every face @@ -367,6 +368,7 @@ public: // (faceMap is identity, rotation is 0), true otherwise. virtual bool order ( + PstreamBuffers&, const primitivePatch&, labelList& faceMap, labelList& rotation diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C index fc405b2d0e..d3f1cfe797 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C @@ -1844,6 +1844,8 @@ void Foam::polyTopoChange::reorderCoupledFaces // Rotation on new faces. labelList rotation(faces_.size(), 0); + PstreamBuffers pBufs(Pstream::nonBlocking); + // Send ordering forAll(boundary, patchI) { @@ -1851,6 +1853,7 @@ void Foam::polyTopoChange::reorderCoupledFaces { boundary[patchI].initOrder ( + pBufs, primitivePatch ( SubList @@ -1865,6 +1868,8 @@ void Foam::polyTopoChange::reorderCoupledFaces } } + pBufs.finishedSends(); + // Receive and calculate ordering bool anyChanged = false; @@ -1878,6 +1883,7 @@ void Foam::polyTopoChange::reorderCoupledFaces bool changed = boundary[patchI].order ( + pBufs, primitivePatch ( SubList diff --git a/src/fvMotionSolver/pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C index e7014038ee..1b6a9e6d5a 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C +++ b/src/fvMotionSolver/pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C @@ -100,7 +100,7 @@ angularOscillatingDisplacementPointPatchVectorField angle0_(ptf.angle0_), amplitude_(ptf.amplitude_), omega_(ptf.omega_), - p0_(ptf.p0_) + p0_(ptf.p0_, mapper) {} diff --git a/src/fvMotionSolver/pointPatchFields/derived/oscillatingVelocity/oscillatingVelocityPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/oscillatingVelocity/oscillatingVelocityPointPatchVectorField.C index dbd769c557..412c9561a2 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/oscillatingVelocity/oscillatingVelocityPointPatchVectorField.C +++ b/src/fvMotionSolver/pointPatchFields/derived/oscillatingVelocity/oscillatingVelocityPointPatchVectorField.C @@ -91,7 +91,7 @@ oscillatingVelocityPointPatchVectorField fixedValuePointPatchField(ptf, p, iF, mapper), amplitude_(ptf.amplitude_), omega_(ptf.omega_), - p0_(ptf.p0_) + p0_(ptf.p0_, mapper) {} diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C index db0ff59bfe..8fb0408e67 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C +++ b/src/fvMotionSolver/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C @@ -93,7 +93,7 @@ sixDoFRigidBodyDisplacementPointPatchVectorField : fixedValuePointPatchField(ptf, p, iF, mapper), motion_(ptf.motion_), - p0_(ptf.p0_), + p0_(ptf.p0_, mapper), rhoInf_(ptf.rhoInf_) {} diff --git a/src/lagrangian/basic/Cloud/Cloud.C b/src/lagrangian/basic/Cloud/Cloud.C index 5ffa5ecdc7..91e095a94a 100644 --- a/src/lagrangian/basic/Cloud/Cloud.C +++ b/src/lagrangian/basic/Cloud/Cloud.C @@ -105,20 +105,15 @@ void Foam::Cloud::move(TrackingData& td) const globalMeshData& pData = polyMesh_.globalData(); const labelList& processorPatches = pData.processorPatches(); const labelList& processorPatchIndices = pData.processorPatchIndices(); - const labelList& processorPatchNeighbours = - pData.processorPatchNeighbours(); - // Initialise the setpFraction moved for the particles + // Initialise the stepFraction moved for the particles forAllIter(typename Cloud, *this, pIter) { pIter().stepFraction() = 0; } - // Assume there will be particles to transfer - bool transfered = true; - // While there are particles to transfer - while (transfered) + while (true) { // List of lists of particles to be transfered for all the processor // patches @@ -158,104 +153,93 @@ void Foam::Cloud::move(TrackingData& td) } } - if (Pstream::parRun()) + if (!Pstream::parRun()) { - // List of the numbers of particles to be transfered across the - // processor patches - labelList nsTransPs(transferList.size()); + break; + } - forAll(transferList, i) + + // Allocate transfer buffers + PstreamBuffers pBufs(Pstream::nonBlocking); + + // Stream into send buffers + forAll(transferList, i) + { + if (transferList[i].size()) { - nsTransPs[i] = transferList[i].size(); - } - - // List of the numbers of particles to be transfered across the - // processor patches for all the processors - labelListList allNTrans(Pstream::nProcs()); - allNTrans[Pstream::myProcNo()] = nsTransPs; - combineReduce(allNTrans, UPstream::listEq()); - - transfered = false; - - forAll(allNTrans, i) - { - forAll(allNTrans[i], j) - { - if (allNTrans[i][j]) - { - transfered = true; - break; - } - } - } - - if (!transfered) - { - break; - } - - forAll(transferList, i) - { - if (transferList[i].size()) - { - OPstream particleStream - ( - Pstream::blocking, - refCast - ( - pMesh().boundaryMesh()[processorPatches[i]] - ).neighbProcNo() - ); - - particleStream << transferList[i]; - } - } - - forAll(processorPatches, i) - { - label patchi = processorPatches[i]; - - const processorPolyPatch& procPatch = + UOPstream particleStream + ( refCast - (pMesh().boundaryMesh()[patchi]); + ( + pMesh().boundaryMesh()[processorPatches[i]] + ).neighbProcNo(), + pBufs + ); - label neighbProci = - procPatch.neighbProcNo() - Pstream::masterNo(); + particleStream << transferList[i]; + } + } - label neighbProcPatchi = processorPatchNeighbours[patchi]; + // Set up transfers when in non-blocking mode. Returns sizes (in bytes) + // to be sent/received. + labelListList allNTrans(Pstream::nProcs()); + pBufs.finishedSends(allNTrans); - label nRecPs = allNTrans[neighbProci][neighbProcPatchi]; + bool transfered = false; - if (nRecPs) + forAll(allNTrans, i) + { + forAll(allNTrans[i], j) + { + if (allNTrans[i][j]) { - IPstream particleStream - ( - Pstream::blocking, - procPatch.neighbProcNo() - ); - IDLList newParticles - ( - particleStream, - typename ParticleType::iNew(*this) - ); - - forAllIter - ( - typename Cloud, - newParticles, - newpIter - ) - { - ParticleType& newp = newpIter(); - newp.correctAfterParallelTransfer(patchi, td); - addParticle(newParticles.remove(&newp)); - } + transfered = true; + break; } } } - else + + if (!transfered) { - transfered = false; + break; + } + + + // Retrieve from receive buffers + forAll(processorPatches, i) + { + label patchi = processorPatches[i]; + + const processorPolyPatch& procPatch = + refCast + (pMesh().boundaryMesh()[patchi]); + + label neighbProci = procPatch.neighbProcNo(); + + label nRecPs = allNTrans[neighbProci][Pstream::myProcNo()]; + + if (nRecPs) + { + UIPstream particleStream(neighbProci, pBufs); + + IDLList newParticles + ( + particleStream, + typename ParticleType::iNew(*this) + ); + + forAllIter + ( + typename Cloud, + newParticles, + newpIter + ) + { + ParticleType& newp = newpIter(); + newp.correctAfterParallelTransfer(patchi, td); + addParticle(newParticles.remove(&newp)); + } + } } } } diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C index 88f806b5dd..307cb743f8 100644 --- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C +++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C @@ -2411,6 +2411,9 @@ Foam::autoPtr Foam::meshRefinement::zonify } syncTools::swapBoundaryFaceList(mesh_, neiCellZone, false); + // Get per face whether is it master (of a coupled set of faces) + PackedBoolList isMasterFace(syncTools::getMasterFaces(mesh_)); + // Set owner as no-flip forAll(patches, patchI) { @@ -2428,14 +2431,27 @@ Foam::autoPtr Foam::meshRefinement::zonify label neiZone = neiCellZone[faceI-mesh_.nInternalFaces()]; bool flip; - if (ownZone == max(ownZone, neiZone)) + + label maxZone = max(ownZone, neiZone); + + if (maxZone == -1) { flip = false; } - else + else if (ownZone == neiZone) + { + // Can only happen for coupled boundaries. Keep master + // face unflipped. + flip = !isMasterFace[faceI]; + } + else if (neiZone == maxZone) { flip = true; } + else + { + flip = false; + } meshMod.setAction ( diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.C b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.C index e16b8204f7..0da6068681 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.C +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.C @@ -145,44 +145,49 @@ Foam::directMappedPolyPatch::~directMappedPolyPatch() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // //- Initialise the calculation of the patch geometry -void Foam::directMappedPolyPatch::initGeometry() +void Foam::directMappedPolyPatch::initGeometry(PstreamBuffers& pBufs) { - polyPatch::initGeometry(); - directMappedPatchBase::clearOut(); + polyPatch::initGeometry(pBufs); } //- Calculate the patch geometry -void Foam::directMappedPolyPatch::calcGeometry() +void Foam::directMappedPolyPatch::calcGeometry(PstreamBuffers& pBufs) { - polyPatch::calcGeometry(); + polyPatch::calcGeometry(pBufs); directMappedPatchBase::clearOut(); } //- Initialise the patches for moving points -void Foam::directMappedPolyPatch::initMovePoints(const pointField& p) +void Foam::directMappedPolyPatch::initMovePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - polyPatch::initMovePoints(p); - directMappedPatchBase::clearOut(); + polyPatch::initMovePoints(pBufs, p); } //- Correct patches after moving points -void Foam::directMappedPolyPatch::movePoints(const pointField& p) +void Foam::directMappedPolyPatch::movePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - polyPatch::movePoints(p); + polyPatch::movePoints(pBufs, p); directMappedPatchBase::clearOut(); } //- Initialise the update of the patch topology -void Foam::directMappedPolyPatch::initUpdateMesh() +void Foam::directMappedPolyPatch::initUpdateMesh(PstreamBuffers& pBufs) { - polyPatch::initUpdateMesh(); - directMappedPatchBase::clearOut(); + polyPatch::initUpdateMesh(pBufs); } //- Update of the patch topology -void Foam::directMappedPolyPatch::updateMesh() +void Foam::directMappedPolyPatch::updateMesh(PstreamBuffers& pBufs) { - polyPatch::updateMesh(); + polyPatch::updateMesh(pBufs); directMappedPatchBase::clearOut(); } diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H index 8cb5907c95..654c3470a4 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedPolyPatch.H @@ -65,22 +65,22 @@ class directMappedPolyPatch protected: //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.C b/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.C index 6d6038430d..c4295a31a4 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.C +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.C @@ -150,44 +150,49 @@ Foam::directMappedWallPolyPatch::~directMappedWallPolyPatch() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // //- Initialise the calculation of the patch geometry -void Foam::directMappedWallPolyPatch::initGeometry() +void Foam::directMappedWallPolyPatch::initGeometry(PstreamBuffers& pBufs) { - wallPolyPatch::initGeometry(); - directMappedPatchBase::clearOut(); + wallPolyPatch::initGeometry(pBufs); } //- Calculate the patch geometry -void Foam::directMappedWallPolyPatch::calcGeometry() +void Foam::directMappedWallPolyPatch::calcGeometry(PstreamBuffers& pBufs) { - wallPolyPatch::calcGeometry(); + wallPolyPatch::calcGeometry(pBufs); directMappedPatchBase::clearOut(); } //- Initialise the patches for moving points -void Foam::directMappedWallPolyPatch::initMovePoints(const pointField& p) +void Foam::directMappedWallPolyPatch::initMovePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - wallPolyPatch::initMovePoints(p); - directMappedPatchBase::clearOut(); + wallPolyPatch::initMovePoints(pBufs, p); } //- Correct patches after moving points -void Foam::directMappedWallPolyPatch::movePoints(const pointField& p) +void Foam::directMappedWallPolyPatch::movePoints +( + PstreamBuffers& pBufs, + const pointField& p +) { - wallPolyPatch::movePoints(p); + wallPolyPatch::movePoints(pBufs, p); directMappedPatchBase::clearOut(); } //- Initialise the update of the patch topology -void Foam::directMappedWallPolyPatch::initUpdateMesh() +void Foam::directMappedWallPolyPatch::initUpdateMesh(PstreamBuffers& pBufs) { - wallPolyPatch::initUpdateMesh(); - directMappedPatchBase::clearOut(); + wallPolyPatch::initUpdateMesh(pBufs); } //- Update of the patch topology -void Foam::directMappedWallPolyPatch::updateMesh() +void Foam::directMappedWallPolyPatch::updateMesh(PstreamBuffers& pBufs) { - wallPolyPatch::updateMesh(); + wallPolyPatch::updateMesh(pBufs); directMappedPatchBase::clearOut(); } diff --git a/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H b/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H index 0a2f5bdfd3..b0657164da 100644 --- a/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H +++ b/src/meshTools/directMapped/directMappedPolyPatch/directMappedWallPolyPatch.H @@ -65,22 +65,22 @@ class directMappedWallPolyPatch protected: //- Initialise the calculation of the patch geometry - virtual void initGeometry(); + virtual void initGeometry(PstreamBuffers&); //- Calculate the patch geometry - virtual void calcGeometry(); + virtual void calcGeometry(PstreamBuffers&); //- Initialise the patches for moving points - virtual void initMovePoints(const pointField&); + virtual void initMovePoints(PstreamBuffers&, const pointField&); //- Correct patches after moving points - virtual void movePoints(const pointField&); + virtual void movePoints(PstreamBuffers&, const pointField&); //- Initialise the update of the patch topology - virtual void initUpdateMesh(); + virtual void initUpdateMesh(PstreamBuffers&); //- Update of the patch topology - virtual void updateMesh(); + virtual void updateMesh(PstreamBuffers&); public: diff --git a/src/sampling/cuttingPlane/cuttingPlane.C b/src/sampling/cuttingPlane/cuttingPlane.C index 09585ec5e7..80a4e72bd5 100644 --- a/src/sampling/cuttingPlane/cuttingPlane.C +++ b/src/sampling/cuttingPlane/cuttingPlane.C @@ -258,6 +258,7 @@ bool Foam::cuttingPlane::walkCell void Foam::cuttingPlane::walkCellCuts ( const primitiveMesh& mesh, + const bool triangulate, const UList