50 bool Foam::faceOnlySet::trackToBoundary
52 Particle<passiveParticle>& singleParticle,
53 DynamicList<point>& samplingPts,
54 DynamicList<label>& samplingCells,
55 DynamicList<label>& samplingFaces,
56 DynamicList<scalar>& samplingCurveDist
60 const vector offset = end_ - start_;
62 const scalar smallDist =
mag(smallVec);
65 const point& trackPt = singleParticle.position();
69 point oldPoint = trackPt;
71 singleParticle.trackToFace(end_);
73 if (singleParticle.face() != -1 &&
mag(oldPoint - trackPt) > smallDist)
76 samplingPts.append(trackPt);
77 samplingCells.append(singleParticle.cell());
78 samplingFaces.append(singleParticle.face());
79 samplingCurveDist.append(
mag(trackPt - start_));
82 if (
mag(trackPt - end_) < smallDist)
87 else if (singleParticle.onBoundary())
96 void Foam::faceOnlySet::calcSamples
98 DynamicList<point>& samplingPts,
99 DynamicList<label>& samplingCells,
100 DynamicList<label>& samplingFaces,
101 DynamicList<label>& samplingSegments,
102 DynamicList<scalar>& samplingCurveDist
106 if (
mag(end_ - start_) < SMALL)
109 <<
"Incorrect sample specification :"
110 <<
" start equals end point." <<
endl
111 <<
" start:" << start_
116 const vector offset = (end_ - start_);
117 const vector normOffset = offset/
mag(offset);
118 const vector smallVec = tol*offset;
119 const scalar smallDist =
mag(smallVec);
123 List<pointIndexHit> bHits = searchEngine().intersections
129 point bPoint(GREAT, GREAT, GREAT);
134 bPoint = bHits[0].hitPoint();
135 bFaceI = bHits[0].index();
141 label trackCellI = -1;
142 label trackFaceI = -1;
165 if (trackCellI == -1)
176 if (trackFaceI == -1)
179 trackFaceI = findNearFace(trackCellI, trackPt, smallDist);
196 label startSegmentI = 0;
203 if (trackFaceI != -1)
206 samplingPts.append(trackPt);
207 samplingCells.append(trackCellI);
208 samplingFaces.append(trackFaceI);
209 samplingCurveDist.append(
mag(trackPt - start_));
213 Cloud<passiveParticle> particles(
mesh(), IDLList<passiveParticle>());
215 passiveParticle singleParticle
222 bool reachedBoundary = trackToBoundary
232 for(label i = samplingPts.size() - 1; i >= startSegmentI; --i)
234 samplingSegments.append(segmentI);
238 if (!reachedBoundary)
251 bool foundValidB =
false;
253 while (bHitI < bHits.size())
256 (bHits[bHitI].hitPoint() - singleParticle.position())
265 if (dist > smallDist)
284 trackFaceI = bHits[bHitI].index();
285 trackPt = pushIn(bHits[bHitI].hitPoint(), trackFaceI);
286 trackCellI = getBoundaryCell(trackFaceI);
290 startSegmentI = samplingPts.size();
295 void Foam::faceOnlySet::genSamples()
298 DynamicList<point> samplingPts;
299 DynamicList<label> samplingCells;
300 DynamicList<label> samplingFaces;
301 DynamicList<label> samplingSegments;
302 DynamicList<scalar> samplingCurveDist;
313 samplingPts.shrink();
314 samplingCells.shrink();
315 samplingFaces.shrink();
316 samplingSegments.shrink();
317 samplingCurveDist.shrink();
365 start_(dict.
lookup(
"start")),