diff --git a/src/GridGenerator/grid/GridInterface.cu b/src/GridGenerator/grid/GridInterface.cu index 85f076fa03f88c3ab824b9602a692ef5b688a0cc..74d038f4e92f03cf3e52d0e85d0cff6205a74a93 100644 --- a/src/GridGenerator/grid/GridInterface.cu +++ b/src/GridGenerator/grid/GridInterface.cu @@ -34,8 +34,8 @@ void GridInterface::findInterfaceCF(const uint& indexOnCoarseGrid, GridImp* coar for(const auto dir : coarseGrid->distribution) { - const bool isFineGridNeighborFluid = isNeighborFineFluid(x + dir[0] * coarseGrid->getDelta(), y + dir[1] * coarseGrid->getDelta(), z + dir[2] * coarseGrid->getDelta(), coarseGrid, fineGrid); - if(!isFineGridNeighborFluid) + const bool isFineGridNeighborInvalid = isNeighborFineInvalid(x + dir[0] * coarseGrid->getDelta(), y + dir[1] * coarseGrid->getDelta(), z + dir[2] * coarseGrid->getDelta(), coarseGrid, fineGrid); + if(isFineGridNeighborInvalid) { cf.coarse[cf.numberOfEntries] = indexOnCoarseGrid; cf.fine[cf.numberOfEntries] = indexOnFineGridCF; @@ -97,9 +97,10 @@ void GridInterface::findOverlapStopper(const uint& indexOnCoarseGrid, GridImp* c if (indexOnFineGridFC == -1) return; - const bool fineGridNodeIsFluid = fineGrid->getField().isFluid(indexOnFineGridFC); - if (!fineGridNodeIsFluid) - return; + //const bool fineGridNodeIsFluid = fineGrid->getField().isFluid(indexOnFineGridFC); + //if (!fineGridNodeIsFluid) + // return; + real x, y, z; coarseGrid->transIndexToCoords(indexOnCoarseGrid, x, y, z); @@ -123,13 +124,13 @@ void GridInterface::findOverlapStopper(const uint& indexOnCoarseGrid, GridImp* c coarseGrid->getField().setFieldEntryToInvalid(indexOnCoarseGrid); } -bool GridInterface::isNeighborFineFluid(real x, real y, real z, const GridImp* coarseGrid, const GridImp* fineGrid) +bool GridInterface::isNeighborFineInvalid(real x, real y, real z, const GridImp* coarseGrid, const GridImp* fineGrid) { const int neighbor = coarseGrid->transCoordToIndex(x, y, z); const int indexOnFineGrid = getCoarseToFineIndexOnFineGrid(neighbor, coarseGrid, fineGrid); if (indexOnFineGrid == -1) - return false; - return fineGrid->getField().isFluid(indexOnFineGrid); + return true; + return fineGrid->getField().isOutOfGrid(indexOnFineGrid) || fineGrid->getField().isStopperEndOfGrid(indexOnFineGrid); } int GridInterface::getCoarseToFineIndexOnFineGrid(const uint& indexOnCoarseGrid, const GridImp* coarseGrid, const GridImp* fineGrid) diff --git a/src/GridGenerator/grid/GridInterface.h b/src/GridGenerator/grid/GridInterface.h index b37a554e1dae99c0576102b21d938b57c2c8cd9f..a81ed6992a4c38b7b05043e57eb2dce6581b8dbd 100644 --- a/src/GridGenerator/grid/GridInterface.h +++ b/src/GridGenerator/grid/GridInterface.h @@ -33,7 +33,7 @@ public: private: HOSTDEVICE int getCoarseToFineIndexOnFineGrid(const uint& indexOnCoarseGrid, const GridImp* coarseGrid, const GridImp* fineGrid); - HOSTDEVICE bool isNeighborFineFluid(real x, real y, real z, const GridImp* coarseGrid, const GridImp* fineGrid); + HOSTDEVICE bool isNeighborFineInvalid(real x, real y, real z, const GridImp* coarseGrid, const GridImp* fineGrid); HOSTDEVICE int getFineToCoarseIndexOnFineGrid(const uint& indexOnCoarseGrid, const GridImp* coarseGrid, const GridImp* fineGrid);