void Foam::nearestToCell::combine(topoSet& set, const bool add) const
{
    // Construct search engine withouth tet decomposition.
    meshSearch queryMesh(mesh_, false);

    forAll(points_, pointI)
    {
        addOrDelete(set, queryMesh.findNearestCell(points_[pointI]), add);
    }
示例#2
0
void Foam::surfaceSets::getSurfaceSets
(
    const polyMesh& mesh,
    const fileName&,
    const triSurface&,
    const triSurfaceSearch& querySurf,
    const pointField& outsidePts,

    const label nCutLayers,

    labelHashSet& inside,
    labelHashSet& outside,
    labelHashSet& cut
)
{
    // Construct search engine on mesh
    meshSearch queryMesh(mesh);

    // Cut faces with surface and classify cells
    cellClassification cellType
    (
        mesh,
        queryMesh,
        querySurf,
        outsidePts
    );

    if (nCutLayers > 0)
    {
        // Trim cutCells so they are max nCutLayers away (as seen in point-cell
        // walk) from outside cells.
        cellType.trimCutCells
        (
            nCutLayers,
            cellClassification::OUTSIDE,
            cellClassification::INSIDE
        );
    }

    forAll(cellType, celli)
    {
        label cType = cellType[celli];

        if (cType == cellClassification::CUT)
        {
            cut.insert(celli);
        }
        else if (cType == cellClassification::INSIDE)
        {
            inside.insert(celli);
        }
        else if (cType == cellClassification::OUTSIDE)
        {
            outside.insert(celli);
        }
    }
示例#3
0
void Foam::surfaceSets::getSurfaceSets
(
    const polyMesh& mesh,
    const fileName&,
    const triSurface&,
    const triSurfaceSearch& querySurf,
    const pointField& outsidePts,

    const label nCutLayers,

    labelHashSet& inside,
    labelHashSet& outside,
    labelHashSet& cut
)
{
    // Construct search engine on mesh
    meshSearch queryMesh(mesh, true);


    // Check all 'outside' points
    forAll(outsidePts, outsideI)
    {
        const point& outsidePoint = outsidePts[outsideI];

        // Find cell point is in. Linear search.
        if (queryMesh.findCell(outsidePoint, -1, false) == -1)
        {
            FatalErrorIn
            (
                "surfaceSets::getSurfaceSets"
                "(const polyMesh&, const fileName&, const triSurface&"
                ", const triSurfaceSearch&, const pointField&"
                ", labelHashSet&, labelHashSet&, labelHashSet&)"
            )   << "outsidePoint " << outsidePoint
                << " is not inside any cell"
                << exit(FatalError);
        }
    }

    // Cut faces with surface and classify cells
    cellClassification cellType
    (
        mesh,
        queryMesh,
        querySurf,
        outsidePts
    );

    if (nCutLayers > 0)
    {
        // Trim cutCells so they are max nCutLayers away (as seen in point-cell
        // walk) from outside cells.
        cellType.trimCutCells
        (
            nCutLayers,
            cellClassification::OUTSIDE, 
            cellClassification::INSIDE
        );
    }

    forAll(cellType, cellI)
    {
        label cType = cellType[cellI];

        if (cType == cellClassification::CUT)
        {
            cut.insert(cellI);
        }
        else if (cType == cellClassification::INSIDE)
        {
            inside.insert(cellI);
        }
        else if (cType == cellClassification::OUTSIDE)
        {
            outside.insert(cellI);
        }
    }