diff --git a/src/mesh/autoMesh/autoHexMesh/refinementFeatures/refinementFeatures.C b/src/mesh/autoMesh/autoHexMesh/refinementFeatures/refinementFeatures.C index 56533c0b00..0cdd440d1a 100644 --- a/src/mesh/autoMesh/autoHexMesh/refinementFeatures/refinementFeatures.C +++ b/src/mesh/autoMesh/autoHexMesh/refinementFeatures/refinementFeatures.C @@ -26,21 +26,14 @@ License #include "refinementFeatures.H" #include "Time.H" -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -Foam::refinementFeatures::refinementFeatures +void Foam::refinementFeatures::read ( const objectRegistry& io, const PtrList& featDicts ) -: - PtrList(featDicts.size()), - levels_(featDicts.size()), - edgeTrees_(featDicts.size()), - pointTrees_(featDicts.size()) { - // Read features - forAll(featDicts, i) { const dictionary& dict = featDicts[i]; @@ -75,50 +68,87 @@ Foam::refinementFeatures::refinementFeatures << " (" << eMesh.points().size() << " points, " << eMesh.edges().size() << " edges)." << endl; } +} +void Foam::refinementFeatures::buildTrees +( + const label featI, + const labelList& featurePoints +) +{ + const featureEdgeMesh& eMesh = operator[](featI); + const pointField& points = eMesh.points(); + const edgeList& edges = eMesh.edges(); + + // Calculate bb of all points + treeBoundBox bb(points); + + // Random number generator. Bit dodgy since not exactly random ;-) + Random rndGen(65431); + + // Slightly extended bb. Slightly off-centred just so on symmetric + // geometry there are less face/edge aligned items. + bb = bb.extend(rndGen, 1e-4); + bb.min() -= point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL); + bb.max() += point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL); + + edgeTrees_.set + ( + featI, + new indexedOctree + ( + treeDataEdge + ( + false, // do not cache bb + edges, + points, + identity(edges.size()) + ), + bb, // overall search domain + 8, // maxLevel + 10, // leafsize + 3.0 // duplicity + ) + ); + + pointTrees_.set + ( + featI, + new indexedOctree + ( + treeDataPoint(points, featurePoints), + bb, // overall search domain + 8, // maxLevel + 10, // leafsize + 3.0 // duplicity + ) + ); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::refinementFeatures::refinementFeatures +( + const objectRegistry& io, + const PtrList& featDicts +) +: + PtrList(featDicts.size()), + levels_(featDicts.size()), + edgeTrees_(featDicts.size()), + pointTrees_(featDicts.size()) +{ + // Read features + read(io, featDicts); + // Search engines - forAll(*this, i) { const featureEdgeMesh& eMesh = operator[](i); - const pointField& points = eMesh.points(); - const edgeList& edges = eMesh.edges(); - - // Calculate bb of all points - treeBoundBox bb(points); - - // Random number generator. Bit dodgy since not exactly random ;-) - Random rndGen(65431); - - // Slightly extended bb. Slightly off-centred just so on symmetric - // geometry there are less face/edge aligned items. - bb = bb.extend(rndGen, 1e-4); - bb.min() -= point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL); - bb.max() += point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL); - - edgeTrees_.set - ( - i, - new indexedOctree - ( - treeDataEdge - ( - false, // do not cache bb - edges, - points, - identity(edges.size()) - ), - bb, // overall search domain - 8, // maxLevel - 10, // leafsize - 3.0 // duplicity - ) - ); - - - // Detect feature points from edges. const labelListList& pointEdges = eMesh.pointEdges(); + DynamicList