Loading...
Searching...
No Matches
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-2024 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"
36// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
37
38namespace Foam
39{
46
47// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
52{}
53
68)
70 topoSet(mesh, typeName, name, rOpt, wOpt, reg)
71{
72 check(mesh.nPoints()); // Valid range?
73}
74
75
77(
78 const polyMesh& mesh,
79 const word& name,
80 const label initialCapacity,
82)
83:
84 topoSet(mesh, name, initialCapacity, wOpt)
85{}
86
87
89(
90 const polyMesh& mesh,
91 const word& name,
92 const topoSet& set,
94)
95:
96 topoSet(mesh, name, set, wOpt)
97{}
98
99
101(
102 const polyMesh& mesh,
103 const word& name,
104 const labelHashSet& labels,
106)
107:
108 topoSet(mesh, name, labels, wOpt)
109{}
110
111
113(
114 const polyMesh& mesh,
115 const word& name,
116 labelHashSet&& labels,
118)
119:
120 topoSet(mesh, name, std::move(labels), wOpt)
121{}
122
123
125(
126 const polyMesh& mesh,
127 const word& name,
128 const labelUList& labels,
130)
132 topoSet(mesh, name, labels, wOpt)
133{}
134
135
136// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
137
139(
140 const polyMesh& mesh,
141 const word& name
142)
143{
144 pointSet reader
145 (
147 Foam::zero{}
148 );
149
150 labelHashSet labels;
151 reader.readIOcontents(typeName, labels);
152 reader.checkLabels(labels, mesh.nPoints()); // Valid range?
154 return labels;
155}
156
157
158// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
159
161{
162 labelHashSet& labels = *this;
163
164 // Convert to boolList
165 // TBD: could change to using bitSet for the synchronization
166
167 const label len = mesh.nPoints();
168
169 boolList contents(len, false);
170
171 for (const label pointi : labels)
172 {
173 contents.set(pointi);
174 }
175
176 // The nullValue = 'false'
177 syncTools::syncPointList(mesh, contents, orEqOp<bool>(), false);
178
179
180 // Update labelHashSet
181
182 for (label pointi=0; pointi < len; ++pointi)
183 {
184 if (contents.test(pointi))
186 labels.set(pointi);
187 }
188 }
189}
190
192Foam::label Foam::pointSet::maxSize(const polyMesh& mesh) const
193{
194 return mesh.nPoints();
195}
196
198void Foam::pointSet::updateMesh(const mapPolyMesh& morphMap)
199{
200 updateLabels(morphMap.reversePointMap());
201}
202
203
205{
206 labelHashSet& labels = *this;
207
208 boolList contents(map.nOldPoints(), false);
209
210 for (const label pointi : labels)
211 {
212 contents.set(pointi);
213 }
214
215 map.distributePointData(contents);
216
217 // The new length
218 const label len = contents.size();
219
220 // Count - as per BitOps::count(contents)
221 label n = 0;
222 for (label i=0; i < len; ++i)
223 {
224 if (contents.test(i))
225 {
226 ++n;
227 }
228 }
229
230
231 // Update labelHashSet
232
233 labels.clear();
234 labels.reserve(n);
235
236 for (label i=0; i < len; ++i)
237 {
238 if (contents.test(i))
240 labels.set(i);
241 }
242 }
243}
244
245
247(
248 Ostream& os,
249 const primitiveMesh& mesh,
250 const label maxLen
251) const
252{
253 topoSet::writeDebug(os, mesh.points(), maxLen);
254}
255
256
257// ************************************************************************* //
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.
bool set(const Key &key)
Same as insert (no value to overwrite).
Definition HashSet.H:237
void reserve(label numEntries)
Reserve space for at least the specified number of elements (not the number of buckets) and regenerat...
Definition HashTable.C:729
label size() const noexcept
The number of elements in table.
Definition HashTable.H:358
void clear()
Remove all entries from table.
Definition HashTable.C:742
registerOption
Enumeration for use with registerObject(). Values map to bool (false/true).
@ NO_REGISTER
Do not request registration (bool: false).
readOption
Enumeration defining read preferences.
writeOption
Enumeration defining write preferences.
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition IOobject.H:191
bool set(const label i, bool val=true)
A bitSet::set() method for a list of bool.
Definition List.H:469
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition Ostream.H:59
bool test(const label i) const
Test bool value at specified position, always false for out-of-range access.
Definition UList.H:852
void size(const label n)
Older name for setAddressableSize.
Definition UList.H:118
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.
const labelList & reversePointMap() const noexcept
Reverse point map.
A set of point labels.
Definition pointSet.H:50
virtual void distribute(const mapDistributePolyMesh &)
Update any stored data for mesh redistribution.
Definition pointSet.C:197
virtual label maxSize(const polyMesh &mesh) const
Return max index+1.
Definition pointSet.C:185
static labelHashSet readContents(const polyMesh &mesh, const word &name)
Read and return contents. Intermediate IOobject is not registered.
Definition pointSet.C:132
pointSet(const IOobject &io)
Construct from IOobject.
Definition pointSet.C:42
virtual void sync(const polyMesh &mesh)
Sync set across coupled patches. Adds coupled points to set.
Definition pointSet.C:153
virtual void writeDebug(Ostream &os, const primitiveMesh &, const label maxLen) const
Write maxLen items with label and coordinates.
Definition pointSet.C:240
virtual void updateMesh(const mapPolyMesh &morphMap)
Update any stored data for new labels.
Definition pointSet.C:191
Mesh consisting of general polyhedral cells.
Definition polyMesh.H:79
virtual const pointField & points() const
Return raw points.
Definition polyMesh.C:1063
Cell-face mesh analysis engine.
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:63
topoSet(const topoSet &)=delete
No copy construct.
static IOobject findIOobject(const polyMesh &mesh, const word &name, IOobjectOption::readOption rOpt=IOobjectOption::MUST_READ, IOobjectOption::writeOption wOpt=IOobjectOption::NO_WRITE, IOobjectOption::registerOption reg=IOobjectOption::LEGACY_REGISTER)
Find IOobject in the polyMesh/sets/ (used as constructor helper).
Definition topoSet.C:352
label writeDebug(Ostream &os, const label maxElem, labelHashSet::const_iterator &iter) const
Write part of contents nicely formatted.
Definition topoSet.C:260
virtual void updateLabels(const labelUList &map)
Update map from map.
Definition topoSet.C:164
virtual bool set(const label id)
Set an index.
Definition topoSet.C:545
virtual void check(const label maxSize)
Check limits on addressable range.
Definition topoSet.C:252
A class for handling words, derived from Foam::string.
Definition word.H:66
A class representing the concept of 0 (zero) that can be used to avoid manipulating objects known to ...
Definition zero.H:58
#define defineTypeName(Type)
Define the typeName.
Definition className.H:113
dynamicFvMesh & mesh
OBJstream os(runTime.globalPath()/outputName)
const auto & io
Namespace for OpenFOAM.
HashSet< label, Hash< label > > labelHashSet
A HashSet of labels, uses label hasher.
Definition HashSet.H:85
static void check(const int retVal, const char *what)
const word GlobalIOList< Tuple2< scalar, vector > >::typeName("scalarVectorTable")
List< bool > boolList
A List of bools.
Definition List.H:60
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
Definition exprTraits.C:127
UList< label > labelUList
A UList of labels.
Definition UList.H:75