distributedTriSurfaceMesh.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
6  \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::distributedTriSurfaceMesh
26 
27 Description
28  IOoject and searching on distributed triSurface. All processor hold
29  (possibly overlapping) part of the overall surface. All queries are
30  distributed to the processor that can answer it and the result sent back.
31 
32  Can work in three modes:
33  - follow : makes sure each processor has all the triangles inside the
34  externally provided bounding box (usually the mesh bounding box).
35  Guarantees minimum amount of communication since mesh-local queries
36  should be answerable without any comms.
37  - independent : surface is decomposed according to the triangle centres
38  so the decomposition might be radically different from the mesh
39  decomposition. Guarantees best memory balance but at the expense of
40  more communication.
41  - frozen : no change
42 
43 SourceFiles
44  distributedTriSurfaceMesh.C
45 
46 \*---------------------------------------------------------------------------*/
47 
48 #ifndef distributedTriSurfaceMesh_H
49 #define distributedTriSurfaceMesh_H
50 
51 #include "triSurfaceMesh.H"
52 #include "IOdictionary.H"
53 #include "Pair.H"
54 #include "globalIndex.H"
55 
56 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
57 
58 namespace Foam
59 {
60 
63 
64 // Typedefs
65 typedef Pair<point> segment;
66 template<>
67 inline bool contiguous<segment>() {return contiguous<point>();}
68 
69 
70 /*---------------------------------------------------------------------------*\
71  Class distributedTriSurfaceMesh Declaration
72 \*---------------------------------------------------------------------------*/
73 
75 :
76  public triSurfaceMesh
77 {
78 public:
79 
80  // Static data
81 
82  enum distributionType
83  {
84  FOLLOW = 0,
86  FROZEN = 2
87  };
88 
90 
91 private:
92 
93  // Private member data
94 
95  //- Merging distance
96  scalar mergeDist_;
97 
99 
100  //- Decomposition used when independently decomposing surface.
102 
103  //- Bounding box settings
105 
106  //- Bounding boxes of all processors
108 
109  //- Global triangle numbering
111 
112  //- The distribution type.
114 
115 
116  // Private Member Functions
117 
118  // Read
119 
120  //- Read my additional data
121  bool read();
122 
123 
124  // Line intersection
125 
126  static bool isLocal
127  (
128  const List<treeBoundBox>& myBbs,
129  const point& start,
130  const point& end
131  );
132 
133  //- Split segment into subsegments overlapping the processor
134  // bounding box.
135  //void Foam::distributedTriSurfaceMesh::splitSegment
136  //(
137  // const label segmentI,
138  // const point& start,
139  // const point& end,
140  // const treeBoundBox& bb,
141  //
142  // DynamicList<segment>& allSegments,
143  // DynamicList<label>& allSegmentMap,
144  // DynamicList<label> sendMap
145  //) const
146 
147  //- Distribute segments into overlapping processor
148  // bounding boxes. Sort per processor.
149  void distributeSegment
150  (
151  const label,
152  const point& start,
153  const point& end,
154 
158  ) const;
159 
160  //- Divide edges into local and remote segments. Construct map to
161  // distribute and collect data.
163  (
164  const pointField& start,
165  const pointField& end,
166 
167  List<segment>& allSegments,
168  List<label>& allSegmentMap
169  ) const;
170 
171  //- Split edges, distribute, test and collect.
172  void findLine
173  (
174  const bool nearestIntersection,
175  const pointField& start,
176  const pointField& end,
178  ) const;
179 
180 
181  // Triangle index
182 
183  //- Obtains global indices from pointIndexHit and swaps them back
184  // to their original processor. Used to calculate local region
185  // and normal.
187  (
188  const List<pointIndexHit>&,
189  labelList& triangleIndex
190  ) const;
191 
192 
193  // Nearest
194 
196  (
197  const point& centre,
198  const scalar radiusSqr,
200  ) const;
201 
203  (
204  const pointField& centres,
205  const scalarField& radiusSqr,
206 
207  pointField& allCentres,
208  scalarField& allRadiusSqr,
209  labelList& allSegmentMap
210  ) const;
211 
212 
213  // Surface redistribution
214 
215  //- Finds new bounds based on an indepedent decomposition.
217  (
218  const triSurface&
219  );
220 
221  //- Does any part of triangle overlap bb.
222  static bool overlaps
223  (
224  const List<treeBoundBox>& bb,
225  const point& p0,
226  const point& p1,
227  const point& p2
228  );
229 
230  //- Find points used in subset
231  static void subsetMeshMap
232  (
233  const triSurface& s,
234  const boolList& include,
235  const label nIncluded,
236  labelList& newToOldPoints,
237  labelList& oldToNewPoints,
238  labelList& newToOldFaces
239  );
240 
241  //- Construct subsetted surface
242  static triSurface subsetMesh
243  (
244  const triSurface& s,
245  const labelList& newToOldPoints,
246  const labelList& oldToNewPoints,
247  const labelList& newToOldFaces
248  );
249 
250  //- Subset given marked faces
251  static triSurface subsetMesh
252  (
253  const triSurface& s,
254  const boolList& include,
255  labelList& newToOldPoints,
256  labelList& newToOldFaces
257  );
258 
259  //- Subset given marked faces
260  static triSurface subsetMesh
261  (
262  const triSurface& s,
263  const labelList& newToOldFaces,
264  labelList& newToOldPoints
265  );
266 
267  //- Find triangle otherF in allFaces.
268  static label findTriangle
269  (
270  const List<labelledTri>& allFaces,
271  const labelListList& allPointFaces,
272  const labelledTri& otherF
273  );
274 
275  //- Merge triSurface (subTris, subPoints) into allTris, allPoints.
276  static void merge
277  (
278  const scalar mergeDist,
279  const List<labelledTri>& subTris,
280  const pointField& subPoints,
281 
282  List<labelledTri>& allTris,
284 
285  labelList& faceConstructMap,
286  labelList& pointConstructMap
287  );
288 
289  //- Distribute stored fields
290  template<class Type>
291  void distributeFields(const mapDistribute& map);
292 
293 
294  //- Disallow default bitwise copy construct
296 
297  //- Disallow default bitwise assignment
299 
300 
301 public:
302 
303  //- Runtime type information
304  TypeName("distributedTriSurfaceMesh");
305 
306 
307  // Constructors
308 
309  //- Construct from triSurface
311  (
312  const IOobject&,
313  const triSurface&,
314  const dictionary& dict
315  );
316 
317  //- Construct read. Does findInstance to find io.local().
319 
320  //- Construct from dictionary (used by searchableSurface).
321  // Does read. Does findInstance to find io.local().
323  (
324  const IOobject& io,
325  const dictionary& dict
326  );
327 
328 
329  //- Destructor
330  virtual ~distributedTriSurfaceMesh();
331 
332  //- Clear storage
333  void clearOut();
334 
335 
336  // Member Functions
337 
338  //- Triangle indexing (demand driven)
339  const globalIndex& globalTris() const;
340 
341 
342  // searchableSurface implementation
343 
344  //- Whether supports volume type below. I.e. whether is closed.
345  // Not supported.
346  virtual bool hasVolumeType() const
347  {
348  return false;
349  }
350 
351  //- Range of global indices that can be returned.
352  virtual label globalSize() const
353  {
354  return globalTris().size();
355  }
356 
357  virtual void findNearest
358  (
359  const pointField& sample,
360  const scalarField& nearestDistSqr,
362  ) const;
363 
364  virtual void findLine
365  (
366  const pointField& start,
367  const pointField& end,
369  ) const;
370 
371  virtual void findLineAny
372  (
373  const pointField& start,
374  const pointField& end,
376  ) const;
377 
378  //- Get all intersections in order from start to end.
379  virtual void findLineAll
380  (
381  const pointField& start,
382  const pointField& end,
384  ) const;
385 
386  //- From a set of points and indices get the region
387  virtual void getRegion
388  (
389  const List<pointIndexHit>&,
390  labelList& region
391  ) const;
392 
393  //- From a set of points and indices get the normal
394  virtual void getNormal
395  (
396  const List<pointIndexHit>&,
398  ) const;
399 
400  //- Determine type (inside/outside/mixed) for point. unknown if
401  // cannot be determined (e.g. non-manifold surface)
402  virtual void getVolumeType
403  (
404  const pointField&,
406  ) const;
407 
408  //- Set bounds of surface. Bounds currently set as list of
409  // bounding boxes. Will do redistribution of surface to locally
410  // have all triangles overlapping bounds.
411  // Larger bounds: more triangles (memory), more fully local tests
412  // (quick).
413  // keepNonLocal = true : keep triangles that do not overlap
414  // any processor bounds.
415  // Should really be split into a routine to determine decomposition
416  // and one that does actual distribution but determining
417  // decomposition with duplicate triangle merging requires
418  // same amount as work as actual distribution.
419  virtual void distribute
420  (
421  const List<treeBoundBox>&,
422  const bool keepNonLocal,
424  autoPtr<mapDistribute>& pointMap
425  );
426 
427 
428  // Other
429 
430  //- WIP. From a set of hits (points and
431  // indices) get the specified field. Misses do not get set.
432  virtual void getField(const List<pointIndexHit>&, labelList&) const;
433 
434  //- Subset the part of surface that is overlapping bounds.
436  (
437  const triSurface&,
438  const List<treeBoundBox>&,
439  labelList& subPointMap,
440  labelList& subFaceMap
441  );
442 
443  //- Print some stats. Parallel aware version of
444  // triSurface::writeStats.
445  void writeStats(Ostream& os) const;
446 
447 
448  // regIOobject implementation
449 
450  //- Write using given format, version and compression
451  // Do not use the triSurfaceMesh::writeObject since it
452  // would filter out empty regions. These need to be preserved
453  // in case we want to make decisions based on the number of
454  // regions.
455  virtual bool writeObject
456  (
460  ) const;
461 
462 };
463 
464 
465 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
466 
467 } // End namespace Foam
468 
469 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
470 
471 #ifdef NoRepository
473 #endif
474 
475 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
476 
477 #endif
478 
479 // ************************************************************************* //
Foam::IOdictionary
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
Definition: IOdictionary.H:53
Foam::IOobject
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:91
Foam::faceMap
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
Definition: blockMeshMergeFast.C:90
Foam::distributedTriSurfaceMesh::globalTris_
autoPtr< globalIndex > globalTris_
Global triangle numbering.
Definition: distributedTriSurfaceMesh.H:109
Foam::DynamicList
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects.
Definition: DynamicList.H:56
Foam::distributedTriSurfaceMesh::distType_
distributionType distType_
The distribution type.
Definition: distributedTriSurfaceMesh.H:112
Foam::IOstream::compressionType
compressionType
Enumeration for the format of data in the stream.
Definition: IOstream.H:193
globalIndex.H
Foam::distributedTriSurfaceMesh::clearOut
void clearOut()
Clear storage.
Definition: distributedTriSurfaceMesh.C:1530
Foam::distributedTriSurfaceMesh::isLocal
static bool isLocal(const List< treeBoundBox > &myBbs, const point &start, const point &end)
Definition: distributedTriSurfaceMesh.C:97
Foam::distributedTriSurfaceMesh::distributionTypeNames_
static const NamedEnum< distributionType, 3 > distributionTypeNames_
Definition: distributedTriSurfaceMesh.H:88
Foam::distributedTriSurfaceMesh::distributeSegment
void distributeSegment(const label, const point &start, const point &end, DynamicList< segment > &, DynamicList< label > &, List< DynamicList< label > > &) const
Split segment into subsegments overlapping the processor.
Definition: distributedTriSurfaceMesh.C:177
Foam::triSurfaceMesh
IOoject and searching on triSurface.
Definition: triSurfaceMesh.H:63
Pair.H
Foam::distributedTriSurfaceMesh::independentlyDistributedBbs
List< List< treeBoundBox > > independentlyDistributedBbs(const triSurface &)
Finds new bounds based on an indepedent decomposition.
Definition: distributedTriSurfaceMesh.C:813
Foam::distributedTriSurfaceMesh::writeStats
void writeStats(Ostream &os) const
Print some stats. Parallel aware version of.
Definition: distributedTriSurfaceMesh.C:2462
Foam::distributedTriSurfaceMesh::findLine
void findLine(const bool nearestIntersection, const pointField &start, const pointField &end, List< pointIndexHit > &info) const
Split edges, distribute, test and collect.
Definition: distributedTriSurfaceMesh.C:359
Foam::IOobject::info
InfoProxy< IOobject > info() const
Return info proxy.
Definition: IOobject.H:434
Foam::distributedTriSurfaceMesh::getRegion
virtual void getRegion(const List< pointIndexHit > &, labelList &region) const
From a set of points and indices get the region.
Definition: distributedTriSurfaceMesh.C:1855
Foam::distributedTriSurfaceMesh::FROZEN
@ FROZEN
Definition: distributedTriSurfaceMesh.H:85
Foam::distributedTriSurfaceMesh::findNearest
virtual void findNearest(const pointField &sample, const scalarField &nearestDistSqr, List< pointIndexHit > &) const
Definition: distributedTriSurfaceMesh.C:1550
Foam::distributedTriSurfaceMesh::distributionType
distributionType
Definition: distributedTriSurfaceMesh.H:81
Foam::distributedTriSurfaceMesh::procBb_
List< List< treeBoundBox > > procBb_
Bounding boxes of all processors.
Definition: distributedTriSurfaceMesh.H:106
Foam::IOstream::versionNumber
Version number type.
Definition: IOstream.H:96
Foam::distributedTriSurfaceMesh::globalTris
const globalIndex & globalTris() const
Triangle indexing (demand driven)
Definition: distributedTriSurfaceMesh.C:1539
Foam::distributedTriSurfaceMesh::overlaps
static bool overlaps(const List< treeBoundBox > &bb, const point &p0, const point &p1, const point &p2)
Does any part of triangle overlap bb.
Definition: distributedTriSurfaceMesh.C:933
Foam::distributedTriSurfaceMesh::getField
virtual void getField(const List< pointIndexHit > &, labelList &) const
WIP. From a set of hits (points and.
Definition: distributedTriSurfaceMesh.C:1965
Foam::distributedTriSurfaceMesh::subsetMeshMap
static void subsetMeshMap(const triSurface &s, const boolList &include, const label nIncluded, labelList &newToOldPoints, labelList &oldToNewPoints, labelList &newToOldFaces)
Find points used in subset.
Definition: distributedTriSurfaceMesh.C:980
Foam::label
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
Foam::distributedTriSurfaceMesh::dict_
IOdictionary dict_
Bounding box settings.
Definition: distributedTriSurfaceMesh.H:103
Foam::Field
Pre-declare SubField and related Field type.
Definition: Field.H:57
Foam::triSurface
Triangulated surface description with patch information.
Definition: triSurface.H:57
Foam::distributedTriSurfaceMesh::decomposer_
autoPtr< decompositionMethod > decomposer_
Decomposition used when independently decomposing surface.
Definition: distributedTriSurfaceMesh.H:100
Foam::mapDistribute
Class containing processor-to-processor mapping information.
Definition: mapDistribute.H:152
Foam::distributedTriSurfaceMesh::getVolumeType
virtual void getVolumeType(const pointField &, List< volumeType > &) const
Determine type (inside/outside/mixed) for point. unknown if.
Definition: distributedTriSurfaceMesh.C:2020
Foam::distributedTriSurfaceMesh::findTriangle
static label findTriangle(const List< labelledTri > &allFaces, const labelListList &allPointFaces, const labelledTri &otherF)
Find triangle otherF in allFaces.
Definition: distributedTriSurfaceMesh.C:1152
Foam::distributedTriSurfaceMesh::subsetMesh
static triSurface subsetMesh(const triSurface &s, const labelList &newToOldPoints, const labelList &oldToNewPoints, const labelList &newToOldFaces)
Construct subsetted surface.
Definition: distributedTriSurfaceMesh.C:1025
Foam::distributedTriSurfaceMesh::INDEPENDENT
@ INDEPENDENT
Definition: distributedTriSurfaceMesh.H:84
Foam::distributedTriSurfaceMesh::calcOverlappingProcs
label calcOverlappingProcs(const point &centre, const scalar radiusSqr, boolList &overlaps) const
Definition: distributedTriSurfaceMesh.C:662
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::segment
Pair< point > segment
Definition: distributedTriSurfaceMesh.H:61
Foam::dictionary
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:137
Foam::decompositionMethod
Abstract base class for decomposition.
Definition: decompositionMethod.H:48
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::globalIndex
Calculates a unique integer (label so might not have enough room - 2G max) for processor + local inde...
Definition: globalIndex.H:63
s
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Foam::distributedTriSurfaceMesh::TypeName
TypeName("distributedTriSurfaceMesh")
Runtime type information.
Foam::distributedTriSurfaceMesh::getNormal
virtual void getNormal(const List< pointIndexHit > &, vectorField &normal) const
From a set of points and indices get the normal.
Definition: distributedTriSurfaceMesh.C:1915
Foam::distributedTriSurfaceMesh::hasVolumeType
virtual bool hasVolumeType() const
Whether supports volume type below. I.e. whether is closed.
Definition: distributedTriSurfaceMesh.H:345
Foam::distributedTriSurfaceMesh::read
bool read()
Read my additional data.
Definition: distributedTriSurfaceMesh.C:76
Foam::distributedTriSurfaceMesh::merge
static void merge(const scalar mergeDist, const List< labelledTri > &subTris, const pointField &subPoints, List< labelledTri > &allTris, pointField &allPoints, labelList &faceConstructMap, labelList &pointConstructMap)
Merge triSurface (subTris, subPoints) into allTris, allPoints.
Definition: distributedTriSurfaceMesh.C:1185
IOdictionary.H
Foam::distributedTriSurfaceMesh::distribute
virtual void distribute(const List< treeBoundBox > &, const bool keepNonLocal, autoPtr< mapDistribute > &faceMap, autoPtr< mapDistribute > &pointMap)
Set bounds of surface. Bounds currently set as list of.
Definition: distributedTriSurfaceMesh.C:2074
Foam::autoPtr
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: PtrList.H:117
Foam::distributedTriSurfaceMesh::~distributedTriSurfaceMesh
virtual ~distributedTriSurfaceMesh()
Destructor.
Definition: distributedTriSurfaceMesh.C:1524
Foam::distributedTriSurfaceMesh::mergeDist_
scalar mergeDist_
Merging distance.
Definition: distributedTriSurfaceMesh.H:95
Foam::distributedTriSurfaceMesh::findLineAll
virtual void findLineAll(const pointField &start, const pointField &end, List< List< pointIndexHit > > &) const
Get all intersections in order from start to end.
Definition: distributedTriSurfaceMesh.C:1741
Foam::distributedTriSurfaceMesh::operator=
void operator=(const distributedTriSurfaceMesh &)
Disallow default bitwise assignment.
Foam::distributedTriSurfaceMesh::FOLLOW
@ FOLLOW
Definition: distributedTriSurfaceMesh.H:83
Foam::Pair
An ordered pair of two objects of type <T> with first() and second() elements.
Definition: contiguous.H:49
Foam::globalIndex::size
label size() const
Global sum of localSizes.
Definition: globalIndexI.H:66
Foam::Vector< scalar >
Foam::List
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: HashTable.H:59
Foam::distributedTriSurfaceMesh
IOoject and searching on distributed triSurface. All processor hold (possibly overlapping) part of th...
Definition: distributedTriSurfaceMesh.H:73
Foam::distributedTriSurfaceMesh::writeObject
virtual bool writeObject(IOstream::streamFormat fmt, IOstream::versionNumber ver, IOstream::compressionType cmp) const
Write using given format, version and compression.
Definition: distributedTriSurfaceMesh.C:2428
Foam::labelledTri
Triangle with additional region number.
Definition: labelledTri.H:49
Foam::distributedTriSurfaceMesh::distributedTriSurfaceMesh
distributedTriSurfaceMesh(const distributedTriSurfaceMesh &)
Disallow default bitwise copy construct.
Foam::distributedTriSurfaceMesh::findLineAny
virtual void findLineAny(const pointField &start, const pointField &end, List< pointIndexHit > &) const
Return any intersection on segment from start to end.
Definition: distributedTriSurfaceMesh.C:1724
Foam::distributedTriSurfaceMesh::globalSize
virtual label globalSize() const
Range of global indices that can be returned.
Definition: distributedTriSurfaceMesh.H:351
Foam::DelaunayMeshTools::allPoints
tmp< pointField > allPoints(const Triangulation &t)
Extract all points in vertex-index order.
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:53
Foam::distributedTriSurfaceMesh::overlappingSurface
static triSurface overlappingSurface(const triSurface &, const List< treeBoundBox > &, labelList &subPointMap, labelList &subFaceMap)
Subset the part of surface that is overlapping bounds.
Definition: distributedTriSurfaceMesh.C:2033
Foam::contiguous< segment >
bool contiguous< segment >()
Definition: distributedTriSurfaceMesh.H:66
Foam::distributedTriSurfaceMesh::distributeFields
void distributeFields(const mapDistribute &map)
Distribute stored fields.
Definition: distributedTriSurfaceMeshTemplates.C:85
Foam::distributedTriSurfaceMesh::decomposeParDict_
autoPtr< IOdictionary > decomposeParDict_
Definition: distributedTriSurfaceMesh.H:97
triSurfaceMesh.H
distributedTriSurfaceMeshTemplates.C
Foam::distributedTriSurfaceMesh::calcLocalQueries
autoPtr< mapDistribute > calcLocalQueries(const List< pointIndexHit > &, labelList &triangleIndex) const
Obtains global indices from pointIndexHit and swaps them back.
Definition: distributedTriSurfaceMesh.C:543
Foam::distributedTriSurfaceMesh::distributeSegments
autoPtr< mapDistribute > distributeSegments(const pointField &start, const pointField &end, List< segment > &allSegments, List< label > &allSegmentMap) const
Divide edges into local and remote segments. Construct map to.
Definition: distributedTriSurfaceMesh.C:258
Foam::NamedEnum< distributionType, 3 >
normal
A normal distribution model.
Foam::IOstream::streamFormat
streamFormat
Enumeration for the format of data in the stream.
Definition: IOstream.H:86