diff --git a/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C b/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C index 5d35b85f75829660630f2fadf7853a0d45974e87..539aa1b6c6e65d9fde9ab7b2a7798de542c20206 100644 --- a/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C +++ b/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C @@ -1223,7 +1223,7 @@ void Foam::syncTools::syncBoundaryFaceList label patchStart = procPatch.start()-mesh.nInternalFaces(); UOPstream toNbr(procPatch.neighbProcNo(), pBufs); - toNbr << + toNbr << SubField<T> ( faceValues, @@ -1423,7 +1423,7 @@ void Foam::syncTools::syncFaceList cop(t, val1); faceValues[meshFace0] = t; - cop(val1, val0); + cop(val1, val0); faceValues[meshFace1] = val1; } } @@ -1683,7 +1683,7 @@ void Foam::syncTools::syncEdgeList const processorPolyPatch& procPatch = refCast<const processorPolyPatch>(patches[patchI]); - // Receive from neighbour. + // Receive from neighbour. List<unsigned int> nbrPatchInfo(procPatch.nEdges()); { diff --git a/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.C b/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.C index 7df85dc6d55f4c798ed9f86d6ba9eb1a899687c1..c939663b358542865904f92cca7ae1225411a620 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.C +++ b/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.C @@ -302,6 +302,24 @@ Foam::label Foam::ZoneMesh<ZoneType, MeshType>::findIndex } +template<class ZoneType, class MeshType> +Foam::PackedBoolList Foam::ZoneMesh<ZoneType, MeshType>::inZone +( + const keyType& key +) const +{ + PackedBoolList lst; + + const labelList indices = this->findIndices(key); + forAll(indices, i) + { + lst |= static_cast<const labelList&>(this->operator[](indices[i])); + } + + return lst; +} + + template<class ZoneType, class MeshType> Foam::label Foam::ZoneMesh<ZoneType, MeshType>::findZoneID ( diff --git a/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.H b/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.H index 8854d9533b0e4aed4cb67357fc01d3010c98e191..5f81f4b948056d944cce0b5bd3360453b491bab5 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.H +++ b/src/OpenFOAM/meshes/polyMesh/zones/ZoneMesh/ZoneMesh.H @@ -25,7 +25,7 @@ Class Foam::ZoneMesh Description - List of mesh zones + A list of mesh zones. SourceFiles ZoneMesh.C @@ -37,8 +37,9 @@ SourceFiles #include "List.H" #include "regIOobject.H" -#include "HashSet.H" #include "pointFieldsFwd.H" +#include "Map.H" +#include "PackedBoolList.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -140,6 +141,9 @@ public: //- Return zone index for the first match, return -1 if not found label findIndex(const keyType&) const; + //- Mark all elements that are in the matching zones + PackedBoolList inZone(const keyType&) const; + //- Clear addressing void clearAddressing(); diff --git a/src/OpenFOAM/meshes/polyMesh/zones/cellZone/cellZone.C b/src/OpenFOAM/meshes/polyMesh/zones/cellZone/cellZone.C index 6e76afc1c5367e2ed1ebfce7ad8282a44d0e29b2..2464e980471b713a390d7599c530a0fdc9d19e76 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/cellZone/cellZone.C +++ b/src/OpenFOAM/meshes/polyMesh/zones/cellZone/cellZone.C @@ -47,7 +47,7 @@ const char * const Foam::cellZone::labelsName = "cellLabels"; Foam::cellZone::cellZone ( const word& name, - const labelList& addr, + const unallocLabelList& addr, const label index, const cellZoneMesh& zm ) @@ -86,7 +86,7 @@ Foam::cellZone::cellZone Foam::cellZone::cellZone ( const cellZone& cz, - const labelList& addr, + const unallocLabelList& addr, const label index, const cellZoneMesh& zm ) @@ -154,7 +154,14 @@ void Foam::cellZone::operator=(const cellZone& zn) } -void Foam::cellZone::operator=(const labelList& addr) +void Foam::cellZone::operator=(const unallocLabelList& addr) +{ + clearAddressing(); + labelList::operator=(addr); +} + + +void Foam::cellZone::operator=(const Xfer<labelList>& addr) { clearAddressing(); labelList::operator=(addr); diff --git a/src/OpenFOAM/meshes/polyMesh/zones/cellZone/cellZone.H b/src/OpenFOAM/meshes/polyMesh/zones/cellZone/cellZone.H index 5f5d60a30fc87118a25b5a289b88886e11f24163..606698d2ae6660027979b382a37df9735f9f38bd 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/cellZone/cellZone.H +++ b/src/OpenFOAM/meshes/polyMesh/zones/cellZone/cellZone.H @@ -113,7 +113,7 @@ public: cellZone ( const word& name, - const labelList& addr, + const unallocLabelList& addr, const label index, const cellZoneMesh& ); @@ -141,7 +141,7 @@ public: cellZone ( const cellZone&, - const labelList& addr, + const unallocLabelList& addr, const label index, const cellZoneMesh& ); @@ -169,7 +169,7 @@ public: // and zone mesh virtual autoPtr<cellZone> clone ( - const labelList& addr, + const unallocLabelList& addr, const label index, const cellZoneMesh& zm ) const @@ -215,11 +215,14 @@ public: // Member Operators - //- Assign to zone clearing demand-driven data + //- Assign to zone, clearing demand-driven data void operator=(const cellZone&); - //- Assign addressing clearing demand-driven data - void operator=(const labelList&); + //- Assign addressing, clearing demand-driven data + void operator=(const unallocLabelList&); + + //- Assign addressing, clearing demand-driven data + void operator=(const Xfer<labelList>&); // I-O diff --git a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C index 4bd7874649fdc34400c087048388bedfa8ea0a85..47b61806da80cb5f993262e9bf0e7031908d2f4c 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C +++ b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C @@ -180,7 +180,7 @@ void Foam::faceZone::checkAddressing() const Foam::faceZone::faceZone ( const word& name, - const labelList& addr, + const unallocLabelList& addr, const boolList& fm, const label index, const faceZoneMesh& zm @@ -242,7 +242,7 @@ Foam::faceZone::faceZone Foam::faceZone::faceZone ( const faceZone& fz, - const labelList& addr, + const unallocLabelList& addr, const boolList& fm, const label index, const faceZoneMesh& zm @@ -392,7 +392,7 @@ void Foam::faceZone::clearAddressing() void Foam::faceZone::resetAddressing ( - const labelList& addr, + const unallocLabelList& addr, const boolList& flipMap ) { @@ -414,7 +414,7 @@ void Foam::faceZone::updateMesh(const mapPolyMesh& mpm) forAll(*this, i) { - label faceI = operator[](i); + const label faceI = operator[](i); if (faceMap[faceI] >= 0) { @@ -454,7 +454,7 @@ bool Foam::faceZone::checkParallelSync(const bool report) const boolList neiZoneFlip(mesh.nFaces()-mesh.nInternalFaces(), false); forAll(*this, i) { - label faceI = operator[](i); + const label faceI = operator[](i); if (!mesh.isInternalFace(faceI)) { @@ -469,13 +469,12 @@ bool Foam::faceZone::checkParallelSync(const bool report) const forAll(*this, i) { - label faceI = operator[](i); - - label patchI = bm.whichPatch(faceI); + const label faceI = operator[](i); + const label patchI = bm.whichPatch(faceI); if (patchI != -1 && bm[patchI].coupled()) { - label bFaceI = faceI-mesh.nInternalFaces(); + const label bFaceI = faceI-mesh.nInternalFaces(); // Check face in zone on both sides if (myZoneFace[bFaceI] != neiZoneFace[bFaceI]) diff --git a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H index b8d617232d490f95128c0a2f94b65485bbf0470d..19c6cf7ab1adab9996a0d0ffa96be7d3dc54e2bc 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H +++ b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H @@ -154,7 +154,7 @@ public: faceZone ( const word& name, - const labelList& addr, + const unallocLabelList& addr, const boolList& fm, const label index, const faceZoneMesh& zm @@ -184,7 +184,7 @@ public: faceZone ( const faceZone&, - const labelList& addr, + const unallocLabelList& addr, const boolList& fm, const label index, const faceZoneMesh& @@ -214,7 +214,7 @@ public: // and zone mesh virtual autoPtr<faceZone> clone ( - const labelList& addr, + const unallocLabelList& addr, const boolList& fm, const label index, const faceZoneMesh& zm @@ -279,7 +279,7 @@ public: virtual void clearAddressing(); //- Reset addressing and flip map (clearing demand-driven data) - virtual void resetAddressing(const labelList&, const boolList&); + virtual void resetAddressing(const unallocLabelList&, const boolList&); //- Check zone definition. Return true if in error. virtual bool checkDefinition(const bool report = false) const; diff --git a/src/OpenFOAM/meshes/polyMesh/zones/pointZone/pointZone.C b/src/OpenFOAM/meshes/polyMesh/zones/pointZone/pointZone.C index d6bca05438f60c62d1badae78098d2a1c9de820e..9fcf46da65c10c0b352032b61b654a16309ba421 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/pointZone/pointZone.C +++ b/src/OpenFOAM/meshes/polyMesh/zones/pointZone/pointZone.C @@ -46,7 +46,7 @@ const char* const Foam::pointZone::labelsName = "pointLabels"; Foam::pointZone::pointZone ( const word& name, - const labelList& addr, + const unallocLabelList& addr, const label index, const pointZoneMesh& zm ) @@ -85,7 +85,7 @@ Foam::pointZone::pointZone Foam::pointZone::pointZone ( const pointZone& pz, - const labelList& addr, + const unallocLabelList& addr, const label index, const pointZoneMesh& zm ) @@ -154,7 +154,14 @@ void Foam::pointZone::operator=(const pointZone& zn) } -void Foam::pointZone::operator=(const labelList& addr) +void Foam::pointZone::operator=(const unallocLabelList& addr) +{ + clearAddressing(); + labelList::operator=(addr); +} + + +void Foam::pointZone::operator=(const Xfer<labelList>& addr) { clearAddressing(); labelList::operator=(addr); diff --git a/src/OpenFOAM/meshes/polyMesh/zones/pointZone/pointZone.H b/src/OpenFOAM/meshes/polyMesh/zones/pointZone/pointZone.H index 177953990cfea7a2fdaf4afb0edc9ce230eefb88..fc44ea94c2bc4ef1407ebb25c82c468e90847245 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/pointZone/pointZone.H +++ b/src/OpenFOAM/meshes/polyMesh/zones/pointZone/pointZone.H @@ -112,7 +112,7 @@ public: pointZone ( const word& name, - const labelList& addr, + const unallocLabelList& addr, const label index, const pointZoneMesh& ); @@ -140,7 +140,7 @@ public: pointZone ( const pointZone&, - const labelList& addr, + const unallocLabelList& addr, const label index, const pointZoneMesh& ); @@ -170,7 +170,7 @@ public: ( const pointZoneMesh& zm, const label index, - const labelList& addr + const unallocLabelList& addr ) const { return autoPtr<pointZone> @@ -218,11 +218,14 @@ public: // Member Operators - //- Assign to zone clearing demand-driven data + //- Assign to zone, clearing demand-driven data void operator=(const pointZone&); - //- Assign addressing clearing demand-driven data - void operator=(const labelList&); + //- Assign addressing, clearing demand-driven data + void operator=(const unallocLabelList&); + + //- Assign addressing, clearing demand-driven data + void operator=(const Xfer<labelList>&); // I-O diff --git a/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.C b/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.C index b97e28c937f3778272908cc0489f379d5cc93e1c..31af839b084d28ec77fa1011b42f01bc74a3328a 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.C +++ b/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.C @@ -85,7 +85,7 @@ void Foam::zone::calcLookupMap() const Foam::zone::zone ( const word& name, - const labelList& addr, + const unallocLabelList& addr, const label index ) : @@ -128,7 +128,7 @@ Foam::zone::zone Foam::zone::zone ( const zone& z, - const labelList& addr, + const unallocLabelList& addr, const label index ) : diff --git a/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H b/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H index 9bec4b6cdb8f8aefb00bb971b24c6ed26966466f..e7f3a920b15053a702e38ba7b244661a3dedea7c 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H +++ b/src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H @@ -101,7 +101,7 @@ public: zone ( const word& name, - const labelList& addr, + const unallocLabelList& addr, const label index ); @@ -127,7 +127,7 @@ public: zone ( const zone&, - const labelList& addr, + const unallocLabelList& addr, const label index );