44 void Foam::rayShooting::splitLine
46 const line<point, point>& l,
48 DynamicList<Vb::Point>& initialPoints
54 const scalar minDistFromSurfaceSqr
62 magSqr(midPoint - l.start()) > minDistFromSurfaceSqr
63 &&
magSqr(midPoint - l.end()) > minDistFromSurfaceSqr
86 if (randomiseInitialGrid_)
90 midPoint.x() + pert*(
rndGen().sample01<scalar>() - 0.5),
91 midPoint.y() + pert*(
rndGen().sample01<scalar>() - 0.5),
92 midPoint.z() + pert*(
rndGen().sample01<scalar>() - 0.5)
109 <<
"Point perturbation crosses a surface. Not inserting."
123 const dictionary& initialPointsDict,
126 const conformationSurfaces& geometryToConformTo,
127 const cellShapeControl& cellShapeControls,
128 const autoPtr<backgroundMeshDecomposition>& decomposition
141 randomiseInitialGrid_(detailsDict().
get<Switch>(
"randomiseInitialGrid")),
142 randomPerturbationCoeff_
144 detailsDict().
get<scalar>(
"randomPerturbationCoeff")
154 const searchableSurfaces& surfaces = geometryToConformTo().geometry();
155 const labelList& surfacesToConformTo = geometryToConformTo().surfaces();
157 const scalar maxRayLength(surfaces.bounds().mag());
160 label initialPointsSize = 0;
163 initialPointsSize += surfaces[surfI].size();
166 DynamicList<Vb::Point> initialPoints(initialPointsSize);
168 forAll(surfacesToConformTo, surfI)
170 const searchableSurface&
s = surfaces[surfacesToConformTo[surfI]];
172 tmp<pointField> faceCentresTmp(
s.coordinates());
173 const pointField& faceCentres = faceCentresTmp();
175 Info<<
" Shoot rays from " <<
s.name() <<
nl
176 <<
" nRays = " << faceCentres.size() <<
endl;
185 && !decomposition().positionOnThisProcessor(fC)
193 randomPerturbationCoeff_
194 *cellShapeControls().cellSize(fC)
198 label hitSurfaceStart;
202 geometryToConformTo().findSurfaceNearest
211 geometryToConformTo().getNormal
214 List<pointIndexHit>(1, surfHitStart),
221 geometryToConformTo().findSurfaceNearestIntersection
223 fC - normStart[0]*pert,
224 fC - normStart[0]*maxRayLength,
229 if (surfHitEnd.hit())
232 geometryToConformTo().getNormal
235 List<pointIndexHit>(1, surfHitEnd),
239 if ((normStart[0] & normEnd[0]) < 0)
241 line<point, point> l(fC, surfHitEnd.hitPoint());
247 decomposition().findLine
253 if (procIntersection.hit())
259 procIntersection.hitPoint()
275 return initialPoints.shrink();