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)
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
......@@ -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
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