From 9738a09da79c4cdb7aad7a59028a986f8dd53ab0 Mon Sep 17 00:00:00 2001 From: "TESLA03\\Master" <a.wellmann@tu-bs.de> Date: Thu, 15 Jul 2021 15:03:09 +0200 Subject: [PATCH] Add class NodeIndicesMultiGPU --- apps/gpu/LBM/MusselOyster/MusselOyster.cpp | 8 ++++++++ src/gpu/GridGenerator/grid/Grid.h | 2 +- src/gpu/GridGenerator/grid/GridImp.cu | 4 ++-- src/gpu/GridGenerator/grid/GridImp.h | 2 +- .../Parameter/NodeIndicesMultiGPU.cpp | 20 +++++++++++++++++++ .../Parameter/NodeIndicesMultiGPU.h | 16 +++++++++++++++ 6 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 src/gpu/VirtualFluids_GPU/Parameter/NodeIndicesMultiGPU.cpp create mode 100644 src/gpu/VirtualFluids_GPU/Parameter/NodeIndicesMultiGPU.h diff --git a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp index fd931775e..1a8493d21 100644 --- a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp +++ b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp @@ -56,6 +56,8 @@ #include "utilities/communication.h" +#include "VirtualFluids_GPU/Parameter/NodeIndicesMultiGPU.h" + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -243,6 +245,12 @@ void multipleLevel(const std::string& configPath) //gridBuilder->writeGridsToVtk(path + "/" + bivalveType + "/" + std::to_string(generatePart) + "/grid/"); //gridBuilder->writeArrows(path + "/" + bivalveType + "/" + std::to_string(generatePart) + " /arrow"); + std::cout << "number of grids in gridBuilder.................... " << gridBuilder->getGrids().size() + << std::endl; + + SPtr<NodeIndicesMultiGPU> paraMultiGPU = std::make_shared<NodeIndicesMultiGPU>(NodeIndicesMultiGPU(gridBuilder)); + + SimulationFileWriter::write(gridPath + "/" + std::to_string(generatePart) + "/", gridBuilder, FILEFORMAT::BINARY); } else { diff --git a/src/gpu/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h index b04dc643f..bbb3242c9 100644 --- a/src/gpu/GridGenerator/grid/Grid.h +++ b/src/gpu/GridGenerator/grid/Grid.h @@ -30,7 +30,7 @@ public: 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 const std::vector<uint> *getGeoFluidNodes() const = 0; HOSTDEVICE virtual real getStartX() const = 0; HOSTDEVICE virtual real getStartY() const = 0; diff --git a/src/gpu/GridGenerator/grid/GridImp.cu b/src/gpu/GridGenerator/grid/GridImp.cu index f265783be..7e1aae190 100644 --- a/src/gpu/GridGenerator/grid/GridImp.cu +++ b/src/gpu/GridGenerator/grid/GridImp.cu @@ -1764,8 +1764,8 @@ HOSTDEVICE uint GridImp::getGeoFluidSize() const { return this->geoFluidSize; } -HOSTDEVICE const std::vector<uint> &GridImp::getGeoFluidNodes() const{ - return this->geoFluidNodes; +HOSTDEVICE const std::vector<uint> *GridImp::getGeoFluidNodes() const{ + return &this->geoFluidNodes; } HOSTDEVICE Field GridImp::getField() const diff --git a/src/gpu/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h index 84615e6d6..169c77fde 100644 --- a/src/gpu/GridGenerator/grid/GridImp.h +++ b/src/gpu/GridGenerator/grid/GridImp.h @@ -196,7 +196,7 @@ public: HOSTDEVICE uint getSize() const override; HOSTDEVICE uint getSparseSize() const override; HOSTDEVICE uint getGeoFluidSize() const override; - HOSTDEVICE const std::vector<uint> &getGeoFluidNodes() 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; diff --git a/src/gpu/VirtualFluids_GPU/Parameter/NodeIndicesMultiGPU.cpp b/src/gpu/VirtualFluids_GPU/Parameter/NodeIndicesMultiGPU.cpp new file mode 100644 index 000000000..2440da272 --- /dev/null +++ b/src/gpu/VirtualFluids_GPU/Parameter/NodeIndicesMultiGPU.cpp @@ -0,0 +1,20 @@ +#include "NodeIndicesMultiGPU.h" + +NodeIndicesMultiGPU::NodeIndicesMultiGPU(SPtr<MultipleGridBuilder> gridBuilder) +{ + std::vector<std::shared_ptr<Grid>> grids = gridBuilder->getGrids(); + for (uint i = 0; i < grids.size(); i++) { + geoFluidSize.push_back(grids[i]->getGeoFluidSize()); + geoFluidNodeIndices.push_back(grids[i]->getGeoFluidNodes()); + } +} + +uint NodeIndicesMultiGPU::getGeoFluidSize(uint gridNumber) +{ + return this->geoFluidSize[gridNumber]; +} + +const std::vector<uint>* NodeIndicesMultiGPU::getGeoFluidNodeIndices(uint gridNumber) +{ + return this->geoFluidNodeIndices[gridNumber]; +} diff --git a/src/gpu/VirtualFluids_GPU/Parameter/NodeIndicesMultiGPU.h b/src/gpu/VirtualFluids_GPU/Parameter/NodeIndicesMultiGPU.h new file mode 100644 index 000000000..abe44273e --- /dev/null +++ b/src/gpu/VirtualFluids_GPU/Parameter/NodeIndicesMultiGPU.h @@ -0,0 +1,16 @@ +#include <vector> +#include <memory> + +#include "GridGenerator/grid/GridBuilder/MultipleGridBuilder.h" + +class NodeIndicesMultiGPU +{ + std::vector<uint> geoFluidSize; + std::vector<const std::vector<uint>*> geoFluidNodeIndices; + +public: + NodeIndicesMultiGPU(SPtr<MultipleGridBuilder> gridBuilder); + + uint getGeoFluidSize(uint gridNumber); + const std::vector<uint>* getGeoFluidNodeIndices(uint gridNumber); +}; \ No newline at end of file -- GitLab