diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshDataTopology.C b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshDataTopology.C index 3a26d28681ff3bc6b338311d4abb44f0aafcc5e6..edb79ea7df8bd600babf21ed58b3cee56df973b6 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshDataTopology.C +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalMeshDataTopology.C @@ -84,7 +84,10 @@ static void calcCellCellsImpl globalNeighbour[bfacei] = val; } } - syncTools::swapBoundaryFaceList(mesh, globalNeighbour); + + // Swap boundary neighbour information: + // - cyclics and (optionally) processor + syncTools::swapBoundaryFaceList(mesh, globalNeighbour, parallel); // Count number of faces (internal + coupled) diff --git a/src/OpenFOAM/meshes/polyMesh/syncTools/syncTools.C b/src/OpenFOAM/meshes/polyMesh/syncTools/syncTools.C index c4e0c9fef5e91b03f01732a9d75c676f1be6d265..2f1f1c85de710339a1d239d49e9cc0c4066ab75f 100644 --- a/src/OpenFOAM/meshes/polyMesh/syncTools/syncTools.C +++ b/src/OpenFOAM/meshes/polyMesh/syncTools/syncTools.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2018 OpenCFD Ltd. + Copyright (C) 2018-2024 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -34,34 +34,34 @@ void Foam::syncTools::swapBoundaryCellPositions ( const polyMesh& mesh, const UList<point>& cellData, - List<point>& neighbourCellData + List<point>& neighbourCellData, + const bool parRun ) { if (cellData.size() != mesh.nCells()) { FatalErrorInFunction - << "Number of cell values " << cellData.size() - << " is not equal to the number of cells in the mesh " - << mesh.nCells() << abort(FatalError); + << "Number of values " << cellData.size() + << " != number of cells " << mesh.nCells() << nl + << abort(FatalError); } - const polyBoundaryMesh& patches = mesh.boundaryMesh(); - neighbourCellData.resize(mesh.nBoundaryFaces()); - for (const polyPatch& pp : patches) + for (const polyPatch& pp : mesh.boundaryMesh()) { - label bFacei = pp.start()-mesh.nInternalFaces(); - - const labelUList& faceCells = pp.faceCells(); - - for (const label celli : faceCells) - { - neighbourCellData[bFacei] = cellData[celli]; - ++bFacei; - } + const auto& faceCells = pp.faceCells(); + + // ie, boundarySlice() = patchInternalList() + SubList<point> + ( + neighbourCellData, + faceCells.size(), + pp.offset() + ) = UIndirectList<point>(cellData, faceCells); } - syncTools::swapBoundaryFacePositions(mesh, neighbourCellData); + + syncTools::swapBoundaryFacePositions(mesh, neighbourCellData, parRun); } @@ -127,9 +127,7 @@ Foam::bitSet Foam::syncTools::getMasterFaces(const polyMesh& mesh) { bitSet isMaster(mesh.nFaces(), true); - const polyBoundaryMesh& patches = mesh.boundaryMesh(); - - for (const polyPatch& pp : patches) + for (const polyPatch& pp : mesh.boundaryMesh()) { if (pp.coupled()) { @@ -151,9 +149,7 @@ Foam::bitSet Foam::syncTools::getInternalOrMasterFaces { bitSet isMaster(mesh.nFaces(), true); - const polyBoundaryMesh& patches = mesh.boundaryMesh(); - - for (const polyPatch& pp : patches) + for (const polyPatch& pp : mesh.boundaryMesh()) { if (pp.coupled()) { @@ -179,9 +175,7 @@ Foam::bitSet Foam::syncTools::getInternalOrCoupledFaces { bitSet isMaster(mesh.nFaces(), true); - const polyBoundaryMesh& patches = mesh.boundaryMesh(); - - for (const polyPatch& pp : patches) + for (const polyPatch& pp : mesh.boundaryMesh()) { if (!pp.coupled()) { diff --git a/src/OpenFOAM/meshes/polyMesh/syncTools/syncTools.H b/src/OpenFOAM/meshes/polyMesh/syncTools/syncTools.H index 43b5fb8af41acc4ca5415a804c0b0f2a4a128a9b..a1076aa6f5dc46aee76d5fcb0e756d0bed2925e8 100644 --- a/src/OpenFOAM/meshes/polyMesh/syncTools/syncTools.H +++ b/src/OpenFOAM/meshes/polyMesh/syncTools/syncTools.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2015-2021 OpenCFD Ltd. + Copyright (C) 2015-2024 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -69,6 +69,7 @@ class syncTools // Private Member Functions //- Combine val with existing value in pointValues map at given index + // No communication template<class T, class CombineOp> static void combine ( @@ -79,6 +80,7 @@ class syncTools ); //- Combine val with existing value in edgeValues at edge index + // No communication template<class T, class CombineOp> static void combine ( @@ -95,6 +97,7 @@ public: // Preferably use specialisations below. //- Synchronize values on selected points. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp, class TransformOp> static void syncPointMap ( @@ -105,6 +108,7 @@ public: ); //- Synchronize values on selected edges. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp, class TransformOp> static void syncEdgeMap ( @@ -115,6 +119,7 @@ public: ); //- Synchronize values on all mesh points. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp, class TransformOp> static void syncPointList ( @@ -126,6 +131,7 @@ public: ); //- Synchronize values on selected mesh points. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp, class TransformOp> static void syncPointList ( @@ -138,6 +144,7 @@ public: ); //- Synchronize values on all mesh edges. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp, class TransformOp, class FlipOp> static void syncEdgeList ( @@ -150,11 +157,12 @@ public: ); //- Synchronize values on selected mesh edges. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp, class TransformOp, class FlipOp> static void syncEdgeList ( const polyMesh& mesh, - const labelList& meshEdges, + const labelUList& meshEdges, List<T>& edgeValues, const CombineOp& cop, const T& nullValue, @@ -170,6 +178,7 @@ public: UList<T>& faceValues, const CombineOp& cop, const TransformOp& top, + //! Allow parallel communication const bool parRun = UPstream::parRun() ); @@ -177,6 +186,7 @@ public: // Synchronise point-wise data //- Synchronize values on all mesh points. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp> static void syncPointList ( @@ -197,6 +207,7 @@ public: } //- Synchronize locations on all mesh points. + // Communication if UPstream::parRun() == true. template<class CombineOp> static void syncPointPositions ( @@ -217,11 +228,12 @@ public: } //- Synchronize values on selected mesh points. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp> static void syncPointList ( const polyMesh& mesh, - const labelList& meshPoints, + const labelUList& meshPoints, List<T>& pointValues, const CombineOp& cop, const T& nullValue @@ -239,11 +251,12 @@ public: } //- Synchronize locations on selected mesh points. + // Communication if UPstream::parRun() == true. template<class CombineOp> static void syncPointPositions ( const polyMesh& mesh, - const labelList& meshPoints, + const labelUList& meshPoints, List<point>& positions, const CombineOp& cop, const point& nullValue @@ -264,6 +277,7 @@ public: // Synchronise edge-wise data //- Synchronize values on all mesh edges. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp> static void syncEdgeList ( @@ -285,6 +299,7 @@ public: } //- Synchronize locations on all mesh edges. + // Communication if UPstream::parRun() == true. template<class CombineOp> static void syncEdgePositions ( @@ -306,11 +321,12 @@ public: } //- Synchronize values on selected mesh edges. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp> static void syncEdgeList ( const polyMesh& mesh, - const labelList& meshEdges, + const labelUList& meshEdges, List<T>& edgeValues, const CombineOp& cop, const T& nullValue @@ -329,11 +345,12 @@ public: } //- Synchronize locations on selected mesh edges. + // Communication if UPstream::parRun() == true. template<class CombineOp> static void syncEdgePositions ( const polyMesh& mesh, - const labelList& meshEdges, + const labelUList& meshEdges, List<point>& positions, const CombineOp& cop, const point& nullValue @@ -397,7 +414,9 @@ public: ( const polyMesh& mesh, UList<T>& faceValues, - const CombineOp& cop + const CombineOp& cop, + //! Allow parallel communication + const bool parRun = UPstream::parRun() ) { SubList<T> bndValues @@ -412,7 +431,8 @@ public: mesh, bndValues, cop, - mapDistribute::transform() + mapDistribute::transform(), + parRun ); } @@ -422,7 +442,9 @@ public: ( const polyMesh& mesh, UList<point>& positions, - const CombineOp& cop + const CombineOp& cop, + //! Allow parallel communication + const bool parRun = UPstream::parRun() ) { SubList<point> bndValues @@ -436,7 +458,8 @@ public: mesh, bndValues, cop, - mapDistribute::transformPosition() + mapDistribute::transformPosition(), + parRun ); } @@ -445,7 +468,9 @@ public: static void swapBoundaryFaceList ( const polyMesh& mesh, - UList<T>& faceValues + UList<T>& faceValues, + //! Allow parallel communication + const bool parRun = UPstream::parRun() ) { syncBoundaryFaceList @@ -453,7 +478,8 @@ public: mesh, faceValues, eqOp<T>(), - mapDistribute::transform() + mapDistribute::transform(), + parRun ); } @@ -461,7 +487,9 @@ public: static void swapBoundaryFacePositions ( const polyMesh& mesh, - UList<point>& positions + UList<point>& positions, + //! Allow parallel communication + const bool parRun = UPstream::parRun() ) { syncBoundaryFaceList @@ -469,7 +497,8 @@ public: mesh, positions, eqOp<point>(), - mapDistribute::transformPosition() + mapDistribute::transformPosition(), + parRun ); } @@ -478,7 +507,9 @@ public: static void swapFaceList ( const polyMesh& mesh, - UList<T>& faceValues + UList<T>& faceValues, + //! Allow parallel communication + const bool parRun = UPstream::parRun() ) { SubList<T> bndValues @@ -492,31 +523,71 @@ public: mesh, bndValues, eqOp<T>(), - mapDistribute::transform() + mapDistribute::transform(), + parRun ); } - //- Swap to obtain neighbour cell values for all boundary faces + //- Extract and swap to obtain neighbour cell values + //- for all boundary faces template<class T> static void swapBoundaryCellList ( const polyMesh& mesh, const UList<T>& cellData, - List<T>& neighbourCellData + List<T>& neighbourCellData, + //! Allow parallel communication + const bool parRun = UPstream::parRun() ); - //- Swap to obtain neighbour cell positions for all boundary faces + //- Extract and swap to obtain neighbour cell positions + //- for all boundary faces static void swapBoundaryCellPositions ( const polyMesh& mesh, const UList<point>& cellData, - List<point>& neighbourCellData + List<point>& neighbourCellData, + //! Allow parallel communication + const bool parRun = UPstream::parRun() ); + //- Return neighbour cell values for all boundary faces + //- by swapping via boundary faces + template<class T> + static List<T> swapBoundaryCellList + ( + const polyMesh& mesh, + const UList<T>& cellData, + //! Allow parallel communication + const bool parRun = UPstream::parRun() + ) FOAM_NODISCARD + { + List<T> nbrCellData; + swapBoundaryCellList(mesh, cellData, nbrCellData, parRun); + return nbrCellData; + } + + //- Return neighbour cell positions for all boundary faces + //- by swapping via boundary faces + static List<point> swapBoundaryCellPositions + ( + const polyMesh& mesh, + const UList<point>& cellData, + //! Allow parallel communication + const bool parRun = UPstream::parRun() + ) FOAM_NODISCARD + { + List<point> nbrCellData; + swapBoundaryCellPositions(mesh, cellData, nbrCellData, parRun); + return nbrCellData; + } + + // Sparse versions //- Synchronize values on selected points. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp> static void syncPointMap ( @@ -535,6 +606,7 @@ public: } //- Synchronize locations on selected points. + // Communication if UPstream::parRun() == true. template<class CombineOp> static void syncPointPositions ( @@ -552,9 +624,10 @@ public: ); } - //- Synchronize values on selected edges. Edges are represented - // by the two vertices that make it up so global edges never get - // constructed. + //- Synchronize values on selected edges. + //- Edges are represented by the two vertices that make it up + //- so global edges never get constructed. + // Communication if UPstream::parRun() == true. template<class T, class CombineOp> static void syncEdgeMap ( @@ -573,6 +646,7 @@ public: } //- Synchronize locations on selected edges. + // Communication if UPstream::parRun() == true. template<class CombineOp> static void syncEdgePositions ( @@ -601,7 +675,7 @@ public: // offset when accessing values. // \param faceValues The face values to synchronize // \param cop The combine operation - // \param parRun True if this is a parallel simulation + // \param parRun Allow parallel communication template<unsigned Width, class CombineOp> static void syncFaceList ( @@ -619,6 +693,7 @@ public: const polyMesh& mesh, PackedList<Width>& faceValues, const CombineOp& cop, + //! Allow parallel communication const bool parRun = UPstream::parRun() ); @@ -629,6 +704,7 @@ public: const polyMesh& mesh, PackedList<Width>& faceValues, const CombineOp& cop, + //! Allow parallel communication const bool parRun = UPstream::parRun() ); @@ -637,7 +713,9 @@ public: static void swapFaceList ( const polyMesh& mesh, - PackedList<Width>& faceValues + PackedList<Width>& faceValues, + //! Allow parallel communication + const bool parRun = UPstream::parRun() ); //- Swap coupled boundary face values. Uses eqOp @@ -645,7 +723,9 @@ public: static void swapBoundaryFaceList ( const polyMesh& mesh, - PackedList<Width>& faceValues + PackedList<Width>& faceValues, + //! Allow parallel communication + const bool parRun = UPstream::parRun() ); template<unsigned Width, class CombineOp> diff --git a/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C b/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C index 457a9daff662b30669e4890a9d9f19281effa982..21b4030d2277b8b6cced828e1523e1bd2ae6e13e 100644 --- a/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C +++ b/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C @@ -79,6 +79,8 @@ void Foam::syncTools::combine } +// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // + template<class T, class CombineOp, class TransformOp> void Foam::syncTools::syncPointMap ( @@ -488,7 +490,7 @@ void Foam::syncTools::syncEdgeMap forAllConstIters(nbrPatchInfo, nbrIter) { const edge& e = nbrIter.key(); - const edge meshEdge(meshPts[e[0]], meshPts[e[1]]); + const edge meshEdge(meshPts, e); combine ( @@ -535,7 +537,7 @@ void Foam::syncTools::syncEdgeMap { const edge& e0 = edgesA[twoEdges[0]]; - const edge meshEdge0(meshPtsA[e0[0]], meshPtsA[e0[1]]); + const edge meshEdge0(meshPtsA, e0); const auto iter = edgeValues.cfind(meshEdge0); @@ -546,7 +548,7 @@ void Foam::syncTools::syncEdgeMap } { const edge& e1 = edgesB[twoEdges[1]]; - const edge meshEdge1(meshPtsB[e1[0]], meshPtsB[e1[1]]); + const edge meshEdge1(meshPtsB, e1); const auto iter = edgeValues.cfind(meshEdge1); @@ -573,7 +575,7 @@ void Foam::syncTools::syncEdgeMap if (half1Fnd.good()) { const edge& e0 = edgesA[twoEdges[0]]; - const edge meshEdge0(meshPtsA[e0[0]], meshPtsA[e0[1]]); + const edge meshEdge0(meshPtsA, e0); combine ( @@ -589,7 +591,7 @@ void Foam::syncTools::syncEdgeMap if (half0Fnd.good()) { const edge& e1 = edgesB[twoEdges[1]]; - const edge meshEdge1(meshPtsB[e1[0]], meshPtsB[e1[1]]); + const edge meshEdge1(meshPtsB, e1); combine ( @@ -749,8 +751,8 @@ void Foam::syncTools::syncPointList { FatalErrorInFunction << "Number of values " << pointValues.size() - << " is not equal to the number of points in the mesh " - << mesh.nPoints() << abort(FatalError); + << " != number of points " << mesh.nPoints() << nl + << abort(FatalError); } mesh.globalData().syncPointData(pointValues, cop, top); @@ -772,8 +774,8 @@ void Foam::syncTools::syncPointList { FatalErrorInFunction << "Number of values " << pointValues.size() - << " is not equal to the number of meshPoints " - << meshPoints.size() << abort(FatalError); + << " != number of meshPoints " << meshPoints.size() << nl + << abort(FatalError); } const globalMeshData& gd = mesh.globalData(); const indirectPrimitivePatch& cpp = gd.coupledPatch(); @@ -829,8 +831,8 @@ void Foam::syncTools::syncEdgeList { FatalErrorInFunction << "Number of values " << edgeValues.size() - << " is not equal to the number of edges in the mesh " - << mesh.nEdges() << abort(FatalError); + << " != number of edges " << mesh.nEdges() << nl + << abort(FatalError); } const edgeList& edges = mesh.edges(); @@ -915,7 +917,7 @@ template<class T, class CombineOp, class TransformOp, class FlipOp> void Foam::syncTools::syncEdgeList ( const polyMesh& mesh, - const labelList& meshEdges, + const labelUList& meshEdges, List<T>& edgeValues, const CombineOp& cop, const T& nullValue, @@ -927,8 +929,8 @@ void Foam::syncTools::syncEdgeList { FatalErrorInFunction << "Number of values " << edgeValues.size() - << " is not equal to the number of meshEdges " - << meshEdges.size() << abort(FatalError); + << " != number of meshEdges " << meshEdges.size() << nl + << abort(FatalError); } const edgeList& edges = mesh.edges(); const globalMeshData& gd = mesh.globalData(); @@ -946,7 +948,7 @@ void Foam::syncTools::syncEdgeList const auto iter = mpm.cfind(meshEdgei); if (iter.good()) { - const label cppEdgei = iter(); + const label cppEdgei = iter.val(); const edge& cppE = cppEdges[cppEdgei]; const edge& meshE = edges[meshEdgei]; @@ -992,7 +994,7 @@ void Foam::syncTools::syncEdgeList const auto iter = mpm.cfind(meshEdgei); if (iter.good()) { - label cppEdgei = iter(); + label cppEdgei = iter.val(); const edge& cppE = cppEdges[cppEdgei]; const edge& meshE = edges[meshEdgei]; @@ -1029,14 +1031,13 @@ void Foam::syncTools::syncBoundaryFaceList { FatalErrorInFunction << "Number of values " << faceValues.size() - << " is not equal to the number of boundary faces in the mesh " - << mesh.nBoundaryFaces() << nl + << " != number of boundary faces " << mesh.nBoundaryFaces() << nl << abort(FatalError); } const polyBoundaryMesh& patches = mesh.boundaryMesh(); - if (parRun) + if (parRun && UPstream::parRun()) { // Avoid mesh.globalData() - possible race condition @@ -1104,7 +1105,7 @@ void Foam::syncTools::syncBoundaryFaceList } // Wait for all comms to finish - Pstream::waitRequests(startRequest); + UPstream::waitRequests(startRequest); // Combine with existing data for (const polyPatch& pp : patches) @@ -1274,20 +1275,20 @@ void Foam::syncTools::syncFaceList { FatalErrorInFunction << "Number of values " << faceValues.size() - << " is not equal to the number of " + << " != number of " << (isBoundaryOnly ? "boundary" : "mesh") << " faces " - << ((mesh.nFaces() - boundaryOffset)) << nl + << (mesh.nFaces() - boundaryOffset) << nl << abort(FatalError); } const polyBoundaryMesh& patches = mesh.boundaryMesh(); - if (parRun) + if (parRun && UPstream::parRun()) { const label startRequest = UPstream::nRequests(); // Receive buffers - PtrList<PackedList<Width>> recvInfos(patches.size()); + PtrList<PackedList<Width>> recvBufs(patches.size()); // Set up reads for (const polyPatch& pp : patches) @@ -1298,23 +1299,21 @@ void Foam::syncTools::syncFaceList { const auto& procPatch = *ppp; const label patchi = pp.index(); - const label patchSize = pp.size(); - recvInfos.set(patchi, new PackedList<Width>(patchSize)); - PackedList<Width>& recvInfo = recvInfos[patchi]; + auto& recvbuf = recvBufs.emplace_set(patchi, pp.size()); UIPstream::read ( UPstream::commsTypes::nonBlocking, procPatch.neighbProcNo(), - recvInfo.data_bytes(), - recvInfo.size_bytes() + recvbuf.data_bytes(), + recvbuf.size_bytes() ); } } // Send buffers - PtrList<PackedList<Width>> sendInfos(patches.size()); + PtrList<PackedList<Width>> sendBufs(patches.size()); // Set up writes for (const polyPatch& pp : patches) @@ -1326,24 +1325,16 @@ void Foam::syncTools::syncFaceList const auto& procPatch = *ppp; const label patchi = pp.index(); - const labelRange range - ( - pp.start()-boundaryOffset, - pp.size() - ); - sendInfos.set - ( - patchi, - new PackedList<Width>(faceValues, range) - ); - PackedList<Width>& sendInfo = sendInfos[patchi]; + const labelRange range(pp.start()-boundaryOffset, pp.size()); + + auto& sendbuf = sendBufs.emplace_set(patchi, faceValues, range); UOPstream::write ( UPstream::commsTypes::nonBlocking, procPatch.neighbProcNo(), - sendInfo.cdata_bytes(), - sendInfo.size_bytes() + sendbuf.cdata_bytes(), + sendbuf.size_bytes() ); } } @@ -1361,13 +1352,13 @@ void Foam::syncTools::syncFaceList const label patchi = pp.index(); const label patchSize = pp.size(); - const PackedList<Width>& recvInfo = recvInfos[patchi]; + const auto& recvbuf = recvBufs[patchi]; // Combine (bitwise) label bFacei = pp.start()-boundaryOffset; for (label i = 0; i < patchSize; ++i) { - unsigned int recvVal = recvInfo[i]; + unsigned int recvVal = recvbuf[i]; unsigned int faceVal = faceValues[bFacei]; cop(faceVal, recvVal); @@ -1420,15 +1411,16 @@ void Foam::syncTools::swapBoundaryCellList ( const polyMesh& mesh, const UList<T>& cellData, - List<T>& neighbourCellData + List<T>& neighbourCellData, + const bool parRun ) { if (cellData.size() != mesh.nCells()) { FatalErrorInFunction << "Number of cell values " << cellData.size() - << " is not equal to the number of cells in the mesh " - << mesh.nCells() << abort(FatalError); + << " != number of cells " << mesh.nCells() << nl + << abort(FatalError); } const polyBoundaryMesh& patches = mesh.boundaryMesh(); @@ -1437,15 +1429,18 @@ void Foam::syncTools::swapBoundaryCellList for (const polyPatch& pp : patches) { - label bFacei = pp.offset(); + const auto& faceCells = pp.faceCells(); - for (const label celli : pp.faceCells()) - { - neighbourCellData[bFacei] = cellData[celli]; - ++bFacei; - } + // ie, boundarySlice() = patchInternalList() + SubList<T> + ( + neighbourCellData, + faceCells.size(), + pp.offset() + ) = UIndirectList<T>(cellData, faceCells); } - syncTools::swapBoundaryFaceList(mesh, neighbourCellData); + + syncTools::swapBoundaryFaceList(mesh, neighbourCellData, parRun); } @@ -1479,10 +1474,17 @@ template<unsigned Width> void Foam::syncTools::swapFaceList ( const polyMesh& mesh, - PackedList<Width>& faceValues + PackedList<Width>& faceValues, + const bool parRun ) { - syncFaceList(mesh, faceValues, eqOp<unsigned int>()); + syncFaceList + ( + mesh, + faceValues, + eqOp<unsigned int>(), + parRun + ); } @@ -1490,10 +1492,17 @@ template<unsigned Width> void Foam::syncTools::swapBoundaryFaceList ( const polyMesh& mesh, - PackedList<Width>& faceValues + PackedList<Width>& faceValues, + const bool parRun ) { - syncBoundaryFaceList(mesh, faceValues, eqOp<unsigned int>()); + syncBoundaryFaceList + ( + mesh, + faceValues, + eqOp<unsigned int>(), + parRun + ); } @@ -1510,8 +1519,8 @@ void Foam::syncTools::syncPointList { FatalErrorInFunction << "Number of values " << pointValues.size() - << " is not equal to the number of points in the mesh " - << mesh.nPoints() << abort(FatalError); + << " != number of points " << mesh.nPoints() << nl + << abort(FatalError); } const globalMeshData& gd = mesh.globalData(); @@ -1553,8 +1562,8 @@ void Foam::syncTools::syncEdgeList { FatalErrorInFunction << "Number of values " << edgeValues.size() - << " is not equal to the number of edges in the mesh " - << mesh.nEdges() << abort(FatalError); + << " != number of edges " << mesh.nEdges() << nl + << abort(FatalError); } const globalMeshData& gd = mesh.globalData();