From 59f5e26b581379937e20fcba862c1b5ff27650c2 Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@esi-group.com> Date: Fri, 12 Jul 2019 08:54:34 +0200 Subject: [PATCH] ENH: accept bitSet for MeshedSurface::subsetMesh - add triSurface::subsetMesh single-parameter variant --- .../surface/surfaceCheck/surfaceCheck.C | 25 +----------- .../surface/surfaceClean/collapseBase.C | 4 +- .../surfaceSplitByPatch/surfaceSplitByPatch.C | 14 +------ .../surfaceSplitByTopology.C | 6 +-- .../surface/surfaceSubset/surfaceSubset.C | 9 +---- .../Identifiers/surface/surfZoneIdentifier.C | 16 ++------ .../Identifiers/surface/surfZoneIdentifier.H | 39 ++++++------------- .../subTriSurfaceMesh/subTriSurfaceMesh.C | 6 +-- src/surfMesh/MeshedSurface/MeshedSurface.C | 18 +++++++-- src/surfMesh/MeshedSurface/MeshedSurface.H | 18 +++++---- .../UnsortedMeshedSurface.C | 3 +- .../UnsortedMeshedSurface.H | 19 +++++---- src/surfMesh/surfZone/surfZone.H | 2 +- src/surfMesh/triSurface/triSurface.C | 11 +++++- src/surfMesh/triSurface/triSurface.H | 23 +++++++---- 15 files changed, 89 insertions(+), 124 deletions(-) diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C index eab6eff932a..d0498664252 100644 --- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C +++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C @@ -177,18 +177,7 @@ void writeParts } } - labelList pointMap; - labelList faceMap; - - triSurface subSurf - ( - surf.subsetMesh - ( - includeMap, - pointMap, - faceMap - ) - ); + triSurface subSurf(surf.subsetMesh(includeMap)); fileName subName ( @@ -483,17 +472,7 @@ int main(int argc, char *argv[]) boolList isIllegalFace(surf.size(), false); UIndirectList<bool>(isIllegalFace, illegalFaces) = true; - labelList pointMap; - labelList faceMap; - triSurface subSurf - ( - surf.subsetMesh - ( - isIllegalFace, - pointMap, - faceMap - ) - ); + triSurface subSurf(surf.subsetMesh(isIllegalFace)); // Transcribe faces diff --git a/applications/utilities/surface/surfaceClean/collapseBase.C b/applications/utilities/surface/surfaceClean/collapseBase.C index 7f2a4ef43c6..5d8e40b9c72 100644 --- a/applications/utilities/surface/surfaceClean/collapseBase.C +++ b/applications/utilities/surface/surfaceClean/collapseBase.C @@ -64,9 +64,7 @@ using namespace Foam; // } // } // -// labelList pointMap, faceMap; -// -// triSurface regionSurf(surf.subsetMesh(include, pointMap, faceMap)); +// triSurface regionSurf(surf.subsetMesh(include)); // // Pout<< "Region " << regionI << " surface:" << nl; // regionSurf.writeStats(Pout); diff --git a/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C b/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C index 0a91f3df879..ad614e66792 100644 --- a/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C +++ b/applications/utilities/surface/surfaceSplitByPatch/surfaceSplitByPatch.C @@ -99,18 +99,8 @@ int main(int argc, char *argv[]) } // Subset triSurface - labelList pointMap; - labelList faceMap; - - triSurface subSurf - ( - surf.subsetMesh - ( - includeMap, - pointMap, - faceMap - ) - ); + + triSurface subSurf(surf.subsetMesh(includeMap)); subSurf.write(outFile); } diff --git a/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C b/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C index 4dee1ec7b6a..1e4eb09bb3f 100644 --- a/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C +++ b/applications/utilities/surface/surfaceSplitByTopology/surfaceSplitByTopology.C @@ -198,10 +198,7 @@ int main(int argc, char *argv[]) for (label z = 0; z < nZones; z++) { - boolList include(faceZone.size(), false); - labelList pointMap; - labelList faceMap; forAll(faceZone, f) { @@ -211,8 +208,7 @@ int main(int argc, char *argv[]) } } - triSurface zoneSurf = surf.subsetMesh(include, pointMap, faceMap); - + triSurface zoneSurf = surf.subsetMesh(include); fileName remainingPartFileName = outFileBaseName diff --git a/applications/utilities/surface/surfaceSubset/surfaceSubset.C b/applications/utilities/surface/surfaceSubset/surfaceSubset.C index c8f3e036332..31295447eef 100644 --- a/applications/utilities/surface/surfaceSubset/surfaceSubset.C +++ b/applications/utilities/surface/surfaceSubset/surfaceSubset.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2011, 2015 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011, 2015-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- | Copyright (C) 2011-2016 OpenFOAM Foundation @@ -379,12 +379,7 @@ int main(int argc, char *argv[]) // Create subsetted surface - labelList pointMap; - labelList faceMap; - triSurface surf2 - ( - surf1.subsetMesh(facesToSubset, pointMap, faceMap) - ); + triSurface surf2(surf1.subsetMesh(facesToSubset)); Info<< "Subset:" << endl; surf2.writeStats(Info); diff --git a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C index 75f029a5d43..abe9e2f5930 100644 --- a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C +++ b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.C @@ -2,10 +2,8 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010, 2016 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2019 OpenCFD Ltd. \\/ M anipulation | -------------------------------------------------------------------------------- - | Copyright (C) 2011 OpenFOAM Foundation ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -91,12 +89,6 @@ Foam::surfZoneIdentifier::surfZoneIdentifier {} -// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // - -Foam::surfZoneIdentifier::~surfZoneIdentifier() -{} - - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // void Foam::surfZoneIdentifier::write(Ostream& os) const @@ -127,11 +119,11 @@ bool Foam::operator!=(const surfZoneIdentifier& a, const surfZoneIdentifier& b) } -// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // Foam::Istream& Foam::operator>>(Istream& is, surfZoneIdentifier& obj) { - is >> obj.name_ >> obj.geometricType_; + is >> obj.name() >> obj.geometricType(); return is; } @@ -139,7 +131,7 @@ Foam::Istream& Foam::operator>>(Istream& is, surfZoneIdentifier& obj) Foam::Ostream& Foam::operator<<(Ostream& os, const surfZoneIdentifier& obj) { // Newlines to separate, since that is what triSurface currently expects - os << nl << obj.name_ << nl << obj.geometricType_; + os << nl << obj.name() << nl << obj.geometricType(); os.check(FUNCTION_NAME); return os; } diff --git a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H index cb5a2593d3c..2f70240d993 100644 --- a/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H +++ b/src/OpenFOAM/meshes/Identifiers/surface/surfZoneIdentifier.H @@ -2,10 +2,8 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2009-2010, 2016 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2009-2019 OpenCFD Ltd. \\/ M anipulation | -------------------------------------------------------------------------------- - | Copyright (C) 2011 OpenFOAM Foundation ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -48,14 +46,9 @@ SourceFiles namespace Foam { +// Forward declarations class dictionary; -// Forward declaration of friend functions and operators - -class surfZoneIdentifier; -Istream& operator>>(Istream& is, surfZoneIdentifier& p); -Ostream& operator<<(Ostream& os, const surfZoneIdentifier& p); - /*---------------------------------------------------------------------------*\ Class surfZoneIdentifier Declaration \*---------------------------------------------------------------------------*/ @@ -84,7 +77,7 @@ public: // Constructors - //- Construct null + //- Construct null, with index zero surfZoneIdentifier(); //- Construct null with specified index @@ -115,7 +108,7 @@ public: //- Destructor - virtual ~surfZoneIdentifier(); + virtual ~surfZoneIdentifier() = default; // Member Functions @@ -159,28 +152,18 @@ public: //- Write identifier as a dictionary void write(Ostream& os) const; +}; - // Ostream Operator - - //- Read name/type. - friend Istream& operator>> - ( - Istream& is, - surfZoneIdentifier& ob - ); - - //- Write name/type. - friend Ostream& operator<< - ( - Ostream& os, - const surfZoneIdentifier& obj - ); +// Global Operators -}; +// Ostream Operator +//- Read name/type +Istream& operator>>(Istream& is, surfZoneIdentifier& obj); -// Global Operators +//- Write name/type +Ostream& operator<<(Ostream& os, const surfZoneIdentifier& obj); //- Compare zone indentifiers for equality bool operator==(const surfZoneIdentifier& a, const surfZoneIdentifier& b); diff --git a/src/meshTools/searchableSurfaces/subTriSurfaceMesh/subTriSurfaceMesh.C b/src/meshTools/searchableSurfaces/subTriSurfaceMesh/subTriSurfaceMesh.C index ff7a935112e..3818d7dccbb 100644 --- a/src/meshTools/searchableSurfaces/subTriSurfaceMesh/subTriSurfaceMesh.C +++ b/src/meshTools/searchableSurfaces/subTriSurfaceMesh/subTriSurfaceMesh.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2015-2018 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2015-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -118,9 +118,7 @@ Foam::triSurface Foam::subTriSurfaceMesh::subset } } - labelList pointMap; - labelList faceMap; - return s.subsetMesh(isSelected, pointMap, faceMap); + return s.subsetMesh(isSelected); } diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.C b/src/surfMesh/MeshedSurface/MeshedSurface.C index ffe1ddef5ad..86bcfc5a141 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.C +++ b/src/surfMesh/MeshedSurface/MeshedSurface.C @@ -994,9 +994,10 @@ Foam::label Foam::MeshedSurface<Face>::triangulate template<class Face> +template<class BoolListType> Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh ( - const labelHashSet& include, + const BoolListType& include, labelList& pointMap, labelList& faceMap ) const @@ -1069,8 +1070,7 @@ Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh zone.size() = newFacei - zone.start(); } - - // construct a sub-surface + // Construct a sub-surface return MeshedSurface<Face> ( std::move(newPoints), @@ -1083,7 +1083,7 @@ Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh template<class Face> Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh ( - const labelHashSet& include + const bitSet& include ) const { labelList pointMap, faceMap; @@ -1091,6 +1091,16 @@ Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh } +template<class Face> +Foam::MeshedSurface<Face> Foam::MeshedSurface<Face>::subsetMesh +( + const labelHashSet& include +) const +{ + labelList pointMap, faceMap; + return subsetMesh(include, pointMap, faceMap); +} + template<class Face> void Foam::MeshedSurface<Face>::swap diff --git a/src/surfMesh/MeshedSurface/MeshedSurface.H b/src/surfMesh/MeshedSurface/MeshedSurface.H index a01db0639d2..5c0503e416f 100644 --- a/src/surfMesh/MeshedSurface/MeshedSurface.H +++ b/src/surfMesh/MeshedSurface/MeshedSurface.H @@ -54,6 +54,7 @@ SourceFiles #include "pointField.H" #include "face.H" #include "labelledTri.H" +#include "bitSet.H" #include "HashSet.H" #include "surfZoneList.H" #include "surfaceFormatsCore.H" @@ -464,20 +465,23 @@ public: virtual label triangulate(List<label>& faceMap); //- Return new surface. - // Returns return pointMap, faceMap from subsetMeshMap + // + // \param[in] include the faces to select + // \param[out] pointMap from subsetMeshMap + // \param[out] faceMap from subsetMeshMap + template<class BoolListType> MeshedSurface subsetMesh ( - const labelHashSet& include, + const BoolListType& include, labelList& pointMap, labelList& faceMap ) const; - //- Return new surface. - MeshedSurface subsetMesh - ( - const labelHashSet& include - ) const; + //- Return new surface + MeshedSurface subsetMesh(const bitSet& include) const; + //- Return new surface + MeshedSurface subsetMesh(const labelHashSet& include) const; //- Swap contents void swap(MeshedSurface<Face>& surf); diff --git a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C index 1a70d09e11f..3457665184c 100644 --- a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C +++ b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.C @@ -528,10 +528,11 @@ Foam::surfZoneList Foam::UnsortedMeshedSurface<Face>::sortedZones template<class Face> +template<class BoolListType> Foam::UnsortedMeshedSurface<Face> Foam::UnsortedMeshedSurface<Face>::subsetMesh ( - const labelHashSet& include, + const BoolListType& include, labelList& pointMap, labelList& faceMap ) const diff --git a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H index 3151cd475d7..f4b1748f349 100644 --- a/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H +++ b/src/surfMesh/UnsortedMeshedSurface/UnsortedMeshedSurface.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2008-2010, 2016-2018 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2010, 2016-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- | Copyright (C) 2011-2016 OpenFOAM Foundation @@ -332,19 +332,22 @@ public: virtual void clear(); //- Return new surface. - // Returns return pointMap, faceMap from subsetMeshMap + // \param[in] include the faces to select + // \param[out] pointMap from subsetMeshMap + // \param[out] faceMap from subsetMeshMap + template<class BoolListType> UnsortedMeshedSurface subsetMesh ( - const labelHashSet& include, + const BoolListType& include, labelList& pointMap, labelList& faceMap ) const; - //- Return new surface. - UnsortedMeshedSurface subsetMesh - ( - const labelHashSet& include - ) const; + //- Return new surface + UnsortedMeshedSurface subsetMesh(const bitSet& include) const; + + //- Return new surface + UnsortedMeshedSurface subsetMesh(const labelHashSet& include) const; //- Swap contents - disabled diff --git a/src/surfMesh/surfZone/surfZone.H b/src/surfMesh/surfZone/surfZone.H index 152c593e3eb..f5df6c81c35 100644 --- a/src/surfMesh/surfZone/surfZone.H +++ b/src/surfMesh/surfZone/surfZone.H @@ -83,7 +83,7 @@ public: // Constructors - //- Construct null + //- Construct null with zero start, size surfZone(); //- Construct from components diff --git a/src/surfMesh/triSurface/triSurface.C b/src/surfMesh/triSurface/triSurface.C index ddd68c2c664..f140bd13673 100644 --- a/src/surfMesh/triSurface/triSurface.C +++ b/src/surfMesh/triSurface/triSurface.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2011, 2016-2018 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011, 2016-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- | Copyright (C) 2011-2016 OpenFOAM Foundation @@ -784,7 +784,7 @@ void Foam::triSurface::subsetMeshMap pointMap.setSize(nPoints()); - bitSet pointHad(nPoints(), false); + bitSet pointHad(nPoints()); forAll(include, oldFacei) { @@ -854,6 +854,13 @@ Foam::triSurface Foam::triSurface::subsetMesh } +Foam::triSurface Foam::triSurface::subsetMesh(const boolList& include) const +{ + labelList pointMap, faceMap; + return subsetMesh(include, pointMap, faceMap); +} + + void Foam::triSurface::swapFaces(List<labelledTri>& faceLst) { clearOut(); // Topology changes diff --git a/src/surfMesh/triSurface/triSurface.H b/src/surfMesh/triSurface/triSurface.H index 46706252a6b..664803322f2 100644 --- a/src/surfMesh/triSurface/triSurface.H +++ b/src/surfMesh/triSurface/triSurface.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2011, 2016-2017 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011, 2016-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- | Copyright (C) 2011-2016 OpenFOAM Foundation @@ -418,10 +418,11 @@ public: labelList& faceZone ) const; - //- 'Create' sub mesh, including only faces for which boolList - //- entry is true - // Sets: pointMap: from new to old localPoints - // faceMap: new to old faces + //- 'Create' sub mesh + // + // \param[in] include the faces to select + // \param[out] pointMap from new to old localPoints + // \param[out] faceMap from new to old faces void subsetMeshMap ( const boolList& include, @@ -429,8 +430,11 @@ public: labelList& faceMap ) const; - //- Return new surface. Returns pointMap, faceMap from - // subsetMeshMap + //- Return new surface + // + // \param[in] include the faces to select + // \param[out] pointMap from subsetMeshMap + // \param[out] faceMap from subsetMeshMap triSurface subsetMesh ( const boolList& include, @@ -438,6 +442,11 @@ public: labelList& faceMap ) const; + //- Return new surface + // + // \param[in] include the faces to select + triSurface subsetMesh(const boolList& include) const; + //- Swap the list of faces being addressed void swapFaces(List<labelledTri>& faceLst); -- GitLab