From 0adbaf4fe465f9e6dd812ee05d2c8eebd08e0389 Mon Sep 17 00:00:00 2001 From: Anna Wellmann <a.wellmann@tu-braunschweig.de> Date: Wed, 4 Aug 2021 16:18:33 +0200 Subject: [PATCH] Not add BC-nodes to fluid nodes any more Thh new behaviour can turned off by passing false for the "onlyBulk" bool --- apps/gpu/LBM/MusselOyster/MusselOyster.cpp | 4 ++-- src/gpu/GridGenerator/grid/Field.cu | 6 ++++++ src/gpu/GridGenerator/grid/Field.h | 1 + src/gpu/GridGenerator/grid/Grid.h | 5 +++-- .../grid/GridBuilder/MultipleGridBuilder.cpp | 4 ++-- .../grid/GridBuilder/MultipleGridBuilder.h | 2 +- src/gpu/GridGenerator/grid/GridImp.cu | 12 +++++------- src/gpu/GridGenerator/grid/GridImp.h | 3 +-- 8 files changed, 21 insertions(+), 16 deletions(-) diff --git a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp index 702b8851f..2b9ce1f11 100644 --- a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp +++ b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp @@ -222,7 +222,7 @@ void multipleLevel(const std::string& configPath) gridBuilder->buildGrids(LBM, true); // buildGrids() has to be called before setting the BCs!!!! - gridBuilder->findGeoFluidNodes(); + gridBuilder->findFluidNodes(useStreams); if (generatePart == 0) { gridBuilder->findCommunicationIndices(CommunicationDirections::PY, LBM); @@ -262,7 +262,7 @@ void multipleLevel(const std::string& configPath) gridBuilder->setPeriodicBoundaryCondition(false, false, true); gridBuilder->buildGrids(LBM, true); // buildGrids() has to be called before setting the BCs!!!! - gridBuilder->findGeoFluidNodes(); + gridBuilder->findFluidNodes(useStreams); ////////////////////////////////////////////////////////////////////////// gridBuilder->setVelocityBoundaryCondition(SideType::PY, vxLB, 0.0, 0.0); diff --git a/src/gpu/GridGenerator/grid/Field.cu b/src/gpu/GridGenerator/grid/Field.cu index 6272a3a6e..eff280f5a 100644 --- a/src/gpu/GridGenerator/grid/Field.cu +++ b/src/gpu/GridGenerator/grid/Field.cu @@ -67,6 +67,12 @@ HOSTDEVICE bool Field::isFluid(uint index) const return type == FLUID || type == FLUID_CFC || type == FLUID_CFF || type == FLUID_FCC || type == FLUID_FCF || isBoundaryConditionNode(index); } +HOSTDEVICE bool Field::isFluidBulk(uint index) const +{ + const char type = field[index]; + return type == FLUID || type == FLUID_CFC || type == FLUID_CFF || type == FLUID_FCC || type == FLUID_FCF; +} + HOSTDEVICE bool Field::isInvalidSolid(uint index) const { return field[index] == INVALID_SOLID; diff --git a/src/gpu/GridGenerator/grid/Field.h b/src/gpu/GridGenerator/grid/Field.h index f79797afa..92b420d67 100644 --- a/src/gpu/GridGenerator/grid/Field.h +++ b/src/gpu/GridGenerator/grid/Field.h @@ -22,6 +22,7 @@ public: HOSTDEVICE bool isCoarseToFineNode(uint index) const; HOSTDEVICE bool isFineToCoarseNode(uint index) const; HOSTDEVICE bool isFluid(uint index) const; + HOSTDEVICE bool isFluidBulk(uint index) const; HOSTDEVICE bool isInvalidSolid(uint index) const; HOSTDEVICE bool isQ(uint index) const; HOSTDEVICE bool isBoundaryConditionNode(uint index) const; diff --git a/src/gpu/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h index 3a70c16ad..855196dba 100644 --- a/src/gpu/GridGenerator/grid/Grid.h +++ b/src/gpu/GridGenerator/grid/Grid.h @@ -142,9 +142,10 @@ public: virtual void repairCommunicationInices(int direction) = 0; // needed for CUDA Streams MultiGPU - virtual void findFluidNodeIndices() = 0; - virtual uint getNumberOfFluidNodes() const = 0; + virtual void findFluidNodeIndices(bool onlyBulk) = 0; + virtual uint getNumberOfFluidNodes() const = 0;; virtual void getFluidNodeIndices(uint *fluidNodeIndices) const = 0; + }; #endif diff --git a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp index f6e2de17d..21570f15d 100644 --- a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp +++ b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp @@ -600,11 +600,11 @@ void MultipleGridBuilder::findCommunicationIndices(int direction, LbmOrGks lbmOr *logging::out << logging::Logger::INFO_HIGH << "Done with findCommunicationIndices()\n"; } -void MultipleGridBuilder::findGeoFluidNodes() +void MultipleGridBuilder::findFluidNodes(bool onlyBulk) { *logging::out << logging::Logger::INFO_HIGH << "Start findFluidNodes()\n"; for (uint i = 0; i < grids.size(); i++) - grids[i]->findFluidNodeIndices(); + grids[i]->findFluidNodeIndices(onlyBulk); *logging::out << logging::Logger::INFO_HIGH << "Done with findFluidNodes()\n"; } diff --git a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h index 8039aedd1..ad72e1adb 100644 --- a/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h +++ b/src/gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h @@ -86,7 +86,7 @@ public: GRIDGENERATOR_EXPORT void findCommunicationIndices( int direction, LbmOrGks lbmOrGks ); // needed for CUDA Streams MultiGPU - void findGeoFluidNodes(); + void findFluidNodes(bool onlyBulk); }; #endif diff --git a/src/gpu/GridGenerator/grid/GridImp.cu b/src/gpu/GridGenerator/grid/GridImp.cu index d67d319dc..8bc404c3a 100644 --- a/src/gpu/GridGenerator/grid/GridImp.cu +++ b/src/gpu/GridGenerator/grid/GridImp.cu @@ -858,20 +858,19 @@ CUDA_HOST void GridImp::updateSparseIndices() sparseSize = size - removedNodes; } -CUDA_HOST void GridImp::findFluidNodeIndices() +CUDA_HOST void GridImp::findFluidNodeIndices(bool onlyBulk) { this->fluidNodeIndices.clear(); for (uint index = 0; index < this->size; index++) { int sparseIndex = this->getSparseIndex(index); if (sparseIndex == -1) continue; - - if (this->field.isFluid(index)) + if ((onlyBulk && this->field.isFluidBulk(index)) || (!onlyBulk && this->field.isFluid(index))) this->fluidNodeIndices.push_back((uint)sparseIndex + 1); // + 1 for numbering shift between GridGenerator and VF_GPU } - this->numberOfFluidNodes = (uint)this->fluidNodeIndices.size(); } + HOSTDEVICE void GridImp::setNeighborIndices(uint index) { real x, y, z; @@ -1762,7 +1761,7 @@ HOSTDEVICE uint GridImp::getSparseSize() const } HOSTDEVICE uint GridImp::getNumberOfFluidNodes() const { - return this->numberOfFluidNodes; + return (uint)this->fluidNodeIndices.size(); } HOSTDEVICE Field GridImp::getField() const @@ -1958,11 +1957,10 @@ CUDA_HOST void GridImp::getNodeValues(real *xCoords, real *yCoords, real *zCoord } CUDA_HOST void GridImp::getFluidNodeIndices(uint *fluidNodeIndices) const { - for (uint nodeNumber = 0; nodeNumber < this->numberOfFluidNodes; nodeNumber++) + for (uint nodeNumber = 0; nodeNumber < (uint)this->fluidNodeIndices.size(); nodeNumber++) fluidNodeIndices[nodeNumber] = this->fluidNodeIndices[nodeNumber]; } - void GridImp::print() const { printf("min: (%2.4f, %2.4f, %2.4f), max: (%2.4f, %2.4f, %2.4f), size: %d, delta: %2.4f\n", startX, startY, startZ, diff --git a/src/gpu/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h index 595698093..33953ab2a 100644 --- a/src/gpu/GridGenerator/grid/GridImp.h +++ b/src/gpu/GridGenerator/grid/GridImp.h @@ -87,7 +87,6 @@ private: int *sparseIndices; std::vector<uint> fluidNodeIndices; - uint numberOfFluidNodes; uint *qIndices; //maps from matrix index to qIndex real *qValues; @@ -316,7 +315,7 @@ public: void repairCommunicationInices(int direction) override; - void findFluidNodeIndices() override; + void findFluidNodeIndices(bool onlyBulk) override; uint getNumberOfFluidNodes() const override; CUDA_HOST void getFluidNodeIndices(uint *fluidNodeIndices) const override; -- GitLab