49 bool Foam::curveSet::trackToBoundary
51 Particle<passiveParticle>& singleParticle,
53 DynamicList<point>& samplingPts,
54 DynamicList<label>& samplingCells,
55 DynamicList<label>& samplingFaces,
56 DynamicList<scalar>& samplingCurveDist
60 const point& trackPt = singleParticle.position();
65 const vector offset = sampleCoords_[sampleI+1] - sampleCoords_[sampleI];
66 const scalar smallDist =
mag(
tol*offset);
68 point oldPos = trackPt;
72 singleParticle.stepFraction() = 0;
73 singleParticle.track(sampleCoords_[sampleI+1]);
77 !singleParticle.onBoundary()
78 && (
mag(trackPt - oldPos) < smallDist)
81 if (singleParticle.onBoundary())
87 mag(trackPt - sampleCoords_[sampleI+1])
95 samplingPts.append(trackPt);
96 samplingCells.append(singleParticle.cell());
97 samplingFaces.append(facei);
100 samplingCurveDist.append(1.0*(sampleI+1));
106 samplingPts.append(trackPt);
107 samplingCells.append(singleParticle.cell());
108 samplingFaces.append(-1);
112 mag(trackPt - sampleCoords_[sampleI])
113 /
mag(sampleCoords_[sampleI+1] - sampleCoords_[sampleI]);
114 samplingCurveDist.append(sampleI + dist);
119 if (sampleI == sampleCoords_.size() - 1)
130 void Foam::curveSet::calcSamples
132 DynamicList<point>& samplingPts,
133 DynamicList<label>& samplingCells,
134 DynamicList<label>& samplingFaces,
135 DynamicList<label>& samplingSegments,
136 DynamicList<scalar>& samplingCurveDist
140 if (sampleCoords_.size() < 2)
143 <<
"Incorrect sample specification. Too few points:"
146 point oldPoint = sampleCoords_[0];
147 for(label sampleI = 1; sampleI < sampleCoords_.size(); sampleI++)
149 if (
mag(sampleCoords_[sampleI] - oldPoint) < SMALL)
152 <<
"Incorrect sample specification."
153 <<
" Point " << sampleCoords_[sampleI-1]
154 <<
" at position " << sampleI-1
155 <<
" and point " << sampleCoords_[sampleI]
156 <<
" at position " << sampleI
159 oldPoint = sampleCoords_[sampleI];
166 label startSegmentI = 0;
170 point lastSample(GREAT, GREAT, GREAT);
175 label trackCellI = -1;
176 label trackFaceI = -1;
181 sampleCoords_[sampleI+1] - sampleCoords_[sampleI];
182 const scalar smallDist =
mag(tol*offset);
186 List<pointIndexHit> bHits = searchEngine().intersections
188 sampleCoords_[sampleI],
189 sampleCoords_[sampleI+1]
192 point bPoint(GREAT, GREAT, GREAT);
197 bPoint = bHits[0].hitPoint();
198 bFaceI = bHits[0].index();
206 sampleCoords_[sampleI+1] - sampleCoords_[sampleI],
207 sampleCoords_[sampleI],
216 if (isSample && (
mag(lastSample - trackPt) > smallDist))
226 samplingPts.append(trackPt);
227 samplingCells.append(trackCellI);
228 samplingFaces.append(trackFaceI);
233 mag(trackPt - sampleCoords_[sampleI])
234 /
mag(sampleCoords_[sampleI+1] - sampleCoords_[sampleI]);
235 samplingCurveDist.append(sampleI + dist);
237 lastSample = trackPt;
240 if (trackCellI == -1)
245 }
while((trackCellI == -1) && (sampleI < sampleCoords_.size() - 1));
247 if (sampleI == sampleCoords_.size() - 1)
260 Cloud<passiveParticle> particles(
mesh(), IDLList<passiveParticle>());
262 passiveParticle singleParticle
269 bool bReached = trackToBoundary
280 for(label i = samplingPts.size() - 1; i >= startSegmentI; --i)
282 samplingSegments.append(segmentI);
292 lastSample = singleParticle.position();
298 if (sampleI == sampleCoords_.size() - 1)
308 startSegmentI = samplingPts.size();
313 void Foam::curveSet::genSamples()
316 DynamicList<point> samplingPts;
317 DynamicList<label> samplingCells;
318 DynamicList<label> samplingFaces;
319 DynamicList<label> samplingSegments;
320 DynamicList<scalar> samplingCurveDist;
331 samplingPts.shrink();
332 samplingCells.shrink();
333 samplingFaces.shrink();
334 samplingSegments.shrink();
335 samplingCurveDist.shrink();
360 sampleCoords_(sampleCoords)
380 sampleCoords_(dict.
lookup(
"points"))