From 88c33f19f8dbc70482d313802447501a37714453 Mon Sep 17 00:00:00 2001
From: Anna Wellmann <a.wellmann@tu-bs.de>
Date: Fri, 3 Jun 2022 12:16:49 +0000
Subject: [PATCH] Refactor findEdgeNodes

---
 .../Parameter/EdgeNodeFinder.cpp              | 56 +++++--------------
 .../Parameter/EdgeNodeFinder.h                | 14 ++---
 2 files changed, 19 insertions(+), 51 deletions(-)

diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp
index 1134ee0c6..937ad1edd 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp
@@ -21,9 +21,9 @@ void findEdgeNodesXY(int level, SPtr<Parameter> parameter)
     int indexInSendBuffer;
     for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsX(level, "recv")); i++) {
         for (int j = 0; j < parameter->getParH(level)->recvProcessNeighborX[i].numberOfNodes; j++) {
-            int index = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
+            int nodeIndex = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
             bool foundIndex =
-                findIndexInSendNodesXY(level, index, indexOfProcessNeighborSend, indexInSendBuffer, parameter);
+                findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborY, indexOfProcessNeighborSend,  indexInSendBuffer);
             if (foundIndex) {
                 parameter->getParH(level)->edgeNodesXtoY.emplace_back(i, j, indexOfProcessNeighborSend,
                                                                       indexInSendBuffer);
@@ -32,30 +32,15 @@ void findEdgeNodesXY(int level, SPtr<Parameter> parameter)
     }
 }
 
-bool findIndexInSendNodesXY(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                            SPtr<Parameter> parameter)
-{
-    for (uint k = 0; k < (unsigned int)(parameter->getNumberOfProcessNeighborsY(level, "send")); k++) {
-        for (int l = 0; l < parameter->getParH(level)->sendProcessNeighborY[k].numberOfNodes; l++) {
-            if (parameter->getParH(level)->sendProcessNeighborY[k].index[l] == index) {
-                indexOfProcessNeighborSend = k;
-                indexInSendBuffer = l;
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
 void findEdgeNodesXZ(int level, SPtr<Parameter> parameter)
 {
     int indexOfProcessNeighborSend;
     int indexInSendBuffer;
     for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsX(level, "recv")); i++) {
         for (int j = 0; j < parameter->getParH(level)->recvProcessNeighborX[i].numberOfNodes; j++) {
-            int index = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
+            int nodeIndex = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
             bool foundIndex =
-                findIndexInSendNodesXZ(level, index, indexOfProcessNeighborSend, indexInSendBuffer, parameter);
+                findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborZ, indexOfProcessNeighborSend,  indexInSendBuffer);
             if (foundIndex) {
                 parameter->getParH(level)->edgeNodesXtoZ.emplace_back(i, j, indexOfProcessNeighborSend,
                                                                       indexInSendBuffer);
@@ -64,30 +49,15 @@ void findEdgeNodesXZ(int level, SPtr<Parameter> parameter)
     }
 }
 
-bool findIndexInSendNodesXZ(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                            SPtr<Parameter> parameter)
-{
-    for (uint k = 0; k < (unsigned int)(parameter->getNumberOfProcessNeighborsZ(level, "send")); k++) {
-        for (int l = 0; l < parameter->getParH(level)->sendProcessNeighborZ[k].numberOfNodes; l++) {
-            if (parameter->getParH(level)->sendProcessNeighborZ[k].index[l] == index) {
-                indexOfProcessNeighborSend = k;
-                indexInSendBuffer = l;
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
 void findEdgeNodesYZ(int level, SPtr<Parameter> parameter)
 {
     int indexOfProcessNeighborSend;
     int indexInSendBuffer;
     for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsY(level, "recv")); i++) {
         for (int j = 0; j < parameter->getParH(level)->recvProcessNeighborY[i].numberOfNodes; j++) {
-            int index = parameter->getParH(level)->recvProcessNeighborY[i].index[j];
+            int nodeIndex = parameter->getParH(level)->recvProcessNeighborY[i].index[j];
             bool foundIndex =
-                findIndexInSendNodesYZ(level, index, indexOfProcessNeighborSend, indexInSendBuffer, parameter);
+                findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborZ,indexOfProcessNeighborSend,  indexInSendBuffer);
             if (foundIndex) {
                 parameter->getParH(level)->edgeNodesYtoZ.emplace_back(i, j, indexOfProcessNeighborSend,
                                                                       indexInSendBuffer);
@@ -96,18 +66,18 @@ void findEdgeNodesYZ(int level, SPtr<Parameter> parameter)
     }
 }
 
-bool findIndexInSendNodesYZ(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                            SPtr<Parameter> parameter)
+bool findIndexInSendNodes(int nodeIndex, const std::vector<ProcessNeighbor27>& sendProcessNeighbor, int &indexOfProcessNeighborSend, int &indexInSendBuffer)
 {
-    for (uint k = 0; k < (unsigned int)(parameter->getNumberOfProcessNeighborsZ(level, "send")); k++) {
-        for (int l = 0; l < parameter->getParH(level)->sendProcessNeighborZ[k].numberOfNodes; l++) {
-            if (parameter->getParH(level)->sendProcessNeighborZ[k].index[l] == index) {
-                indexOfProcessNeighborSend = k;
-                indexInSendBuffer = l;
+    for (uint neighbor = 0; neighbor < (unsigned int)sendProcessNeighbor.size(); neighbor++) {
+        for (int node = 0; node < sendProcessNeighbor[neighbor].numberOfNodes; node++) {
+            if (sendProcessNeighbor[neighbor].index[node] == nodeIndex) {
+                indexOfProcessNeighborSend = neighbor;
+                indexInSendBuffer = node;
                 return true;
             }
         }
     }
     return false;
 }
+
 } // namespace
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h
index 6867cb7eb..9c0477f5f 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h
@@ -37,29 +37,27 @@
 #ifndef GPU_EDGENODES_H
 #define GPU_EDGENODES_H
 
+#include <vector>
+
 #include "Core/DataTypes.h"
 #include "basics/PointerDefinitions.h"
+#include "gpu/VirtualFluids_GPU/LBM/LB.h"
 
 class Parameter;
 
 namespace vf::gpu
 {
-
+//! \brief Find nodes which are part of communication in multiple coordinate directions
 void findEdgeNodesCommMultiGPU(SPtr<Parameter> parameter);
-}
+} // namespace vf::gpu
 
 // anonymous namespace
 namespace
 {
+static bool findIndexInSendNodes(int nodeIndex, const std::vector<ProcessNeighbor27>& sendProcessNeighbor, int &indexOfProcessNeighborSend, int &indexInSendBuffer);
 static void findEdgeNodesXY(int level, SPtr<Parameter> parameter);
-static bool findIndexInSendNodesXY(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                                   SPtr<Parameter> parameter);
 static void findEdgeNodesXZ(int level, SPtr<Parameter> parameter);
-static bool findIndexInSendNodesXZ(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                                   SPtr<Parameter> parameter);
 static void findEdgeNodesYZ(int level, SPtr<Parameter> parameter);
-static bool findIndexInSendNodesYZ(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
-                                   SPtr<Parameter> parameter);
 } // namespace
 
 #endif
\ No newline at end of file
-- 
GitLab