faceSet.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2011-2016 OpenFOAM Foundation
9 Copyright (C) 2016-2018 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
12 This file is part of OpenFOAM.
13
14 OpenFOAM is free software: you can redistribute it and/or modify it
15 under the terms of the GNU General Public License as published by
16 the Free Software Foundation, either version 3 of the License, or
17 (at your option) any later version.
18
19 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26
27\*---------------------------------------------------------------------------*/
28
29#include "faceSet.H"
30#include "polyMesh.H"
31#include "mapPolyMesh.H"
32#include "syncTools.H"
35
36// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
37
38namespace Foam
39{
44}
45
46// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
47
49:
50 topoSet(obj, typeName)
51{}
52
53
55(
56 const polyMesh& mesh,
57 const word& name,
58 readOption r,
60)
61:
62 topoSet(mesh, typeName, name, r, w)
63{
64 check(mesh.nFaces());
65}
66
67
69(
70 const polyMesh& mesh,
71 const word& name,
72 const label size,
74)
75:
76 topoSet(mesh, name, size, w)
77{}
78
79
81(
82 const polyMesh& mesh,
83 const word& name,
84 const topoSet& set,
86)
87:
88 topoSet(mesh, name, set, w)
89{}
90
91
93(
94 const polyMesh& mesh,
95 const word& name,
96 const labelHashSet& labels,
98)
99:
100 topoSet(mesh, name, labels, w)
101{}
102
103
105(
106 const polyMesh& mesh,
107 const word& name,
108 labelHashSet&& labels,
110)
111:
112 topoSet(mesh, name, std::move(labels), w)
113{}
114
115
117(
118 const polyMesh& mesh,
119 const word& name,
120 const labelUList& labels,
122)
123:
124 topoSet(mesh, name, labels, w)
125{}
126
127
128// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
129
131{
132 labelHashSet& labels = *this;
133
134 // Convert to boolList
135 // TBD: could change to using bitSet for the synchronization
136
137 const label len = mesh.nFaces();
138
139 boolList contents(len, false);
140
141 for (const label facei : labels)
142 {
143 contents.set(facei);
144 }
145
147
148
149 // Update labelHashSet
150
151 for (label i=0; i < len; ++i)
152 {
153 if (contents.test(i))
154 {
155 labels.set(i);
156 }
157 }
158}
159
160
161Foam::label Foam::faceSet::maxSize(const polyMesh& mesh) const
162{
163 return mesh.nFaces();
164}
165
166
168{
169 updateLabels(morphMap.reverseFaceMap());
170}
171
172
174{
175 labelHashSet& labels = *this;
176
177 boolList contents(map.nOldFaces(), false);
178
179 for (const label facei : labels)
180 {
181 contents.set(facei);
182 }
183
184 map.distributeFaceData(contents);
185
186 // The new length
187 const label len = contents.size();
188
189 // Count - as per BitOps::count(contents)
190 label n = 0;
191 for (label i=0; i < len; ++i)
192 {
193 if (contents.test(i))
194 {
195 ++n;
196 }
197 }
198
199 // Update labelHashSet
200
201 labels.clear();
202 labels.resize(2*n);
203
204 for (label i=0; i < len; ++i)
205 {
206 if (contents.test(i))
207 {
208 labels.set(i);
209 }
210 }
211}
212
213
215(
216 Ostream& os,
217 const primitiveMesh& mesh,
218 const label maxLen
219) const
220{
222}
223
224
225// ************************************************************************* //
label n
Macros for easy insertion into run-time selection tables.
#define addToRunTimeSelectionTable(baseType, thisType, argNames)
Add to construction table with typeName as the key.
label maxSize() const
The max row length used.
bool set(const Key &key)
Same as insert (no value to overwrite)
Definition: HashSet.H:197
void resize(const label sz)
Resize the hash table for efficiency.
Definition: HashTable.C:601
void clear()
Clear all entries from table.
Definition: HashTable.C:678
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition: IOobject.H:170
writeOption
Enumeration defining the write options.
Definition: IOobject.H:186
readOption
Enumeration defining the read options.
Definition: IOobject.H:177
std::enable_if< std::is_same< bool, TypeT >::value, bool >::type set(const label i, bool val=true)
A bitSet::set() method for a list of bool.
Definition: List.H:330
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:62
std::enable_if< std::is_same< bool, TypeT >::value, bool >::type test(const label i) const
Definition: UList.H:518
void size(const label n)
Older name for setAddressableSize.
Definition: UList.H:114
A list of face labels.
Definition: faceSet.H:54
virtual void distribute(const mapDistributePolyMesh &map)
Update any stored data for mesh redistribution.
Definition: faceSet.C:173
void sync()
Do all: synchronise all IOFields and objectRegistry.
Definition: syncObjects.C:70
Class containing mesh-to-mesh mapping information after a mesh distribution where we send parts of me...
void distributeFaceData(List< T > &values) const
Distribute list of face data.
label nOldFaces() const noexcept
Number of faces in mesh before distribution.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Definition: mapPolyMesh.H:162
const labelList & reverseFaceMap() const
Reverse face map.
Definition: mapPolyMesh.H:501
void updateMesh()
Update for new mesh topology.
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:81
Cell-face mesh analysis engine.
Definition: primitiveMesh.H:79
const vectorField & faceCentres() const
label nFaces() const noexcept
Number of mesh faces.
void writeDebug() const
Debug write.
static void syncFaceList(const polyMesh &mesh, UList< T > &faceValues, const CombineOp &cop)
Synchronize values on all mesh faces.
Definition: syncTools.H:396
General set of labels of mesh quantity (points, cells, faces).
Definition: topoSet.H:67
virtual void check(const label maxSize)
Check limits on addressable range.
Definition: topoSet.C:203
A class for handling words, derived from Foam::string.
Definition: word.H:68
#define defineTypeNameAndDebug(Type, DebugSwitch)
Define the typeName and debug information.
Definition: className.H:121
dynamicFvMesh & mesh
OBJstream os(runTime.globalPath()/outputName)
Namespace for OpenFOAM.
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
Definition: exprTraits.C:59