pointSet.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 "pointSet.H"
30#include "mapPolyMesh.H"
31#include "polyMesh.H"
32#include "syncTools.H"
35
36// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
37
38namespace Foam
39{
44}
45
46// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
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{
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.nPoints();
138
139 boolList contents(len, false);
140
141 for (const label pointi : labels)
142 {
143 contents.set(pointi);
144 }
145
146 // The nullValue = 'false'
147 syncTools::syncPointList(mesh, contents, orEqOp<bool>(), false);
148
149
150 // Update labelHashSet
151
152 for (label pointi=0; pointi < len; ++pointi)
153 {
154 if (contents.test(pointi))
155 {
156 labels.set(pointi);
157 }
158 }
159}
160
161
162Foam::label Foam::pointSet::maxSize(const polyMesh& mesh) const
163{
164 return mesh.nPoints();
165}
166
167
169{
170 updateLabels(morphMap.reversePointMap());
171}
172
173
175{
176 labelHashSet& labels = *this;
177
178 boolList contents(map.nOldPoints(), false);
179
180 for (const label pointi : labels)
181 {
182 contents.set(pointi);
183 }
184
185 map.distributePointData(contents);
186
187 // The new length
188 const label len = contents.size();
189
190 // Count - as per BitOps::count(contents)
191 label n = 0;
192 for (label i=0; i < len; ++i)
193 {
194 if (contents.test(i))
195 {
196 ++n;
197 }
198 }
199
200
201 // Update labelHashSet
202
203 labels.clear();
204 labels.resize(2*n);
205
206 for (label i=0; i < len; ++i)
207 {
208 if (contents.test(i))
209 {
210 labels.set(i);
211 }
212 }
213}
214
215
217(
218 Ostream& os,
219 const primitiveMesh& mesh,
220 const label maxLen
221) const
222{
223 topoSet::writeDebug(os, mesh.points(), maxLen);
224}
225
226
227// ************************************************************************* //
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
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 distributePointData(List< T > &values) const
Distribute list of point data.
label nOldPoints() const noexcept
Number of points in mesh before distribution.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Definition: mapPolyMesh.H:162
const labelList & reversePointMap() const
Reverse point map.
Definition: mapPolyMesh.H:469
void updateMesh()
Update for new mesh topology.
A set of point labels.
Definition: pointSet.H:54
virtual void distribute(const mapDistributePolyMesh &)
Update any stored data for mesh redistribution.
Definition: pointSet.C:174
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:81
virtual const pointField & points() const
Return raw points.
Definition: polyMesh.C:1083
Cell-face mesh analysis engine.
Definition: primitiveMesh.H:79
label nPoints() const noexcept
Number of mesh points.
void writeDebug() const
Debug write.
static void syncPointList(const polyMesh &mesh, List< T > &pointValues, const CombineOp &cop, const T &nullValue, const TransformOp &top)
Synchronize values on all mesh points.
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