diff --git a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H index 4d7e8d5549..1165046636 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H +++ b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangle.H @@ -166,8 +166,8 @@ public: const intersection::direction dir = intersection::VECTOR ) const; - //- Fast intersection with a ray. Distance is normal distance - // to the intersection. + //- Fast intersection with a ray. Distance is normalised distance + // to the intersection (normalised with the vector magnitude). // For a hit, the distance is signed. Positive number // represents the point in front of triangle. In case of miss // pointHit position is undefined. diff --git a/src/autoMesh/autoHexMesh/trackedParticle/ExactParticle.C b/src/autoMesh/autoHexMesh/trackedParticle/ExactParticle.C index 2f58e5cc03..237e35276c 100644 --- a/src/autoMesh/autoHexMesh/trackedParticle/ExactParticle.C +++ b/src/autoMesh/autoHexMesh/trackedParticle/ExactParticle.C @@ -73,7 +73,7 @@ Foam::scalar Foam::ExactParticle::trackToFace const labelList& cFaces = mesh.cells()[this->celli_]; point intersection(vector::zero); - scalar distanceSqr = VGREAT; + scalar trackFraction = VGREAT; label hitFacei = -1; const vector vec = endPosition-this->position_; @@ -93,16 +93,11 @@ Foam::scalar Foam::ExactParticle::trackToFace intersection::HALF_RAY ); - if (inter.hit()) + if (inter.hit() && inter.distance() < trackFraction) { - scalar s = magSqr(inter.hitPoint()-this->position_); - - if (s < distanceSqr) - { - distanceSqr = s; - hitFacei = facei; - intersection = inter.hitPoint(); - } + trackFraction = inter.distance(); + hitFacei = facei; + intersection = inter.hitPoint(); } } } @@ -118,12 +113,10 @@ Foam::scalar Foam::ExactParticle::trackToFace ); } - - scalar trackFraction = Foam::sqrt(distanceSqr/magSqr(vec)); - if (trackFraction >= (1.0-SMALL)) { // Nearest intersection beyond endPosition so we hit endPosition. + trackFraction = 1.0; this->position_ = endPosition; this->facei_ = -1; return 1.0; diff --git a/src/meshTools/indexedOctree/treeDataFace.C b/src/meshTools/indexedOctree/treeDataFace.C index ffcbd0c06c..f86c487f4e 100644 --- a/src/meshTools/indexedOctree/treeDataFace.C +++ b/src/meshTools/indexedOctree/treeDataFace.C @@ -528,7 +528,7 @@ bool Foam::treeDataFace::intersects intersection::HALF_RAY ); - if (inter.hit() && magSqr(inter.hitPoint()-start) <= magSqr(dir)) + if (inter.hit() && inter.distance() <= 1) { // Note: no extra test on whether intersection is in front of us // since using half_ray diff --git a/src/meshTools/indexedOctree/treeDataTriSurface.C b/src/meshTools/indexedOctree/treeDataTriSurface.C index c1a16f7128..ea519291e3 100644 --- a/src/meshTools/indexedOctree/treeDataTriSurface.C +++ b/src/meshTools/indexedOctree/treeDataTriSurface.C @@ -456,7 +456,7 @@ bool Foam::treeDataTriSurface::intersects indexedOctree::perturbTol() ); - if (inter.hit() && magSqr(inter.hitPoint()-start) <= magSqr(dir)) + if (inter.hit() && inter.distance() <= 1) { // Note: no extra test on whether intersection is in front of us // since using half_ray.