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

Remove duplicate code in EdgeNodeFinder

parent b6e29068
No related branches found
No related tags found
1 merge request!106Refactor routine for finding the edge nodes
#include "EdgeNodeFinder.h"
#include "Parameter.h"
namespace vf::gpu
{
......@@ -15,52 +14,38 @@ void findEdgeNodesCommMultiGPU(SPtr<Parameter> parameter)
namespace
{
void findEdgeNodesXY(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 nodeIndex = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
bool foundIndex = findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborY,
indexOfProcessNeighborSend, indexInSendBuffer);
if (foundIndex) {
parameter->getParH(level)->edgeNodesXtoY.emplace_back(i, j, indexOfProcessNeighborSend,
indexInSendBuffer);
}
}
}
findEdgeNodes(parameter->getParH(level)->recvProcessNeighborX, parameter->getParH(level)->sendProcessNeighborY,
parameter->getParH(level)->edgeNodesXtoY);
}
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 nodeIndex = parameter->getParH(level)->recvProcessNeighborX[i].index[j];
bool foundIndex = findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborZ,
indexOfProcessNeighborSend, indexInSendBuffer);
if (foundIndex) {
parameter->getParH(level)->edgeNodesXtoZ.emplace_back(i, j, indexOfProcessNeighborSend,
indexInSendBuffer);
}
}
}
findEdgeNodes(parameter->getParH(level)->recvProcessNeighborX, parameter->getParH(level)->sendProcessNeighborZ,
parameter->getParH(level)->edgeNodesXtoZ);
}
void findEdgeNodesYZ(int level, SPtr<Parameter> parameter)
{
findEdgeNodes(parameter->getParH(level)->recvProcessNeighborY, parameter->getParH(level)->sendProcessNeighborZ,
parameter->getParH(level)->edgeNodesYtoZ);
}
void findEdgeNodes(const std::vector<ProcessNeighbor27> &recvProcessNeighbor,
const std::vector<ProcessNeighbor27> &sendProcessNeighbor,
std::vector<LBMSimulationParameter::EdgeNodePositions> &edgeNodes)
{
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 nodeIndex = parameter->getParH(level)->recvProcessNeighborY[i].index[j];
bool foundIndex = findIndexInSendNodes(nodeIndex, parameter->getParH(level)->sendProcessNeighborZ,
indexOfProcessNeighborSend, indexInSendBuffer);
for (uint i = 0; i < (unsigned int)(recvProcessNeighbor.size()); i++) {
for (int j = 0; j < recvProcessNeighbor[i].numberOfNodes; j++) {
int nodeIndex = recvProcessNeighbor[i].index[j];
bool foundIndex =
findIndexInSendNodes(nodeIndex, sendProcessNeighbor, indexOfProcessNeighborSend, indexInSendBuffer);
if (foundIndex) {
parameter->getParH(level)->edgeNodesYtoZ.emplace_back(i, j, indexOfProcessNeighborSend,
indexInSendBuffer);
edgeNodes.emplace_back(i, j, indexOfProcessNeighborSend, indexInSendBuffer);
}
}
}
......
......@@ -42,8 +42,7 @@
#include "Core/DataTypes.h"
#include "basics/PointerDefinitions.h"
#include "gpu/VirtualFluids_GPU/LBM/LB.h"
class Parameter;
#include "Parameter.h"
namespace vf::gpu
{
......@@ -54,8 +53,10 @@ void findEdgeNodesCommMultiGPU(SPtr<Parameter> parameter);
// anonymous namespace
namespace
{
bool findIndexInSendNodes(int nodeIndex, const std::vector<ProcessNeighbor27> &sendProcessNeighbor,
int &indexOfProcessNeighborSend, int &indexInSendBuffer);
void findEdgeNodes(const std::vector<ProcessNeighbor27> &recvProcessNeighbor,
const std::vector<ProcessNeighbor27> &sendProcessNeighbor,
std::vector<LBMSimulationParameter::EdgeNodePositions> &edgeNodes);
bool findIndexInSendNodes(int nodeIndex, const std::vector<ProcessNeighbor27>& sendProcessNeighbor, int &indexOfProcessNeighborSend, int &indexInSendBuffer);
void findEdgeNodesXY(int level, SPtr<Parameter> parameter);
void findEdgeNodesXZ(int level, SPtr<Parameter> parameter);
void findEdgeNodesYZ(int level, SPtr<Parameter> parameter);
......
......@@ -2,7 +2,6 @@
#include <filesystem>
#include "Parameter.h"
#include "basics/config/ConfigurationFile.h"
#include "EdgeNodeFinder.h"
......
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