From aa6b918bcac7991e6a50c5ea4538fee9752ca658 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@Germany> Date: Fri, 6 Aug 2010 17:03:15 +0200 Subject: [PATCH] ENH: add ZoneMesh::inZone method that returns a PackedBoolList - useful for generating combined zones. Eg, cellZone combined ( "combinedZone", czm.inZone(key).used(), ZoneI, *this ); --- .../polyMesh/syncTools/syncToolsTemplates.C | 6 +++--- .../meshes/polyMesh/zones/ZoneMesh/ZoneMesh.C | 18 ++++++++++++++++++ .../meshes/polyMesh/zones/ZoneMesh/ZoneMesh.H | 8 ++++++-- .../meshes/polyMesh/zones/cellZone/cellZone.C | 13 ++++++++++--- .../meshes/polyMesh/zones/cellZone/cellZone.H | 15 +++++++++------ .../meshes/polyMesh/zones/faceZone/faceZone.C | 17 ++++++++--------- .../meshes/polyMesh/zones/faceZone/faceZone.H | 8 ++++---- .../polyMesh/zones/pointZone/pointZone.C | 13 ++++++++++--- .../polyMesh/zones/pointZone/pointZone.H | 15 +++++++++------ src/OpenFOAM/meshes/polyMesh/zones/zone/zone.C | 4 ++-- src/OpenFOAM/meshes/polyMesh/zones/zone/zone.H | 4 ++-- 11 files changed, 81 insertions(+), 40 deletions(-) diff --git a/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C b/src/OpenFOAM/meshes/polyMesh/syncTools/syncToolsTemplates.C index 5d35b85f758..539aa1b6c6e 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 7df85dc6d55..c939663b358 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 8854d9533b0..5f81f4b9480 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 6e76afc1c53..2464e980471 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 5f5d60a30fc..606698d2ae6 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 4bd7874649f..47b61806da8 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 b8d617232d4..19c6cf7ab1a 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 d6bca05438f..9fcf46da65c 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 177953990cf..fc44ea94c2b 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 b97e28c937f..31af839b084 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 9bec4b6cdb8..e7f3a920b15 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 ); -- GitLab