bool Foam::faceOnlySet::trackToBoundary ( passiveParticle& singleParticle, DynamicList<point>& samplingPts, DynamicList<label>& samplingCells, DynamicList<label>& samplingFaces, DynamicList<scalar>& samplingCurveDist ) const { // distance vector between sampling points const vector offset = end_ - start_; const vector smallVec = tol*offset; const scalar smallDist = mag(smallVec); passiveParticleCloud particleCloud(mesh()); particle::TrackingData<passiveParticleCloud> trackData(particleCloud); // Alias const point& trackPt = singleParticle.position(); while(true) { point oldPoint = trackPt; singleParticle.trackToFace(end_, trackData); if (singleParticle.face() != -1 && mag(oldPoint - trackPt) > smallDist) { // Reached face. Sample. samplingPts.append(trackPt); samplingCells.append(singleParticle.cell()); samplingFaces.append(singleParticle.face()); samplingCurveDist.append(mag(trackPt - start_)); } if (mag(trackPt - end_) < smallDist) { // end reached return false; } else if (singleParticle.onBoundary()) { // Boundary reached. return true; } } }
bool Foam::faceOnlySet::trackToBoundary ( passiveParticleCloud& particleCloud, passiveParticle& singleParticle, const scalar smallDist, DynamicList<point>& samplingPts, DynamicList<label>& samplingCells, DynamicList<label>& samplingFaces, DynamicList<scalar>& samplingCurveDist ) const { particle::TrackingData<passiveParticleCloud> trackData(particleCloud); const point& trackPt = singleParticle.position(); while(true) { point oldPoint = trackPt; singleParticle.trackToFace(end_, trackData); if (singleParticle.face() != -1 && mag(oldPoint - trackPt) > smallDist) { // Reached face. Sample. samplingPts.append(trackPt); samplingCells.append(singleParticle.cell()); samplingFaces.append(singleParticle.face()); samplingCurveDist.append(mag(trackPt - start_)); } if (mag(trackPt - end_) < smallDist) { // End reached return false; } else if (singleParticle.onBoundary()) { // Boundary reached return true; } } }