diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp index 5eceb4beb3d896cd37cecec5d505b8f522f29d6e..2f2e57bf4f97600012d1dad835956e89c5722b91 100644 --- a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp +++ b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp @@ -252,7 +252,7 @@ void exchangeCollDataYGPU27(Parameter *para, vf::gpu::Communicator *comm, CudaMe if (para->getUseStreams() && para->getNumberOfProcessNeighborsX(level, "recv") > 0 && para->getParH(level)->sendProcessNeighborY.size() != 0) { if( para->getParH(level)->sendProcessNeighborY[0].numberOfNodes == (*sendProcessNeighborHost)[0].numberOfNodes){ // check if in communication of all nodes (as opposed to reduced communication after fine to coarse) - copyEdgeNodes(para->getParH(level)->edgeNodesXtoY, para->getParH(level)->recvProcessNeighborX, *sendProcessNeighborHost); + copyEdgeNodes(para->getParH(level)->edgeNodesXtoY, para->getParH(level)->recvProcessNeighborX, *sendProcessNeighborHost); } else{ copyEdgeNodes(para->getParH(level)->edgeNodesXtoY, para->getParH(level)->recvProcessNeighborsAfterFtoCX, *sendProcessNeighborHost); } diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp index 0da86e64d4a477155e8897ca180018f1326604e7..72b96effb0fc142c9e231fa4d1ec16078f358e78 100644 --- a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp +++ b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp @@ -15,7 +15,7 @@ auto RealEq = [](auto value) { }; -SPtr<Parameter> initParameterClass(std::shared_ptr<Parameter> ¶) +SPtr<Parameter> initParameterClass() { std::filesystem::path filePath = __FILE__; // assuming that the config file is stored parallel to this file. filePath.replace_filename("ExchangeData27Test.cfg"); @@ -24,36 +24,45 @@ SPtr<Parameter> initParameterClass(std::shared_ptr<Parameter> ¶) return std::make_shared<Parameter>(config, 1, 0); } -TEST(ExchangeData27Test, copyEdgeNodes_XZ_CommunicationAfterFtoC) -{ - int level = 0; - SPtr<Parameter> para = initParameterClass(para); - para->setMaxLevel(level + 1); // setMaxLevel resizes parH - para->initLBMSimulationParameter(); // init parH +class ExchangeData27Test_CopyEdgeNodesXZTest: public testing::Test{ + protected: + SPtr<Parameter> para; + int level = 0; + int numNodes = 10; - // indexInSend < 5 --> in AfterFToC - para->getParH(level)->edgeNodesXtoZ.emplace_back(0,1,0,1); - para->getParH(level)->edgeNodesXtoZ.emplace_back(0,6,0,6); - para->getParH(level)->edgeNodesXtoZ.emplace_back(0,2,0,3); - para->getParH(level)->edgeNodesXtoZ.emplace_back(0,7,0,8); - int numNodes = 10; - int numNodesAfterFtoC = 5; - - + void SetUp() override { + para = initParameterClass(); + para->setMaxLevel(level + 1); // setMaxLevel resizes parH + para->initLBMSimulationParameter(); // init parH + + para->getParH(level)->edgeNodesXtoZ.emplace_back(0,1,0,1); + para->getParH(level)->edgeNodesXtoZ.emplace_back(0,6,0,6); + para->getParH(level)->edgeNodesXtoZ.emplace_back(0,2,0,3); + para->getParH(level)->edgeNodesXtoZ.emplace_back(0,7,0,8); + para->getParH(level)->edgeNodesXtoZ.emplace_back(0,7,0,8); + para->getParH(level)->edgeNodesXtoZ.emplace_back(0,7,0,8); + } +}; + + +TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicationAfterFtoC_recvVectorFullSize) +{ + int numNodesAfterFtoC = 5; // indexInSend < 5 --> in AfterFToC + + // recvProcessNeighborHost std::vector<ProcessNeighbor27> recvProcessNeighborHost(1); - std::vector<real> recvFs(numNodes, 0.5); + std::vector<real> recvFs(numNodes, 0.5); for (LBMSimulationParameter::EdgeNodePositions edgeNode : para->getParH(level)->edgeNodesXtoZ){ recvFs[edgeNode.indexInRecvBuffer] = 0.1; } - for (uint direction = 0; direction <= dirEND; direction ++){ - recvFs.insert(recvFs.end(), recvFs.begin(), recvFs.begin()+10); + for (uint direction = 0; direction < dirEND; direction ++){ + recvFs.insert(recvFs.end(), recvFs.begin(), recvFs.begin()+numNodes); } recvProcessNeighborHost[0].f[0] = recvFs.data(); recvProcessNeighborHost[0].numberOfNodes = numNodes; - - + // sendProcessNeighborHost std::vector<ProcessNeighbor27> sendProcessNeighborHost(1); std::vector<real> sendFs(27*numNodesAfterFtoC, 0.0); sendProcessNeighborHost[0].f[0] = sendFs.data(); @@ -63,9 +72,9 @@ TEST(ExchangeData27Test, copyEdgeNodes_XZ_CommunicationAfterFtoC) std::vector<real> expectedFs(numNodesAfterFtoC, 0.0); expectedFs[1] = 0.1; expectedFs[3] = 0.1; - std::vector<real> expectedFsAllDirections; - for (uint direction = 0; direction <= dirEND; direction ++){ - expectedFsAllDirections.insert(expectedFsAllDirections.end(), expectedFs.begin(), expectedFs.end()); + // std::vector<real> expectedFs; + for (uint direction = 0; direction < dirEND; direction ++){ + expectedFs.insert(expectedFs.end(), expectedFs.begin(), expectedFs.begin()+numNodesAfterFtoC); } // act @@ -75,28 +84,20 @@ TEST(ExchangeData27Test, copyEdgeNodes_XZ_CommunicationAfterFtoC) std::vector<real> result; result.assign(sendProcessNeighborHost[0].f[0], sendProcessNeighborHost[0].f[0] + 27*numNodesAfterFtoC); - EXPECT_THAT(result, testing::Eq(expectedFsAllDirections)); + EXPECT_THAT(result, testing::Eq(expectedFs)); } -TEST(ExchangeData27Test, copyEdgeNodes_XZ_CommunicateAll) +TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicateAll) { - int level = 0; - SPtr<Parameter> para = initParameterClass(para); - para->setMaxLevel(level + 1); // setMaxLevel resizes parH - para->initLBMSimulationParameter(); // init parH - - para->getParH(level)->edgeNodesXtoZ.emplace_back(0,1,0,1); - para->getParH(level)->edgeNodesXtoZ.emplace_back(0,6,0,6); - para->getParH(level)->edgeNodesXtoZ.emplace_back(0,2,0,3); - para->getParH(level)->edgeNodesXtoZ.emplace_back(0,7,0,8); - int numNodes = 10; + // recvProcessNeighborHost std::vector<ProcessNeighbor27> recvProcessNeighborHost(1); std::vector<real> recvFs(27*numNodes, 0.1); recvProcessNeighborHost[0].f[0] = recvFs.data(); recvProcessNeighborHost[0].numberOfNodes = numNodes; + // sendProcessNeighborHost std::vector<ProcessNeighbor27> sendProcessNeighborHost(1); std::vector<real> sendFs(27*numNodes, 0.0); sendProcessNeighborHost[0].f[0] = sendFs.data();