Go to the documentation of this file.
30 #include "triSurface.H"
109 forAll(pointLeaves, pointI)
113 for(
label i=0;i<8;++i)
115 const label pointLeafI = pointLeaves(pointI, i);
117 if( pointLeafI == -1 )
119 validLeaf[i] =
false;
124 for(
label j=i+1;j<8;++j)
125 if( pointLeafI == pointLeaves(pointI, j) )
127 validLeaf[i] =
false;
128 validLeaf[j] =
false;
139 for(
label plI=0;plI<8;++plI)
142 const label pointLeafI = pointLeaves(pointI, plI);
147 if( lc.
level() < levelI )
149 if( subNodeLabels.
sizeOfRow(pointLeafI) != 8 )
153 subNodeLabels(pointLeafI,
k) = -1;
156 subNodeLabels(pointLeafI, (7-plI)) =
tetPoints_.size();
162 0.5 * (lv[7-plI] + lc.
centre(rootBox))
174 if( leafI != pointLeaves(nodeLabels(leafI, nlI), (7-nlI)) )
182 Info <<
"Creating face centre labels " <<
endl;
190 Info <<
"Node labels " << nodeLabels <<
endl;
200 const label nLabel = nodeLabels(leafI, nlI);
202 Info <<
"Node label[" << leafI <<
"][" << nlI <<
"] "
206 if( nodeLevel[nLabel] < level )
207 nodeLevel[nLabel] = level;
216 if( cubeLabel[cubeI] != -1 )
220 for(
label i=0;i<6;++i)
223 (faceCentreLabel.
sizeOfRow(cubeI) != 0) &&
224 (faceCentreLabel(cubeI, i) != -1)
233 label highLevelNode(-1);
234 for(
label j=0;j<4;++j)
235 if( nodeLevel[nodeLabels(cubeI, faceNodes[j])] > level )
241 if( highLevelNode == -1 )
247 if( (neighbours.
size() != 1) || (neighbours[0] == -1) )
250 if( faceCentreLabel.
sizeOfRow(cubeI) == 0 )
254 faceCentreLabel(cubeI, colI) = -1;
256 const label cNei = neighbours[0];
257 if( faceCentreLabel.
sizeOfRow(cNei) == 0 )
261 faceCentreLabel(cNei, colI) = -1;
264 faceCentreLabel(cubeI, i) =
tetPoints_.size();
294 for(
label j=0;j<4;++j)
void createPointsAndAddressing()
create tetPoints_ and necessary addressing
List< label > labelList
A List of labels.
#define forAll(list, i)
Loop across all elements in list.
point centre(const boundBox &) const
return centre
void createFaceCentreLabels()
create faceCentreLabelPtr_
const VRWGraph & nodeLabels() const
return nodeLabels
void selectElements()
find elements which will be used as mesh cells
Ostream & endl(Ostream &os)
Add newline and flush stream.
label size() const
Returns the number of rows.
meshOctreeAddressing octreeCheck_
reference to the octree
void findNeighboursInDirection(const meshOctreeCubeCoordinates &, const label dir, DynList< label > &neighbourLeaves) const
find neighbours over a leaf cube face in the given direction
label numberOfLeaves() const
return leaves of the octree
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
VRWGraph * faceCentreLabelPtr_
cube face label
#define forAllRow(graph, rowI, index)
label sizeOfRow(const label rowI) const
Returns the number of elements in the given row.
VRWGraph * subNodeLabelsPtr_
node labels of vertices created inside split-hex boxes
errorManip< error > abort(error &err)
static const label faceNodes_[6][4]
cube nodes making each face
void setSize(const label)
Reset size of List.
LongList< point > tetPoints_
points of the tetrahedrisation
const List< direction > & boxType() const
return which octree boxes are used for mesh creation
const meshOctree & octree() const
return const reference to meshOctree
const boundBox & rootBox() const
return rootBox
direction level() const
return level
A 1D vector of objects of type <T> with a fixed size <Size>.
List< labelLongList > sortedLeaves_
octree leaves sorted according to their level
label k
Boltzmann constant.
A bounding box defined in terms of the points at its extremities.
const FRWGraph< label, 8 > & nodeLeaves() const
return nodeLeaves
void size(const label)
Override size to be inconsistent with allocated storage.
label numberOfNodes() const
return number of octree nodes
void vertices(const boundBox &, FixedList< point, 8 > &) const
calculate vertices
void setRowSize(const label rowI, const label newSize)
Reset the size of the given row.
const meshOctreeCubeBasic & returnLeaf(const label) const
labelList * cubeLabelPtr_
cube centre label