diff --git a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp index fd931775e1ab5ed9c35588f5b17a0bae45c2cd24..1a8493d21a7e3bf5723935613f450a80a989a3c6 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 b04dc643f363f0c61a466a03eec2b771d909460a..bbb3242c92cd97d678bd5c208ba8ccc49c564fc6 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 f265783bec90cca54d7fe3723d8069ec2259203f..7e1aae190ba21784862d4ea59a34ab85bcef8ea3 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 84615e6d6ee44f55a7602050ac795b9179a922b5..169c77fde8f613bd5c5021754257301d4f89f280 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 0000000000000000000000000000000000000000..2440da272891552f57ecfe6804c6252ee423eb5f --- /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 0000000000000000000000000000000000000000..abe44273e13396e0d103fdf65d55b964f2f7eaea --- /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