34 inline Foam::scalar Foam::conformalVoronoiMesh::defaultCellSize()
const
40 inline Foam::scalar Foam::conformalVoronoiMesh::targetCellSize
45 return cellShapeControls().cellSize(pt);
49 inline Foam::scalar Foam::conformalVoronoiMesh::averageAnyCellSize
51 const Vertex_handle& vA,
52 const Vertex_handle& vB
57 (!vA->internalOrBoundaryPoint() || vA->referred())
58 && (!vB->internalOrBoundaryPoint() || vB->referred())
67 targetCellSize(
topoint(vA->point()))
68 *targetCellSize(
topoint(vB->point()))
71 else if (!vB->internalOrBoundaryPoint() || vB->referred())
73 return vA->targetCellSize();
75 else if (!vA->internalOrBoundaryPoint() || vA->referred())
77 return vB->targetCellSize();
84 inline Foam::scalar Foam::conformalVoronoiMesh::averageAnyCellSize
86 const Delaunay::Finite_facets_iterator& fit
95 const Cell_handle
c(fit->first);
96 const label oppositeVertex = fit->second;
98 for (label i = 0; i < 3; i++)
100 Vertex_handle v =
c->vertex(vertex_triple_index(oppositeVertex, i));
102 if (v->internalOrBoundaryPoint() && !v->referred())
105 sizeSum += v->targetCellSize();
116 for (label i = 0; i < 3; i++)
118 Vertex_handle v =
c->vertex(vertex_triple_index(oppositeVertex, i));
120 sizeSum += targetCellSize(
topoint(v->point()));
129 <<
"sizeSum = " << sizeSum
135 return pow(sizeSum, (1.0/nProducts));
144 return targetCellSize(pt)*foamyHexMeshControls().pointPairDistanceCoeff();
154 pointPairDistance(pt)
155 *foamyHexMeshControls().mixedFeaturePointPPDistanceCoeff();
168 *foamyHexMeshControls().featurePointExclusionDistanceCoeff()
182 *foamyHexMeshControls().featureEdgeExclusionDistanceCoeff()
196 *foamyHexMeshControls().surfacePtExclusionDistanceCoeff()
210 *foamyHexMeshControls().surfaceSearchDistanceCoeff()
222 *foamyHexMeshControls().maxSurfaceProtrusionCoeff();
226 inline void Foam::conformalVoronoiMesh::createPointPair
250 vertexCount() + pts.size(),
251 Vb::vtInternalSurface,
261 vertexCount() + pts.size(),
262 Vb::vtExternalSurface,
269 ptPairs_.addPointPair
271 pts[pts.size() - 2].index(),
272 pts[pts.size() - 1].index()
287 inline Foam::point Foam::conformalVoronoiMesh::perturbPoint
297 scalar pert = 1
e-12*defaultCellSize();
299 perturbedPt.x() += pert*(rndGen_.sample01<scalar>() - 0.5);
300 perturbedPt.y() += pert*(rndGen_.sample01<scalar>() - 0.5);
301 perturbedPt.z() += pert*(rndGen_.sample01<scalar>() - 0.5);
307 inline void Foam::conformalVoronoiMesh::createBafflePointPair
323 vertexCount() + pts.size(),
324 Vb::vtInternalSurfaceBaffle,
334 vertexCount() + pts.size(),
335 Vb::vtExternalSurfaceBaffle,
342 ptPairs_.addPointPair
344 pts[pts.size() - 2].index(),
345 pts[pts.size() - 1].index()
351 inline bool Foam::conformalVoronoiMesh::internalPointIsInside
358 !geometryToConformTo_.globalBounds().contains(pt)
359 || !geometryToConformTo_.inside(pt)
369 inline bool Foam::conformalVoronoiMesh::isBoundaryDualFace
371 const Delaunay::Finite_edges_iterator& eit
374 Cell_handle
c = eit->first;
375 Vertex_handle vA =
c->vertex(eit->second);
376 Vertex_handle vB =
c->vertex(eit->third);
400 (vA->internalOrBoundaryPoint() && !vA->referred())
401 || (vB->internalOrBoundaryPoint() && !vB->referred())
404 !vA->internalOrBoundaryPoint()
405 || !vB->internalOrBoundaryPoint()
413 const Delaunay::Finite_edges_iterator& eit
416 Cell_circulator ccStart = incident_cells(*eit);
417 Cell_circulator cc1 = ccStart;
418 Cell_circulator cc2 = cc1;
424 DynamicList<bool> tmpFaceBoundaryPoints;
428 label cc1I = cc1->cellIndex();
430 label cc2I = cc2->cellIndex();
434 if (cc1->boundaryDualVertex())
436 tmpFaceBoundaryPoints.append(
true);
440 tmpFaceBoundaryPoints.append(
false);
448 }
while (cc1 != ccStart);
450 return tmpFaceBoundaryPoints;
456 const Delaunay::Finite_facets_iterator& fit
459 DynamicList<label> procsAttached(8);
461 const Cell_handle
c1(fit->first);
462 const label oppositeVertex = fit->second;
463 const Cell_handle
c2(
c1->neighbor(oppositeVertex));
471 procsAttached.appendUniq(c1Procs[aPI]);
472 procsAttached.appendUniq(c2Procs[aPI]);
475 return List<label>(procsAttached);
479 inline bool Foam::conformalVoronoiMesh::isParallelDualEdge
481 const Delaunay::Finite_facets_iterator& fit
484 const Cell_handle
c1(fit->first);
485 const label oppositeVertex = fit->second;
489 c1->vertex(vertex_triple_index(oppositeVertex, 0))->referred()
490 ||
c1->vertex(vertex_triple_index(oppositeVertex, 1))->referred()
491 ||
c1->vertex(vertex_triple_index(oppositeVertex, 2))->referred()
496 inline bool Foam::conformalVoronoiMesh::isProcBoundaryEdge
498 const Delaunay::Finite_edges_iterator& eit
501 bool isProcBoundaryEdge =
false;
503 Cell_handle
c = eit->first;
504 Vertex_handle vA =
c->vertex(eit->second);
505 Vertex_handle vB =
c->vertex(eit->third);
510 (vA->referred() && !vB->referred())
511 || (vB->referred() && !vA->referred())
513 && vA->internalOrBoundaryPoint()
514 && vB->internalOrBoundaryPoint()
517 isProcBoundaryEdge =
true;
520 return isProcBoundaryEdge;
548 return geometryToConformTo_;
558 <<
"The backgroundMeshDecomposition cannot be asked for in serial."
562 return *decomposition_;
569 return cellShapeControl_;
576 return foamyHexMeshControls_;