Skip to content
Snippets Groups Projects
Commit 88c33f19 authored by Anna Wellmann's avatar Anna Wellmann
Browse files

Refactor findEdgeNodes

parent c82b66b8
No related branches found
No related tags found
1 merge request!106Refactor routine for finding the edge nodes
...@@ -21,9 +21,9 @@ void findEdgeNodesXY(int level, SPtr<Parameter> parameter) ...@@ -21,9 +21,9 @@ void findEdgeNodesXY(int level, SPtr<Parameter> parameter)
int indexInSendBuffer; int indexInSendBuffer;
for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsX(level, "recv")); i++) { for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsX(level, "recv")); i++) {
for (int j = 0; j < parameter->getParH(level)->recvProcessNeighborX[i].numberOfNodes; j++) { 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 = bool foundIndex =
findIndexInSendNodesXY(level, index, indexOfProcessNeighborSend, indexInSendBuffer, parameter); findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborY, indexOfProcessNeighborSend, indexInSendBuffer);
if (foundIndex) { if (foundIndex) {
parameter->getParH(level)->edgeNodesXtoY.emplace_back(i, j, indexOfProcessNeighborSend, parameter->getParH(level)->edgeNodesXtoY.emplace_back(i, j, indexOfProcessNeighborSend,
indexInSendBuffer); indexInSendBuffer);
...@@ -32,30 +32,15 @@ void findEdgeNodesXY(int level, SPtr<Parameter> parameter) ...@@ -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) void findEdgeNodesXZ(int level, SPtr<Parameter> parameter)
{ {
int indexOfProcessNeighborSend; int indexOfProcessNeighborSend;
int indexInSendBuffer; int indexInSendBuffer;
for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsX(level, "recv")); i++) { for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsX(level, "recv")); i++) {
for (int j = 0; j < parameter->getParH(level)->recvProcessNeighborX[i].numberOfNodes; j++) { 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 = bool foundIndex =
findIndexInSendNodesXZ(level, index, indexOfProcessNeighborSend, indexInSendBuffer, parameter); findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborZ, indexOfProcessNeighborSend, indexInSendBuffer);
if (foundIndex) { if (foundIndex) {
parameter->getParH(level)->edgeNodesXtoZ.emplace_back(i, j, indexOfProcessNeighborSend, parameter->getParH(level)->edgeNodesXtoZ.emplace_back(i, j, indexOfProcessNeighborSend,
indexInSendBuffer); indexInSendBuffer);
...@@ -64,30 +49,15 @@ void findEdgeNodesXZ(int level, SPtr<Parameter> parameter) ...@@ -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) void findEdgeNodesYZ(int level, SPtr<Parameter> parameter)
{ {
int indexOfProcessNeighborSend; int indexOfProcessNeighborSend;
int indexInSendBuffer; int indexInSendBuffer;
for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsY(level, "recv")); i++) { for (uint i = 0; i < (unsigned int)(parameter->getNumberOfProcessNeighborsY(level, "recv")); i++) {
for (int j = 0; j < parameter->getParH(level)->recvProcessNeighborY[i].numberOfNodes; j++) { 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 = bool foundIndex =
findIndexInSendNodesYZ(level, index, indexOfProcessNeighborSend, indexInSendBuffer, parameter); findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborZ,indexOfProcessNeighborSend, indexInSendBuffer);
if (foundIndex) { if (foundIndex) {
parameter->getParH(level)->edgeNodesYtoZ.emplace_back(i, j, indexOfProcessNeighborSend, parameter->getParH(level)->edgeNodesYtoZ.emplace_back(i, j, indexOfProcessNeighborSend,
indexInSendBuffer); indexInSendBuffer);
...@@ -96,18 +66,18 @@ void findEdgeNodesYZ(int level, SPtr<Parameter> parameter) ...@@ -96,18 +66,18 @@ void findEdgeNodesYZ(int level, SPtr<Parameter> parameter)
} }
} }
bool findIndexInSendNodesYZ(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer, bool findIndexInSendNodes(int nodeIndex, const std::vector<ProcessNeighbor27>& sendProcessNeighbor, int &indexOfProcessNeighborSend, int &indexInSendBuffer)
SPtr<Parameter> parameter)
{ {
for (uint k = 0; k < (unsigned int)(parameter->getNumberOfProcessNeighborsZ(level, "send")); k++) { for (uint neighbor = 0; neighbor < (unsigned int)sendProcessNeighbor.size(); neighbor++) {
for (int l = 0; l < parameter->getParH(level)->sendProcessNeighborZ[k].numberOfNodes; l++) { for (int node = 0; node < sendProcessNeighbor[neighbor].numberOfNodes; node++) {
if (parameter->getParH(level)->sendProcessNeighborZ[k].index[l] == index) { if (sendProcessNeighbor[neighbor].index[node] == nodeIndex) {
indexOfProcessNeighborSend = k; indexOfProcessNeighborSend = neighbor;
indexInSendBuffer = l; indexInSendBuffer = node;
return true; return true;
} }
} }
} }
return false; return false;
} }
} // namespace } // namespace
\ No newline at end of file
...@@ -37,29 +37,27 @@ ...@@ -37,29 +37,27 @@
#ifndef GPU_EDGENODES_H #ifndef GPU_EDGENODES_H
#define GPU_EDGENODES_H #define GPU_EDGENODES_H
#include <vector>
#include "Core/DataTypes.h" #include "Core/DataTypes.h"
#include "basics/PointerDefinitions.h" #include "basics/PointerDefinitions.h"
#include "gpu/VirtualFluids_GPU/LBM/LB.h"
class Parameter; class Parameter;
namespace vf::gpu namespace vf::gpu
{ {
//! \brief Find nodes which are part of communication in multiple coordinate directions
void findEdgeNodesCommMultiGPU(SPtr<Parameter> parameter); void findEdgeNodesCommMultiGPU(SPtr<Parameter> parameter);
} } // namespace vf::gpu
// anonymous namespace // anonymous namespace
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 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 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 void findEdgeNodesYZ(int level, SPtr<Parameter> parameter);
static bool findIndexInSendNodesYZ(int level, int index, int &indexOfProcessNeighborSend, int &indexInSendBuffer,
SPtr<Parameter> parameter);
} // namespace } // namespace
#endif #endif
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment