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