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