From c2c9681bff31b3dbd5ca3fc6ab39cd8e0e3c10e2 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs@hunt.opencfd.co.uk> Date: Mon, 1 Jun 2009 16:25:24 +0100 Subject: [PATCH] optional merging of sub-regions --- .../searchableSurfaceCollection.C | 77 +++++++++++++------ .../searchableSurfaceCollection.H | 3 + 2 files changed, 58 insertions(+), 22 deletions(-) diff --git a/src/meshTools/searchableSurface/searchableSurfaceCollection.C b/src/meshTools/searchableSurface/searchableSurfaceCollection.C index 11b37bf97bb..306e78df25f 100644 --- a/src/meshTools/searchableSurface/searchableSurfaceCollection.C +++ b/src/meshTools/searchableSurface/searchableSurfaceCollection.C @@ -36,7 +36,12 @@ namespace Foam { defineTypeNameAndDebug(searchableSurfaceCollection, 0); -addToRunTimeSelectionTable(searchableSurface, searchableSurfaceCollection, dict); +addToRunTimeSelectionTable +( + searchableSurface, + searchableSurfaceCollection, + dict +); } @@ -63,15 +68,17 @@ void Foam::searchableSurfaceCollection::findNearest forAll(subGeom_, surfI) { - // Transform then divide - tmp<pointField> localSamples = cmptDivide + subGeom_[surfI].findNearest ( - transform_[surfI].localPosition(samples), - scale_[surfI] + cmptDivide // Transform then divide + ( + transform_[surfI].localPosition(samples), + scale_[surfI] + ), + localMinDistSqr, + hitInfo ); - subGeom_[surfI].findNearest(localSamples, localMinDistSqr, hitInfo); - forAll(hitInfo, pointI) { if (hitInfo[pointI].hit()) @@ -115,7 +122,8 @@ Foam::searchableSurfaceCollection::searchableSurfaceCollection instance_(dict.size()), scale_(dict.size()), transform_(dict.size()), - subGeom_(dict.size()) + subGeom_(dict.size()), + mergeSubRegions_(dict.lookup("mergeSubRegions")) { Info<< "SearchableCollection : " << name() << endl; @@ -181,12 +189,19 @@ const Foam::wordList& Foam::searchableSurfaceCollection::regions() const { regionOffset_[surfI] = allRegions.size(); - const wordList& subRegions = subGeom_[surfI].regions(); - - forAll(subRegions, i) + if (mergeSubRegions_) { - //allRegions.append(subRegions[i] + "_" + Foam::name(surfI)); - allRegions.append(instance_[surfI] + "_" + subRegions[i]); + // Single name regardless how many regions subsurface has + allRegions.append(instance_[surfI] + "_" + Foam::name(surfI)); + } + else + { + const wordList& subRegions = subGeom_[surfI].regions(); + + forAll(subRegions, i) + { + allRegions.append(instance_[surfI] + "_" + subRegions[i]); + } } } regions_.transfer(allRegions.shrink()); @@ -370,7 +385,15 @@ void Foam::searchableSurfaceCollection::getRegion {} else if (subGeom_.size() == 1) { - subGeom_[0].getRegion(info, region); + if (mergeSubRegions_) + { + region.setSize(info.size()); + region = regionOffset_[0]; + } + else + { + subGeom_[0].getRegion(info, region); + } } else { @@ -429,15 +452,25 @@ void Foam::searchableSurfaceCollection::getRegion // Collect points from my surface labelList indices(findIndices(nearestSurf, surfI)); - labelList surfRegion; - subGeom_[surfI].getRegion - ( - UIndirectList<pointIndexHit>(info, indices), - surfRegion - ); - forAll(indices, i) + if (mergeSubRegions_) { - region[indices[i]] = regionOffset_[surfI] + surfRegion[i]; + forAll(indices, i) + { + region[indices[i]] = regionOffset_[surfI]; + } + } + else + { + labelList surfRegion; + subGeom_[surfI].getRegion + ( + UIndirectList<pointIndexHit>(info, indices), + surfRegion + ); + forAll(indices, i) + { + region[indices[i]] = regionOffset_[surfI] + surfRegion[i]; + } } } } diff --git a/src/meshTools/searchableSurface/searchableSurfaceCollection.H b/src/meshTools/searchableSurface/searchableSurfaceCollection.H index 9c39923747f..2004bf9400c 100644 --- a/src/meshTools/searchableSurface/searchableSurfaceCollection.H +++ b/src/meshTools/searchableSurface/searchableSurfaceCollection.H @@ -40,6 +40,7 @@ SourceFiles #include "treeBoundBox.H" #include "coordinateSystem.H" #include "UPtrList.H" +#include "Switch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -73,6 +74,8 @@ private: UPtrList<searchableSurface> subGeom_; + Switch mergeSubRegions_; + //- Region names mutable wordList regions_; //- From individual regions to collection regions -- GitLab