From b94f206416fadf51d1736d95beb06d7fab3e34be Mon Sep 17 00:00:00 2001
From: "TESLA03\\Master" <a.wellmann@tu-bs.de>
Date: Thu, 15 Jul 2021 15:01:46 +0200
Subject: [PATCH] Create function to find GeoFluid nodes

---
 src/gpu/GridGenerator/grid/Grid.h     |  4 ++++
 src/gpu/GridGenerator/grid/GridImp.cu | 25 ++++++++++++++++++++++++-
 src/gpu/GridGenerator/grid/GridImp.h  |  6 ++++++
 3 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/src/gpu/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h
index 25f8d9da9..b04dc643f 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 c226669b5..f265783be 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 ead377674..84615e6d6 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;
-- 
GitLab