cellSet.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 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 "cellSet.H"
30#include "mapPolyMesh.H"
31#include "polyMesh.H"
32#include "Time.H"
35
36// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
37
38namespace Foam
39{
41
45}
46
47
48// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
49
51:
52 topoSet(obj, typeName)
53{}
54
55
57(
58 const polyMesh& mesh,
59 const word& name,
60 readOption r,
62)
63:
64 topoSet(mesh, typeName, name, r, w)
65{
66 // Make sure set within valid range
67 check(mesh.nCells());
68}
69
70
72(
73 const polyMesh& mesh,
74 const word& name,
75 const label size,
77)
78:
79 topoSet(mesh, name, size, w)
80{}
81
82
84(
85 const polyMesh& mesh,
86 const word& name,
87 const topoSet& set,
89)
90:
91 topoSet(mesh, name, set, w)
92{}
93
94
96(
97 const polyMesh& mesh,
98 const word& name,
99 const labelHashSet& labels,
101)
102:
103 topoSet(mesh, name, labels, w)
104{}
105
106
108(
109 const polyMesh& mesh,
110 const word& name,
111 labelHashSet&& labels,
113)
114:
115 topoSet(mesh, name, std::move(labels), w)
116{}
117
118
120(
121 const polyMesh& mesh,
122 const word& name,
123 const labelUList& labels,
125)
126:
127 topoSet(mesh, name, labels, w)
128{}
129
130
131// Database constructors (for when no mesh available)
133(
134 const Time& runTime,
135 const word& name,
136 readOption r,
138)
139:
140 topoSet
141 (
142 findIOobject(runTime, name, r, w),
143 typeName
144 )
145{}
146
147
149(
150 const Time& runTime,
151 const word& name,
152 const label size,
154)
155:
156 topoSet
157 (
158 findIOobject(runTime, name, IOobject::NO_READ, w),
159 size
160 )
161{}
162
163
165(
166 const Time& runTime,
167 const word& name,
168 const labelHashSet& labels,
170)
171:
172 topoSet
173 (
174 findIOobject(runTime, name, IOobject::NO_READ, w),
175 labels
176 )
177{}
178
179
180// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
181
182Foam::label Foam::cellSet::maxSize(const polyMesh& mesh) const
183{
184 return mesh.nCells();
185}
186
187
189{
190 updateLabels(morphMap.reverseCellMap());
191}
192
193
195{
196 labelHashSet& labels = *this;
197
198 boolList contents(map.nOldCells(), false);
199
200 for (const label celli : labels)
201 {
202 contents.set(celli);
203 }
204
205 map.distributeCellData(contents);
206
207 // The new length
208 const label len = contents.size();
209
210 // Count
211 label n = 0;
212 for (label i=0; i < len; ++i)
213 {
214 if (contents.test(i))
215 {
216 ++n;
217 }
218 }
219
220 // Update labelHashSet
221
222 labels.clear();
223 labels.resize(2*n);
224
225 for (label i=0; i < len; ++i)
226 {
227 if (contents.test(i))
228 {
229 labels.set(i);
230 }
231 }
232}
233
234
236(
237 Ostream& os,
238 const primitiveMesh& mesh,
239 const label maxLen
240) const
241{
243}
244
245
246// ************************************************************************* //
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
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:80
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 collection of cell labels.
Definition: cellSet.H:54
virtual void distribute(const mapDistributePolyMesh &map)
Update any stored data for mesh redistribution.
Definition: cellSet.C:194
Class containing mesh-to-mesh mapping information after a mesh distribution where we send parts of me...
void distributeCellData(List< T > &values) const
Distribute list of cell data.
label nOldCells() const noexcept
Number of cells in mesh before distribution.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Definition: mapPolyMesh.H:162
const labelList & reverseCellMap() const
Reverse cell map.
Definition: mapPolyMesh.H:532
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 & cellCentres() const
label nCells() const noexcept
Number of mesh cells.
void writeDebug() const
Debug write.
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
engineTime & runTime
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