diff --git a/src/gpu/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h index 25f8d9da924599793519f4441ecf3088833b2cb3..b04dc643f363f0c61a466a03eec2b771d909460a 100644 --- a/src/gpu/GridGenerator/grid/Grid.h +++ b/src/gpu/GridGenerator/grid/Grid.h @@ -28,6 +28,10 @@ public: HOSTDEVICE virtual uint getSparseSize() const = 0; HOSTDEVICE virtual uint getSize() const = 0; + CUDA_HOST virtual void findMatrixIDsGEO_FLUID(uint *typeOfGridNode) = 0; + HOSTDEVICE virtual uint getGeoFluidSize() const = 0; + HOSTDEVICE virtual const std::vector<uint> &getGeoFluidNodes() const = 0; + HOSTDEVICE virtual real getStartX() const = 0; HOSTDEVICE virtual real getStartY() const = 0; HOSTDEVICE virtual real getStartZ() const = 0; diff --git a/src/gpu/GridGenerator/grid/GridImp.cu b/src/gpu/GridGenerator/grid/GridImp.cu index c226669b5ac8ca0c7b85d62c191713834f86c465..f265783bec90cca54d7fe3723d8069ec2259203f 100644 --- a/src/gpu/GridGenerator/grid/GridImp.cu +++ b/src/gpu/GridGenerator/grid/GridImp.cu @@ -25,6 +25,7 @@ #include "utilities/communication.h" #include "utilities/math/Math.h" +#include <gpu/VirtualFluids_GPU/LBM/LB.h> CONSTANT int DIRECTIONS[DIR_END_MAX][DIMENSION]; @@ -858,6 +859,18 @@ CUDA_HOST void GridImp::updateSparseIndices() sparseSize = size - removedNodes; } +CUDA_HOST void GridImp::findMatrixIDsGEO_FLUID(uint *typeOfGridNode) // typeOfGridNode = para->getParD(level)->geoSP[index] +{ + int removedNodes = 0; + for (uint index = 0; index < size; index++) { + if (typeOfGridNode[index] == GEO_FLUID) + geoFluidNodes.push_back(index); + else + removedNodes++; + } + geoFluidSize = size - removedNodes; +} + HOSTDEVICE void GridImp::setNeighborIndices(uint index) { real x, y, z; @@ -1744,7 +1757,15 @@ HOSTDEVICE uint GridImp::getSize() const HOSTDEVICE uint GridImp::getSparseSize() const { - return this->sparseSize; + return this->sparseSize; +} + +HOSTDEVICE uint GridImp::getGeoFluidSize() const { + return this->geoFluidSize; +} + +HOSTDEVICE const std::vector<uint> &GridImp::getGeoFluidNodes() const{ + return this->geoFluidNodes; } HOSTDEVICE Field GridImp::getField() const @@ -1946,3 +1967,5 @@ void GridImp::print() const if(this->gridInterface) this->gridInterface->print(); } + + diff --git a/src/gpu/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h index ead377674b4df561aed845d6792cae2e86afa18b..84615e6d6ee44f55a7602050ac795b9179a922b5 100644 --- a/src/gpu/GridGenerator/grid/GridImp.h +++ b/src/gpu/GridGenerator/grid/GridImp.h @@ -86,6 +86,9 @@ private: int *neighborIndexX, *neighborIndexY, *neighborIndexZ, *neighborIndexNegative; int *sparseIndices; + std::vector<uint> geoFluidNodes; + uint geoFluidSize; + uint *qIndices; //maps from matrix index to qIndex real *qValues; uint *qPatches; @@ -192,6 +195,8 @@ public: HOSTDEVICE real getDelta() const override; HOSTDEVICE uint getSize() const override; HOSTDEVICE uint getSparseSize() const override; + HOSTDEVICE uint getGeoFluidSize() const override; + HOSTDEVICE const std::vector<uint> &getGeoFluidNodes() const override; HOSTDEVICE int getSparseIndex(uint matrixIndex) const override; CUDA_HOST real* getDistribution() const override; CUDA_HOST int* getDirection() const override; @@ -241,6 +246,7 @@ public: CUDA_HOST virtual void findSparseIndices(SPtr<Grid> fineGrid) override; CUDA_HOST void updateSparseIndices(); + CUDA_HOST void findMatrixIDsGEO_FLUID(uint *typeOfGridNode) override; HOSTDEVICE void setNeighborIndices(uint index); HOSTDEVICE real getFirstFluidNode(real coords[3], int direction, real startCoord) const override; HOSTDEVICE real getLastFluidNode(real coords[3], int direction, real startCoord) const override;