ENH: shm: blockLevel through ray-shooting

This commit is contained in:
Mattijs Janssens 2024-05-29 10:11:18 +00:00
parent 773548c283
commit 10b0c3cfca
4 changed files with 866 additions and 225 deletions

View File

@ -555,8 +555,21 @@ private:
label& nRefine
) const;
//- Mark cells for surface proximity based refinement.
label markProximityRefinementWave
//- Mark faces for additional proximity based testing. Extends
// testFaces
void markProximityCandidateFaces
(
const labelList& blockedSurfaces,
const List<scalarList>& regionToBlockSize,
const labelList& neiLevel,
const pointField& neiCc,
labelList& testFaces
) const;
//- Mark cells for surface proximity based refinement. Uses
// ray-shooting from markInternalGapRefinement.
label markFakeGapRefinement
(
const scalar planarCos,
const labelList& blockedSurfaces,

File diff suppressed because it is too large Load Diff

View File

@ -1954,6 +1954,59 @@ void Foam::refinementSurfaces::findNearestIntersection
}
void Foam::refinementSurfaces::findNearestIntersection
(
// const labelList& surfacesToTest,
const pointField& start,
const pointField& end,
labelList& surface1,
labelList& region1,
List<pointIndexHit>& hitInfo1,
vectorField& normal1
) const
{
// Initialize arguments
surface1.setSize(start.size());
surface1 = -1;
region1.setSize(start.size());
region1 = -1;
hitInfo1.setSize(start.size());
hitInfo1 = pointIndexHit();
normal1.setSize(start.size());
normal1 = Zero;
// Current end of segment to test.
pointField nearest(end);
// Work array
List<pointIndexHit> nearestInfo(start.size());
labelList region;
vectorField normal;
forAll(surfaces_, surfI)
{
const searchableSurface& geom = allGeometry_[surfaces_[surfI]];
// See if any intersection between start and current nearest
geom.findLine(start, nearest, nearestInfo);
geom.getRegion(nearestInfo, region);
geom.getNormal(nearestInfo, normal);
forAll(nearestInfo, pointI)
{
if (nearestInfo[pointI].hit())
{
surface1[pointI] = surfI;
region1[pointI] = region[pointI];
hitInfo1[pointI] = nearestInfo[pointI];
normal1[pointI] = normal[pointI];
nearest[pointI] = nearestInfo[pointI].point();
}
}
}
}
void Foam::refinementSurfaces::findNearestIntersection
(
const pointField& start,

View File

@ -437,6 +437,17 @@ public:
vectorField& normal
) const;
//- Find nearest (to start only) intersection of edge
void findNearestIntersection
(
const pointField& start,
const pointField& end,
labelList& surfaces,
labelList& regions,
List<pointIndexHit>&,
vectorField& normal
) const;
//- Find nearest (to start only) intersection of edge
void findNearestIntersection
(