225 CellSizeDelaunay::Finite_vertices_iterator vit =
226 finite_vertices_begin();
227 vit != finite_vertices_end();
231 std::list<Vertex_handle> verts;
232 adjacent_vertices(vit, std::back_inserter(verts));
234 bool removePt =
true;
237 std::list<Vertex_handle>::iterator aVit = verts.begin();
245 mag(avh->targetCellSize() - vit->targetCellSize())
246 /
max(vit->targetCellSize(), 1
e-6);
267 tmp<pointField> tcellCentres(
new pointField(number_of_finite_cells()));
273 CellSizeDelaunay::Finite_cells_iterator
c = finite_cells_begin();
274 c != finite_cells_end();
278 if (
c->hasFarPoint())
288 CGAL::centroid<baseK>
290 c->vertex(0)->point(),
291 c->vertex(1)->point(),
292 c->vertex(2)->point(),
293 c->vertex(3)->point()
297 cellCentres[
count++] = centre;
300 cellCentres.resize(
count);
310 "refinementTriangulation_"
317 Info<<
"Write refinementTriangulation" <<
endl;
321 CellSizeDelaunay::Finite_edges_iterator
e = finite_edges_begin();
322 e != finite_edges_end();
326 Cell_handle
c =
e->first;
327 Vertex_handle vA =
c->vertex(
e->second);
328 Vertex_handle vB =
c->vertex(
e->third);
331 if (vA->farPoint() || vB->farPoint())
337 if (vA->referred() && vB->referred())
350 Info<<
" Triangulation is valid" <<
endl;
355 <<
"Triangulation is not valid"
363 Foam::cellShapeControlMesh::cellShapeControlMesh(
const Time&
runTime)
371 defaultCellSize_(0.0)
373 if (this->vertexCount())
387 if (
mesh.nPoints() == this->vertexCount())
409 mesh.time().timeName(),
418 if (alignments.size() == this->vertexCount())
422 Finite_vertices_iterator vit = finite_vertices_begin();
423 vit != finite_vertices_end();
427 vit->targetCellSize() = sizes[vit->index()];
428 vit->alignment() = alignments[vit->index()];
434 <<
"Cell alignments point field " << alignments.size()
435 <<
" is not the same size as the number of vertices"
436 <<
" in the mesh " << this->vertexCount()
464 if (dimension() > 2 && !is_infinite(ch))
470 topoint(ch->vertex(0)->point()),
471 topoint(ch->vertex(1)->point()),
472 topoint(ch->vertex(2)->point()),
473 topoint(ch->vertex(3)->point())
476 bary = tet.pointToBarycentric(pt);
483 DynamicList<Foam::point> pts(number_of_vertices());
487 Finite_vertices_iterator vit = finite_vertices_begin();
488 vit != finite_vertices_end();
494 pts.append(
topoint(vit->point()));
506 const backgroundMeshDecomposition& decomposition
509 DynamicList<Foam::point>
points(number_of_vertices());
510 DynamicList<scalar> sizes(number_of_vertices());
511 DynamicList<tensor> alignments(number_of_vertices());
513 DynamicList<Vb> farPts(8);
517 Finite_vertices_iterator vit = finite_vertices_begin();
518 vit != finite_vertices_end();
525 sizes.append(vit->targetCellSize());
526 alignments.append(vit->alignment());
528 else if (vit->farPoint())
541 farPts.last().targetCellSize() = vit->targetCellSize();
542 farPts.last().alignment() = vit->alignment();
546 autoPtr<mapDistribute> mapDist =
553 mapDist().distribute(sizes);
554 mapDist().distribute(alignments);
561 DynamicList<Vb> verticesToInsert(
points.size());
566 verticesToInsert.append(farPts[ptI]);
572 verticesToInsert.append
583 verticesToInsert.last().targetCellSize() = sizes[pI];
584 verticesToInsert.last().alignment() = alignments[pI];
587 Info<<
nl <<
" Inserting distributed background tessellation..." <<
endl;
589 this->rangeInsertWithInfo
591 verticesToInsert.begin(),
592 verticesToInsert.end(),
596 sync(decomposition.procBounds());
598 Info<<
" Total number of vertices after redistribution "
610 Finite_vertices_iterator vit = finite_vertices_begin();
611 vit != finite_vertices_end();
615 alignmentsTmp[
count++] = vit->alignment();
618 return alignmentsTmp;
624 Info<<
"Writing " << meshSubDir <<
endl;
630 Finite_cells_iterator cit = finite_cells_begin();
631 cit != finite_cells_end();
635 if (!cit->hasFarPoint() && !is_infinite(cit))
637 cit->cellIndex() = cellCount++;
686 Finite_vertices_iterator vit = finite_vertices_begin();
687 vit != finite_vertices_end();
691 if (!vit->farPoint())
694 sizes[vertexMap[
labelPair(vit->index(), vit->procIndex())]] =
695 vit->targetCellSize();
697 alignments[vertexMap[
labelPair(vit->index(), vit->procIndex())]] =
734 const autoPtr<backgroundMeshDecomposition>& decomposition
739 scalar cellCount = 0;
743 Finite_cells_iterator cit = finite_cells_begin();
744 cit != finite_cells_end();
748 if (!cit->hasFarPoint() && !is_infinite(cit))
751 CGAL::Tetrahedron_3<baseK> tet
753 cit->vertex(0)->point(),
754 cit->vertex(1)->point(),
755 cit->vertex(2)->point(),
756 cit->vertex(3)->point()
764 && !decomposition().positionOnThisProcessor(centre)
770 scalar
volume = CGAL::to_double(tet.volume());
772 scalar averagedPointCellSize = 0;
776 for (label vI = 0; vI < 4; ++vI)
778 averagedPointCellSize += cit->vertex(vI)->targetCellSize();
782 averagedPointCellSize /= 4;
798 cellCount +=
volume/
pow(averagedPointCellSize, 3);