From e0da094bb38c4e6d4877ddb121c68d5a6b062c8b Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 26 Feb 2009 22:43:53 +0000 Subject: [PATCH] min distance correction --- .../searchableSurfaceCollection.C | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/meshTools/searchableSurface/searchableSurfaceCollection.C b/src/meshTools/searchableSurface/searchableSurfaceCollection.C index 80666ef1f9..ce6ddd6431 100644 --- a/src/meshTools/searchableSurface/searchableSurfaceCollection.C +++ b/src/meshTools/searchableSurface/searchableSurfaceCollection.C @@ -59,43 +59,44 @@ void Foam::searchableSurfaceCollection::findNearest List hitInfo(samples.size()); + const scalarField localMinDistSqr(samples.size(), GREAT); + forAll(subGeom_, surfI) { // Transform then divide tmp localSamples = cmptDivide ( - transform_[surfI].localPosition - ( - samples - ), + transform_[surfI].localPosition(samples), scale_[surfI] ); - - subGeom_[surfI].findNearest(localSamples, minDistSqr, hitInfo); + + subGeom_[surfI].findNearest(localSamples, localMinDistSqr, hitInfo); forAll(hitInfo, pointI) { if (hitInfo[pointI].hit()) { - minDistSqr[pointI] = magSqr - ( - hitInfo[pointI].hitPoint() - - localSamples()[pointI] - ); - // Rework back into global coordinate sys. Multiply then // transform - nearestInfo[pointI] = hitInfo[pointI]; - nearestInfo[pointI].rawPoint() = - transform_[surfI].globalPosition + point globalPt = transform_[surfI].globalPosition + ( + cmptMultiply ( - cmptMultiply - ( - nearestInfo[pointI].rawPoint(), - scale_[surfI] - ) - ); - nearestSurf[pointI] = surfI; + hitInfo[pointI].rawPoint(), + scale_[surfI] + ) + ); + + scalar distSqr = magSqr(globalPt - samples[pointI]); + + if (distSqr < minDistSqr[pointI]) + { + minDistSqr[pointI] = distSqr; + nearestInfo[pointI].setPoint(globalPt); + nearestInfo[pointI].setHit(); + nearestInfo[pointI].setIndex(hitInfo[pointI].index()); + nearestSurf[pointI] = surfI; + } } } }