/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2016-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . Class Foam::ZoneMesh Description A list of mesh zones. SourceFiles ZoneMesh.C \*---------------------------------------------------------------------------*/ #ifndef Foam_ZoneMesh_H #define Foam_ZoneMesh_H #include "regIOobject.H" #include "pointField.H" #include "Map.H" #include "HashSet.H" #include "PtrList.H" #include "bitSet.H" #include "wordRes.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { // Forward Declarations template class ZoneMesh; template Ostream& operator<<(Ostream& os, const ZoneMesh& zones); /*---------------------------------------------------------------------------*\ Class ZoneMesh Declaration \*---------------------------------------------------------------------------*/ template class ZoneMesh : public PtrList, public regIOobject { // Private Data //- Reference to mesh const MeshType& mesh_; //- Demand-driven: map of zone labels for given element mutable std::unique_ptr> zoneMapPtr_; //- Demand-driven: map of additional zone labels for given element. // Only populated if overlapping zones mutable std::unique_ptr additionalMapPtr_; //- Demand-driven: list of zone ids per group mutable std::unique_ptr> groupIDsPtr_; // Private Member Functions //- Total of number of addressed items (all zones) label totalSize() const; //- Create zone map void calcZoneMap() const; //- Some zones have inGroup entries bool hasGroupIDs() const; //- Calculate group name to zone ids lookup void calcGroupIDs() const; //- Clear addressing at this level void clearLocalAddressing(); //- Populate/recreate from dictionary entries void populate(PtrList&& entries); //- Return true if contents were read //- (controlled by IOobject readOption flags). bool readIOcontents(const bool allowOptionalRead); public: // Public Typedefs //- The zone type. Same as PtrList::value_type typedef ZoneType zone_type; //- Debug switch to disallow the use of generic zones static int disallowGenericZones; // Generated Methods //- No copy construct ZoneMesh(const ZoneMesh&) = delete; //- No copy assignment void operator=(const ZoneMesh&) = delete; // Constructors //- Read construct from IOobject and mesh reference //- Any reading (mandatory, optional) based on IOobject properties. ZoneMesh ( const IOobject& io, const MeshType& mesh ); //- Construct empty with IOobject properties and a mesh reference. //- Does not read. ZoneMesh ( const IOobject& io, const MeshType& mesh, Foam::zero ); //- Construct with specified size if not read. //- Any reading (mandatory, optional) based on IOobject properties. ZoneMesh ( const IOobject& io, const MeshType& mesh, const label size ); //- Read construct (mandatory, optional) based on IOobject properties //- or use the fallback PtrList (with cloning). ZoneMesh ( const IOobject& io, const MeshType& mesh, const PtrList& list ); //- Read construct (mandatory, optional) based on IOobject properties //- or use the fallback PtrList (with cloning). ZoneMesh ( const IOobject& io, const MeshType& mesh, PtrList&& entries ); //- Destructor ~ZoneMesh() = default; // Member Functions //- Return the mesh reference const MeshType& mesh() const noexcept { return mesh_; } //- Map of zones containing zone index for all zoned elements // Return -1 if the object is not in the zone const Map