51 bool Foam::uniformSet::nextSample
53 const point& currentPt,
55 const scalar smallDist,
60 bool pointFound =
false;
62 const vector normOffset = offset/
mag(offset);
67 for(; sampleI < nPoints_; sampleI++)
69 scalar s = (samplePt - currentPt) & normOffset;
86 bool Foam::uniformSet::trackToBoundary
88 Particle<passiveParticle>& singleParticle,
91 DynamicList<point>& samplingPts,
92 DynamicList<label>& samplingCells,
93 DynamicList<label>& samplingFaces,
94 DynamicList<scalar>& samplingCurveDist
98 const vector offset = (end_ - start_)/(nPoints_ - 1);
99 const vector smallVec = tol*offset;
100 const scalar smallDist =
mag(smallVec);
103 const point& trackPt = singleParticle.position();
108 if (!nextSample(trackPt, offset, smallDist, samplePt, sampleI))
113 Info<<
"trackToBoundary : Reached end : samplePt now:"
114 << samplePt <<
" sampleI now:" << sampleI <<
endl;
119 if (
mag(samplePt - trackPt) < smallDist)
124 Info<<
"trackToBoundary : samplePt corresponds to trackPt : "
125 <<
" trackPt:" << trackPt <<
" samplePt:" << samplePt
129 samplingPts.append(trackPt);
130 samplingCells.append(singleParticle.cell());
131 samplingFaces.append(-1);
132 samplingCurveDist.append(
mag(trackPt - start_));
135 if (!nextSample(trackPt, offset, smallDist, samplePt, sampleI))
140 Info<<
"trackToBoundary : Reached end : "
141 <<
" samplePt now:" << samplePt
142 <<
" sampleI now:" << sampleI
153 Info<<
"Searching along trajectory from "
154 <<
" trackPt:" << trackPt
155 <<
" trackCellI:" << singleParticle.cell()
156 <<
" to:" << samplePt <<
endl;
159 point oldPos = trackPt;
163 singleParticle.stepFraction() = 0;
164 singleParticle.track(samplePt);
168 Info<<
"Result of tracking "
169 <<
" trackPt:" << trackPt
170 <<
" trackCellI:" << singleParticle.cell()
171 <<
" trackFaceI:" << singleParticle.face()
172 <<
" onBoundary:" << singleParticle.onBoundary()
173 <<
" samplePt:" << samplePt
174 <<
" smallDist:" << smallDist
180 !singleParticle.onBoundary()
181 && (
mag(trackPt - oldPos) < smallDist)
184 if (singleParticle.onBoundary())
187 if (
mag(trackPt - samplePt) < smallDist)
192 samplingPts.append(trackPt);
193 samplingCells.append(singleParticle.cell());
194 samplingFaces.append(facei);
195 samplingCurveDist.append(
mag(trackPt - start_));
203 samplingPts.append(trackPt);
204 samplingCells.append(singleParticle.cell());
205 samplingFaces.append(-1);
206 samplingCurveDist.append(
mag(trackPt - start_));
213 void Foam::uniformSet::calcSamples
215 DynamicList<point>& samplingPts,
216 DynamicList<label>& samplingCells,
217 DynamicList<label>& samplingFaces,
218 DynamicList<label>& samplingSegments,
219 DynamicList<scalar>& samplingCurveDist
223 if ((nPoints_ < 2) || (
mag(end_ - start_) < SMALL))
226 <<
"Incorrect sample specification. Either too few points or"
227 <<
" start equals end point." <<
endl
228 <<
"nPoints:" << nPoints_
229 <<
" start:" << start_
234 const vector offset = (end_ - start_)/(nPoints_ - 1);
235 const vector normOffset = offset/
mag(offset);
236 const vector smallVec = tol*offset;
237 const scalar smallDist =
mag(smallVec);
240 List<pointIndexHit> bHits = searchEngine().intersections
246 point bPoint(GREAT, GREAT, GREAT);
251 bPoint = bHits[0].hitPoint();
252 bFaceI = bHits[0].index();
258 label trackCellI = -1;
259 label trackFaceI = -1;
274 if (trackCellI == -1)
285 samplingPts.append(start_);
286 samplingCells.append(trackCellI);
287 samplingFaces.append(trackFaceI);
288 samplingCurveDist.append(0.0);
299 label startSegmentI = 0;
302 point samplePt = start_;
310 Cloud<passiveParticle> particles(
mesh(), IDLList<passiveParticle>());
312 passiveParticle singleParticle
319 bool reachedBoundary = trackToBoundary
331 for(label i = samplingPts.size() - 1; i >= startSegmentI; --i)
333 samplingSegments.append(segmentI);
337 if (!reachedBoundary)
341 Info<<
"calcSamples : Reached end of samples: "
342 <<
" samplePt now:" << samplePt
343 <<
" sampleI now:" << sampleI
350 bool foundValidB =
false;
352 while (bHitI < bHits.size())
355 (bHits[bHitI].hitPoint() - singleParticle.position())
360 Info<<
"Finding next boundary : "
361 <<
"bPoint:" << bHits[bHitI].hitPoint()
362 <<
" tracking:" << singleParticle.position()
367 if (dist > smallDist)
387 trackPt = pushIn(bPoint, trackFaceI);
388 trackCellI = getBoundaryCell(trackFaceI);
392 startSegmentI = samplingPts.size();
397 void Foam::uniformSet::genSamples()
400 DynamicList<point> samplingPts;
401 DynamicList<label> samplingCells;
402 DynamicList<label> samplingFaces;
403 DynamicList<label> samplingSegments;
404 DynamicList<scalar> samplingCurveDist;
415 samplingPts.shrink();
416 samplingCells.shrink();
417 samplingFaces.shrink();
418 samplingSegments.shrink();
419 samplingCurveDist.shrink();
467 start_(dict.
lookup(
"start")),
469 nPoints_(readLabel(dict.
lookup(
"nPoints")))