From 3ab793b050d43acef050d33fdb886c34d2c1e364 Mon Sep 17 00:00:00 2001 From: mattijs <m.janssens@opencfd.co.uk> Date: Tue, 19 Aug 2008 13:53:26 +0100 Subject: [PATCH] additional test for repatching --- .../refinementSurfaces/refinementSurfaces.C | 90 ++++++++++++++++++- .../refinementSurfaces/refinementSurfaces.H | 18 +++- 2 files changed, 103 insertions(+), 5 deletions(-) diff --git a/src/autoMesh/autoHexMesh/refinementSurfaces/refinementSurfaces.C b/src/autoMesh/autoHexMesh/refinementSurfaces/refinementSurfaces.C index ce09e597e24..1654e3cd7fc 100644 --- a/src/autoMesh/autoHexMesh/refinementSurfaces/refinementSurfaces.C +++ b/src/autoMesh/autoHexMesh/refinementSurfaces/refinementSurfaces.C @@ -377,15 +377,34 @@ Foam::refinementSurfaces::refinementSurfaces // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -// Get indices of named surfaces (surfaces with cellZoneName) +// Get indices of unnamed surfaces (surfaces without faceZoneName) +Foam::labelList Foam::refinementSurfaces::getUnnamedSurfaces() const +{ + labelList anonymousSurfaces(faceZoneNames_.size()); + + label i = 0; + forAll(faceZoneNames_, surfI) + { + if (faceZoneNames_[surfI].size() == 0) + { + anonymousSurfaces[i++] = surfI; + } + } + anonymousSurfaces.setSize(i); + + return anonymousSurfaces; +} + + +// Get indices of named surfaces (surfaces with faceZoneName) Foam::labelList Foam::refinementSurfaces::getNamedSurfaces() const { - labelList namedSurfaces(cellZoneNames_.size()); + labelList namedSurfaces(faceZoneNames_.size()); label namedI = 0; - forAll(cellZoneNames_, surfI) + forAll(faceZoneNames_, surfI) { - if (cellZoneNames_[surfI].size() > 0) + if (faceZoneNames_[surfI].size() > 0) { namedSurfaces[namedI++] = surfI; } @@ -846,6 +865,69 @@ void Foam::refinementSurfaces::findNearest } +void Foam::refinementSurfaces::findNearestRegion +( + const labelList& surfacesToTest, + const pointField& samples, + const scalarField& nearestDistSqr, + labelList& hitSurface, + labelList& hitRegion +) const +{ + labelList geometries(IndirectList<label>(surfaces_, surfacesToTest)); + + // Do the tests. Note that findNearest returns index in geometries. + List<pointIndexHit> hitInfo; + searchableSurfacesQueries::findNearest + ( + allGeometry_, + geometries, + samples, + nearestDistSqr, + hitSurface, + hitInfo + ); + + // Rework the hitSurface to be surface (i.e. index into surfaces_) + forAll(hitSurface, pointI) + { + if (hitSurface[pointI] != -1) + { + hitSurface[pointI] = surfacesToTest[hitSurface[pointI]]; + } + } + + // Collect the region + hitRegion.setSize(hitSurface.size()); + hitRegion = -1; + + forAll(surfacesToTest, i) + { + label surfI = surfacesToTest[i]; + + // Collect hits for surfI + const labelList localIndices(findIndices(hitSurface, surfI)); + + List<pointIndexHit> localHits + ( + IndirectList<pointIndexHit> + ( + hitInfo, + localIndices + ) + ); + + labelList localRegion; + allGeometry_[surfaces_[surfI]].getRegion(localHits, localRegion); + + forAll(localIndices, i) + { + hitRegion[localIndices[i]] = localRegion[i]; + } + } +} + + //// Find intersection with max of edge. Return -1 or the surface //// with the highest maxLevel above currentLevel //Foam::label Foam::refinementSurfaces::findHighestIntersection diff --git a/src/autoMesh/autoHexMesh/refinementSurfaces/refinementSurfaces.H b/src/autoMesh/autoHexMesh/refinementSurfaces/refinementSurfaces.H index edb613d966f..ee5dd219a54 100644 --- a/src/autoMesh/autoHexMesh/refinementSurfaces/refinementSurfaces.H +++ b/src/autoMesh/autoHexMesh/refinementSurfaces/refinementSurfaces.H @@ -154,7 +154,10 @@ public: return cellZoneNames_; } - //- Get indices of named surfaces (surfaces with cellZoneName) + //- Get indices of named surfaces (surfaces with faceZoneName) + labelList getUnnamedSurfaces() const; + + //- Get indices of named surfaces (surfaces with faceZoneName) labelList getNamedSurfaces() const; //- Get indices of closed named surfaces @@ -249,6 +252,8 @@ public: //- Find intersection nearest to the endpoints. surface1,2 are // not indices into surfacesToTest but refinement surface indices. + // Returns surface, region on surface (so not global surface) + // and position on surface. void findNearestIntersection ( const labelList& surfacesToTest, @@ -282,6 +287,17 @@ public: List<pointIndexHit>& ) const; + //- Find nearest point on surfaces. Return surface and region on + // surface (so not global surface) + void findNearestRegion + ( + const labelList& surfacesToTest, + const pointField& samples, + const scalarField& nearestDistSqr, + labelList& hitSurface, + labelList& hitRegion + ) const; + //- Detect if a point is 'inside' (closed) surfaces. // Returns -1 if not, returns first surface it is. void findInside -- GitLab