meshOctreeAddressing.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | cfMesh: A library for mesh generation
4  \\ / O peration |
5  \\ / A nd | Author: Franjo Juretic (franjo.juretic@c-fields.com)
6  \\/ M anipulation | Copyright (C) Creative Fields, Ltd.
7 -------------------------------------------------------------------------------
8 License
9  This file is part of cfMesh.
10 
11  cfMesh is free software; you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by the
13  Free Software Foundation; either version 3 of the License, or (at your
14  option) any later version.
15 
16  cfMesh 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 cfMesh. If not, see <http://www.gnu.org/licenses/>.
23 
24 Description
25 
26 \*---------------------------------------------------------------------------*/
27 
28 #include "meshOctreeAddressing.H"
29 #include "demandDrivenData.H"
30 #include "IOdictionary.H"
31 #include "helperFunctions.H"
32 #include "triSurf.H"
33 #include "meshOctreeModifier.H"
34 
35 // #define DEBUGSearch
36 
37 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
38 
39 namespace Foam
40 {
41 
43 {
45  clearBoxTypes();
49 }
50 
52 {
53  nNodes_ = 0;
57 
59 }
60 
62 {
64 }
65 
67 {
71 }
72 
74 {
84 }
85 
87 {
97 }
98 
99 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
100 
101 // Construct from octree and IOdictionary
103 (
104  const meshOctree& mo,
105  const dictionary& dict,
106  bool useDATABoxes
107 )
108 :
109  octree_(mo),
110  meshDict_(dict),
111  useDATABoxes_(useDATABoxes),
112  nNodes_(0),
113  octreePointsPtr_(NULL),
114  nodeLabelsPtr_(NULL),
115  nodeLeavesPtr_(NULL),
116  boxTypePtr_(NULL),
117  nodeTypePtr_(NULL),
118  octreeFacesPtr_(NULL),
119  octreeFacesOwnersPtr_(NULL),
120  octreeFacesNeighboursPtr_(NULL),
121  leafFacesPtr_(NULL),
122  nodeFacesPtr_(NULL),
123  leafLeavesPtr_(NULL),
124  octreeEdgesPtr_(NULL),
125  edgeLeavesPtr_(NULL),
126  leafEdgesPtr_(NULL),
127  nodeEdgesPtr_(NULL),
128  faceEdgesPtr_(NULL),
129  edgeFacesPtr_(NULL),
130  globalPointLabelPtr_(NULL),
131  globalPointToLocalPtr_(NULL),
132  pointProcsPtr_(NULL),
133  globalFaceLabelPtr_(NULL),
134  globalFaceToLocalPtr_(NULL),
135  faceProcsPtr_(NULL),
136  globalLeafLabelPtr_(NULL),
137  globalLeafToLocalPtr_(NULL),
138  leafAtProcsPtr_(NULL)
139 {
140  if( !useDATABoxes && dict.found("keepCellsIntersectingBoundary") )
141  {
142  useDATABoxes_ = readBool(dict.lookup("keepCellsIntersectingBoundary"));
143  }
144 
145  if( dict.found("nonManifoldMeshing") )
146  {
147  const bool nonManifoldMesh
148  (
149  readBool(dict.lookup("nonManifoldMeshing"))
150  );
151 
152  if( nonManifoldMesh )
153  useDATABoxes_ = true;
154  }
155 
156  if( Pstream::parRun() )
157  {
158  meshOctreeModifier om(const_cast<meshOctree&>(octree_));
160  }
161 
162  //- check for glued regions
163  checkGluedRegions();
164 }
165 
166 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
167 
169 {
170  clearOut();
171 }
172 
173 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
174 
176 {
177  const labelLongList& owner = octreeFaceOwner();
178  const labelLongList& neighbour = octreeFaceNeighbour();
179 
180  if( neighbour[fI] < 0 )
181  return false;
182 
183  Map<label> nAppearances;
184  DynList<label> triangles;
185  octree_.containedTriangles(owner[fI], triangles);
186  forAll(triangles, triI)
187  {
188  if( nAppearances.found(triangles[triI]) )
189  {
190  ++nAppearances[triangles[triI]];
191  }
192  else
193  {
194  nAppearances.insert(triangles[triI], 1);
195  }
196  }
197 
198  triangles.clear();
199  octree_.containedTriangles(neighbour[fI], triangles);
200  forAll(triangles, triI)
201  {
202  if( nAppearances.found(triangles[triI]) )
203  {
204  ++nAppearances[triangles[triI]];
205  }
206  else
207  {
208  nAppearances.insert(triangles[triI], 1);
209  }
210  }
211 
212  forAllConstIter(Map<label>, nAppearances, iter)
213  {
214  if( iter() == 2 )
215  {
216  if
217  (
218  octree_.returnLeaf(owner[fI]).level() ==
219  octree_.returnLeaf(neighbour[fI]).level()
220  )
221  return true;
222 
223  //- check intersection by geometric testing
224  const triSurf& surf = octree_.surface();
225  const pointField& points = this->octreePoints();
226  const VRWGraph& faces = this->octreeFaces();
227 
228  face f(faces.sizeOfRow(fI));
229  forAll(f, pI)
230  f[pI] = faces(fI, pI);
231 
232  if(
234  (
235  surf,
236  iter.key(),
237  f,
238  points
239  )
240  )
241  return true;
242  }
243  }
244 
245  return false;
246 }
247 
249 {
250  const VRWGraph& edgeCubes = this->edgeLeaves();
251 
252  Map<label> nAppearances;
253  DynList<label> triangles;
254  bool sameLevel(true);
255 
256  forAllRow(edgeCubes, eI, i)
257  {
258  const label leafI = edgeCubes(eI, i);
259  if( !octree_.hasContainedTriangles(leafI) )
260  return false;
261 
262  if
263  (
264  octree_.returnLeaf(leafI).level() !=
265  octree_.returnLeaf(edgeCubes(eI, 0)).level()
266  )
267  sameLevel = false;
268 
269  triangles.clear();
270  octree_.containedTriangles(leafI, triangles);
271  forAll(triangles, triI)
272  {
273  if( nAppearances.found(triangles[triI]) )
274  {
275  ++nAppearances[triangles[triI]];
276  }
277  else
278  {
279  nAppearances.insert(triangles[triI], 1);
280  }
281  }
282  }
283 
284  forAllConstIter(Map<label>, nAppearances, iter)
285  {
286  if( iter() == edgeCubes.sizeOfRow(eI) )
287  {
288  if( sameLevel )
289  return true;
290 
291  //- check for geometric intersection
292  const LongList<edge>& edges = this->octreeEdges();
293  const pointField& points = this->octreePoints();
295 
296  if(
298  (
299  octree_.surface(),
300  iter.key(),
301  points[edges[eI].start()],
302  points[edges[eI].end()],
304  )
305  )
306  return true;
307  }
308  }
309 
310  return false;
311 }
312 
314 (
315  const label eI,
316  DynList<point>& intersections
317 ) const
318 {
319  intersections.clear();
320 
321  const LongList<edge>& edges = this->octreeEdges();
322  const pointField& points = this->octreePoints();
323  const VRWGraph& edgeCubes = this->edgeLeaves();
324  const scalar tol =
325  SMALL * mag(points[edges[eI].start()] - points[edges[eI].end()]);
326 
327  Map<label> nAppearances;
328  DynList<label> triangles;
329 
330  forAllRow(edgeCubes, eI, i)
331  {
332  const label leafI = edgeCubes(eI, i);
333  if( !octree_.hasContainedTriangles(leafI) )
334  return;
335 
336  triangles.clear();
337  octree_.containedTriangles(leafI, triangles);
338  forAll(triangles, triI)
339  {
340  if( nAppearances.found(triangles[triI]) )
341  {
342  ++nAppearances[triangles[triI]];
343  }
344  else
345  {
346  nAppearances.insert(triangles[triI], 1);
347  }
348  }
349  }
350 
352 
353  forAllConstIter(Map<label>, nAppearances, iter)
354  {
355  if( iter() == edgeCubes.sizeOfRow(eI) )
356  {
357  //- check for geometric intersection
358  const bool intersectionExists =
360  (
361  octree_.surface(),
362  iter.key(),
363  points[edges[eI].start()],
364  points[edges[eI].end()],
366  );
367 
368  if( intersectionExists )
369  {
370  bool store(true);
371  forAll(intersections, i)
372  if( mag(intersections[i] - intersection) <= tol )
373  store = false;
374 
375  if( store )
376  intersections.append(intersection);
377  }
378  }
379  }
380 }
381 
383 (
384  const label leafI,
385  const direction eI,
386  FixedList<label, 4>& edgeCubes
387 ) const
388 {
389  const VRWGraph& nl = this->nodeLabels();
390  const label nodeI = nl(leafI, meshOctreeCubeCoordinates::edgeNodes_[eI][0]);
391  const FRWGraph<label, 8>& pLeaves = this->nodeLeaves();
392 
393  switch( eI )
394  {
395  case 0: case 1: case 2: case 3:
396  {
397  edgeCubes[0] = pLeaves(nodeI, 1);
398  edgeCubes[1] = pLeaves(nodeI, 3);
399  edgeCubes[2] = pLeaves(nodeI, 5);
400  edgeCubes[3] = pLeaves(nodeI, 7);
401  } break;
402  case 4: case 5: case 6: case 7:
403  {
404  edgeCubes[0] = pLeaves(nodeI, 2);
405  edgeCubes[1] = pLeaves(nodeI, 3);
406  edgeCubes[2] = pLeaves(nodeI, 6);
407  edgeCubes[3] = pLeaves(nodeI, 7);
408  } break;
409  case 8: case 9: case 10: case 11:
410  {
411  edgeCubes[0] = pLeaves(nodeI, 4);
412  edgeCubes[1] = pLeaves(nodeI, 5);
413  edgeCubes[2] = pLeaves(nodeI, 6);
414  edgeCubes[3] = pLeaves(nodeI, 7);
415  } break;
416  default:
417  {
419  (
420  "void tetMeshExtractorOctree::cubesAroundEdge(const label,"
421  "const direction, FixedList<label, 4>&)"
422  ) << "Invalid edge specified!!" << abort(FatalError);
423  } break;
424  };
425 }
426 
428 (
429  const label leafI,
430  const direction eI
431 ) const
432 {
433  if( octree_.isQuadtree() && eI >= 8 )
434  return -1;
435 
436  const meshOctreeCubeBasic& oc = octree_.returnLeaf(leafI);
437  const VRWGraph& nl = this->nodeLabels();
438  const label nodeI = nl(leafI, meshOctreeCubeCoordinates::edgeNodes_[eI][0]);
439  const FRWGraph<label, 8>& pLeaves = this->nodeLeaves();
440 
441  const direction level = oc.level();
442 
443  label fI(-1);
444  switch( eI )
445  {
446  case 0: case 1: case 2: case 3:
447  {
448  fI = 1;
449  } break;
450  case 4: case 5: case 6: case 7:
451  {
452  fI = 3;
453  } break;
454  case 8: case 9: case 10: case 11:
455  {
456  fI = 5;
457  } break;
458  default:
459  {
461  (
462  "label meshOctreeAddressing::findEdgeCentre"
463  "(const label leafI, const direction eI) const"
464  ) << "Invalid edge specified!!" << abort(FatalError);
465  } break;
466  };
467 
468  for(label i=0;i<4;++i)
469  {
470  const label fNode = meshOctreeCubeCoordinates::faceNodes_[fI][i];
471 
472  if( pLeaves(nodeI, fNode) < 0 )
473  continue;
474 
475  const label leafJ = pLeaves(nodeI, fNode);
476  if( octree_.returnLeaf(leafJ).level() > level )
477  {
478  const label shift = (i+2)%4;
479  return nl(leafJ, meshOctreeCubeCoordinates::faceNodes_[fI][shift]);
480  }
481  }
482 
483  return -1;
484 }
485 
486 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
487 
488 } // End namespace Foam
489 
490 // ************************************************************************* //
Foam::meshOctreeAddressing::globalPointLabelPtr_
labelLongList * globalPointLabelPtr_
global octree point label
Definition: meshOctreeAddressing.H:123
Foam::meshOctreeAddressing::leafEdgesPtr_
VRWGraph * leafEdgesPtr_
leaf-edges addressing
Definition: meshOctreeAddressing.H:111
Foam::meshOctreeAddressing::nodeEdgesPtr_
VRWGraph * nodeEdgesPtr_
node-edges addressing
Definition: meshOctreeAddressing.H:114
Foam::help::doFaceAndTriangleIntersect
bool doFaceAndTriangleIntersect(const triSurf &surface, const label triI, const face &f, const pointField &facePoints)
check if the surface triangle and the face intersect
Definition: helperFunctionsGeometryQueriesI.H:805
triSurf.H
Foam::Vector< scalar >::zero
static const Vector zero
Definition: Vector.H:80
Foam::meshOctreeAddressing::globalFaceLabelPtr_
labelLongList * globalFaceLabelPtr_
global octree face label
Definition: meshOctreeAddressing.H:132
Foam::meshOctreeAddressing::globalPointToLocalPtr_
Map< label > * globalPointToLocalPtr_
global point to local label addressing
Definition: meshOctreeAddressing.H:126
Foam::meshOctreeAddressing::faceEdgesPtr_
VRWGraph * faceEdgesPtr_
face-edges addressing
Definition: meshOctreeAddressing.H:117
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:406
Foam::meshOctreeAddressing::leafLeavesPtr_
VRWGraph * leafLeavesPtr_
leaf-leaves addressing
Definition: meshOctreeAddressing.H:102
Foam::meshOctreeAddressing::cubesAroundEdge
void cubesAroundEdge(const label leafI, const direction eI, FixedList< label, 4 > &edgeCubes) const
find cubes around an edge (cubes must be at the same level)
Definition: meshOctreeAddressing.C:383
Foam::meshOctreeModifier::addLayerFromNeighbouringProcessors
void addLayerFromNeighbouringProcessors()
Definition: meshOctreeModifierParallelRefinement.C:200
Foam::meshOctreeAddressing::octreeFacesNeighboursPtr_
labelLongList * octreeFacesNeighboursPtr_
Definition: meshOctreeAddressing.H:93
demandDrivenData.H
Template functions to aid in the implementation of demand driven data.
Foam::meshOctreeAddressing::clearAddressing
void clearAddressing()
Definition: meshOctreeAddressing.C:73
Foam::meshOctree::containedTriangles
void containedTriangles(const label, DynList< label > &) const
Definition: meshOctreeI.H:81
Foam::UPstream::parRun
static bool & parRun()
Is this a parallel run?
Definition: UPstream.H:377
Foam::meshOctreeAddressing::clearOut
void clearOut()
Clear allocated data.
Definition: meshOctreeAddressing.C:42
Foam::dictionary::lookup
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
Definition: dictionary.C:449
Foam::meshOctreeAddressing::octreePointsPtr_
pointField * octreePointsPtr_
coordinates of octree nodes
Definition: meshOctreeAddressing.H:75
Foam::meshOctreeAddressing::edgeFacesPtr_
VRWGraph * edgeFacesPtr_
edge-faces addressing
Definition: meshOctreeAddressing.H:120
Foam::Map< label >
Foam::mag
dimensioned< scalar > mag(const dimensioned< Type > &)
Foam::meshOctreeAddressing::globalLeafLabelPtr_
labelLongList * globalLeafLabelPtr_
global leaf label
Definition: meshOctreeAddressing.H:141
Foam::meshOctreeAddressing::clearNodeAddressing
void clearNodeAddressing()
Definition: meshOctreeAddressing.C:51
Foam::meshOctreeAddressing::octreeFacesOwnersPtr_
labelLongList * octreeFacesOwnersPtr_
Definition: meshOctreeAddressing.H:92
Foam::meshOctreeAddressing::octreeFaceOwner
const labelLongList & octreeFaceOwner() const
return owners of octree faces
Definition: meshOctreeAddressingI.H:110
Foam::meshOctreeModifier
Definition: meshOctreeModifier.H:48
Foam::meshOctreeAddressing::nodeTypePtr_
List< direction > * nodeTypePtr_
identify created nodes as OUTERNODE or INNERNODE
Definition: meshOctreeAddressing.H:87
meshOctreeModifier.H
forAllConstIter
forAllConstIter(PtrDictionary< phaseModel >, mixture.phases(), phase)
Definition: pEqn.H:39
Foam::meshOctreeAddressing::clearParallelAddressing
void clearParallelAddressing()
Definition: meshOctreeAddressing.C:86
Foam::LongList< label >
Foam::deleteDemandDrivenData
void deleteDemandDrivenData(DataPtr &dataPtr)
Definition: demandDrivenData.H:40
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::meshOctreeAddressing::~meshOctreeAddressing
~meshOctreeAddressing()
Definition: meshOctreeAddressing.C:168
Foam::dictionary::found
bool found(const word &, bool recursive=false, bool patternMatch=true) const
Search dictionary for given keyword.
Definition: dictionary.C:304
Foam::Field
Pre-declare SubField and related Field type.
Definition: Field.H:57
Foam::nl
static const char nl
Definition: Ostream.H:260
Foam::meshOctreeAddressing::clearBoxTypes
void clearBoxTypes()
Definition: meshOctreeAddressing.C:61
Foam::meshOctreeAddressing::isIntersectedFace
bool isIntersectedFace(const label fI) const
checks if the face is intersected by the surface
Definition: meshOctreeAddressing.C:175
Foam::meshOctreeAddressing::boxTypePtr_
List< direction > * boxTypePtr_
identify which boxes should be used as mesh cells
Definition: meshOctreeAddressing.H:84
forAllRow
#define forAllRow(graph, rowI, index)
Definition: VRWGraph.H:277
Foam::meshOctreeAddressing::nodeLeavesPtr_
FRWGraph< label, 8 > * nodeLeavesPtr_
node leaves
Definition: meshOctreeAddressing.H:81
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::VRWGraph::sizeOfRow
label sizeOfRow(const label rowI) const
Returns the number of elements in the given row.
Definition: VRWGraphI.H:127
Foam::meshOctreeAddressing::clearOctreeFaces
void clearOctreeFaces()
Definition: meshOctreeAddressing.C:66
Foam::FatalError
error FatalError
Foam::dictionary
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:137
Foam::meshOctreeAddressing::edgeLeaves
const VRWGraph & edgeLeaves() const
return edge-leaves addressing
Definition: meshOctreeAddressingI.H:158
Foam::help::triLineIntersection
bool triLineIntersection(const triangle< point, point > &tria, const point &lineStart, const point &lineEnd, point &intersection)
check if a line intersects the triangle, and return the intersection
Definition: helperFunctionsGeometryQueriesI.H:653
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::abort
errorManip< error > abort(error &err)
Definition: errorManip.H:131
meshOctreeAddressing.H
Foam::DynList< label >
Foam::meshOctreeCubeCoordinates::edgeNodes_
static const label edgeNodes_[12][2]
edge nodes for an octree cube
Definition: meshOctreeCubeCoordinates.H:70
Foam::meshOctreeCubeCoordinates::faceNodes_
static const label faceNodes_[6][4]
cube nodes making each face
Definition: meshOctreeCubeCoordinates.H:73
Foam::meshOctreeAddressing::octreeFaceNeighbour
const labelLongList & octreeFaceNeighbour() const
return neighbours of octree faces
Definition: meshOctreeAddressingI.H:118
Foam::meshOctreeAddressing::octreeEdgesPtr_
LongList< edge > * octreeEdgesPtr_
edges of the octree
Definition: meshOctreeAddressing.H:105
Foam::meshOctreeAddressing::globalFaceToLocalPtr_
Map< label > * globalFaceToLocalPtr_
global face label to local label addressing
Definition: meshOctreeAddressing.H:135
Foam::meshOctreeAddressing::pointProcsPtr_
VRWGraph * pointProcsPtr_
point-processors addressing
Definition: meshOctreeAddressing.H:129
IOdictionary.H
Foam::meshOctreeAddressing::faceProcsPtr_
VRWGraph * faceProcsPtr_
face-processors addressing
Definition: meshOctreeAddressing.H:138
Foam::meshOctreeAddressing::octreeFacesPtr_
VRWGraph * octreeFacesPtr_
faces of the octree
Definition: meshOctreeAddressing.H:91
Foam::meshOctreeAddressing::nNodes_
label nNodes_
number of created octree nodes
Definition: meshOctreeAddressing.H:72
Foam::meshOctreeAddressing::meshOctreeAddressing
meshOctreeAddressing(const meshOctreeAddressing &)
Disallow default bitwise copy construct.
Foam::meshOctreeCubeCoordinates::level
direction level() const
return level
Definition: meshOctreeCubeCoordinatesI.H:74
helperFunctions.H
f
labelList f(nPoints)
Foam::Vector< scalar >
Foam::meshOctreeAddressing::edgeLeavesPtr_
VRWGraph * edgeLeavesPtr_
edges-leaves addressing
Definition: meshOctreeAddressing.H:108
Foam::meshOctree
Definition: meshOctree.H:55
Foam::meshOctreeAddressing::nodeFacesPtr_
VRWGraph * nodeFacesPtr_
node-faces addressing
Definition: meshOctreeAddressing.H:99
Foam::FixedList< label, 4 >
points
const pointField & points
Definition: gmvOutputHeader.H:1
Foam::intersection
Foam::intersection.
Definition: intersection.H:49
Foam::meshOctreeAddressing::octreeEdges
const LongList< edge > & octreeEdges() const
return octree edges, created for MESHCELL boxes
Definition: meshOctreeAddressingI.H:150
Foam::direction
unsigned char direction
Definition: direction.H:43
Foam::meshOctreeAddressing::isIntersectedEdge
bool isIntersectedEdge(const label eI) const
checks if the edge is intersected by the surface
Definition: meshOctreeAddressing.C:248
Foam::meshOctree::hasContainedTriangles
bool hasContainedTriangles(const label) const
Definition: meshOctreeI.H:72
Foam::meshOctreeAddressing::globalLeafToLocalPtr_
Map< label > * globalLeafToLocalPtr_
global leaf label to local label addressing for octree leaves
Definition: meshOctreeAddressing.H:144
Foam::meshOctreeAddressing::nodeLabelsPtr_
VRWGraph * nodeLabelsPtr_
node labels
Definition: meshOctreeAddressing.H:78
Foam::meshOctreeAddressing::octreePoints
const pointField & octreePoints() const
return coordinates of octree vertices
Definition: meshOctreeAddressingI.H:44
FatalErrorIn
#define FatalErrorIn(functionName)
Report an error message using Foam::FatalError.
Definition: error.H:313
Foam::face
A face is a list of labels corresponding to mesh vertices.
Definition: face.H:75
Foam::readBool
bool readBool(Istream &)
Definition: boolIO.C:60
Foam::meshOctreeAddressing::octreeFaces
const VRWGraph & octreeFaces() const
return octree faces, created for MESHCELL boxes
Definition: meshOctreeAddressingI.H:102
Foam::meshOctreeAddressing::findEdgeCentre
label findEdgeCentre(const label leafI, const direction eI) const
find edge centre if it exists
Definition: meshOctreeAddressing.C:428
Foam::meshOctree::surface
const triSurf & surface() const
return a reference to the surface
Definition: meshOctreeI.H:130
Foam::meshOctreeAddressing::octree_
const meshOctree & octree_
reference to the octree
Definition: meshOctreeAddressing.H:63
Foam::FRWGraph< label, 8 >
Foam::VRWGraph
Definition: VRWGraph.H:101
Foam::triSurf
Definition: triSurf.H:59
Foam::meshOctreeAddressing::leafAtProcsPtr_
VRWGraph * leafAtProcsPtr_
leaf at procs
Definition: meshOctreeAddressing.H:147
Foam::meshOctreeAddressing::edgeIntersections
void edgeIntersections(const label eI, DynList< point > &intersections) const
Definition: meshOctreeAddressing.C:314
Foam::meshOctree::returnLeaf
const meshOctreeCubeBasic & returnLeaf(const label) const
Definition: meshOctreeI.H:60
Foam::DynList::clear
void clear()
Clear the list, i.e. set next free to zero.
Definition: DynListI.H:279
Foam::meshOctreeCubeBasic
Definition: meshOctreeCubeBasic.H:49
Foam::DynList::append
void append(const T &e)
Append an element at the end of the list.
Definition: DynListI.H:304
Foam::meshOctreeAddressing::leafFacesPtr_
VRWGraph * leafFacesPtr_
octree box-faces addressing
Definition: meshOctreeAddressing.H:96