diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp index 72b96effb0fc142c9e231fa4d1ec16078f358e78..3c3971c3322e41859b07d3b4071d4e287fd27469 100644 --- a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp +++ b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp @@ -6,15 +6,6 @@ #include <basics/config/ConfigurationFile.h> -auto RealEq = [](auto value) { -#ifdef VF_DOUBLE_ACCURACY - return testing::DoubleEq(value); -#else - return testing::FloatEq(value); -#endif -}; - - SPtr<Parameter> initParameterClass() { std::filesystem::path filePath = __FILE__; // assuming that the config file is stored parallel to this file. @@ -24,65 +15,68 @@ SPtr<Parameter> initParameterClass() return std::make_shared<Parameter>(config, 1, 0); } -class ExchangeData27Test_CopyEdgeNodesXZTest: public testing::Test{ - protected: - SPtr<Parameter> para; - int level = 0; - int numNodes = 10; +void setUpFsByCopyingF0(std::vector<real> &distributionVector, int numberOfNodes) +{ + for (uint direction = 0; direction < dirEND; direction++) { + distributionVector.insert(distributionVector.end(), distributionVector.begin(), + distributionVector.begin() + numberOfNodes); + } +} +class ExchangeData27Test_CopyEdgeNodesXZTest : public testing::Test +{ +protected: + SPtr<Parameter> para; + int level = 0; + int numNodes = 10; - void SetUp() override { + void SetUp() override + { para = initParameterClass(); - para->setMaxLevel(level + 1); // setMaxLevel resizes parH + 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); + 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); - for (LBMSimulationParameter::EdgeNodePositions edgeNode : para->getParH(level)->edgeNodesXtoZ){ - recvFs[edgeNode.indexInRecvBuffer] = 0.1; + std::vector<real> recvFs(numNodes, 0.5); // 0.5s should not be copied + for (LBMSimulationParameter::EdgeNodePositions edgeNode : para->getParH(level)->edgeNodesXtoZ) { + recvFs[edgeNode.indexInRecvBuffer] = 0.1; // 0.1s should be copied } - for (uint direction = 0; direction < dirEND; direction ++){ - recvFs.insert(recvFs.end(), recvFs.begin(), recvFs.begin()+numNodes); - } - recvProcessNeighborHost[0].f[0] = recvFs.data(); + setUpFsByCopyingF0(recvFs, 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(); + std::vector<real> sendFs(27 * numNodesAfterFtoC, 0.0); + sendProcessNeighborHost[0].f[0] = sendFs.data(); sendProcessNeighborHost[0].numberOfNodes = numNodesAfterFtoC; // expected std::vector<real> expectedFs(numNodesAfterFtoC, 0.0); expectedFs[1] = 0.1; expectedFs[3] = 0.1; - // std::vector<real> expectedFs; - for (uint direction = 0; direction < dirEND; direction ++){ - expectedFs.insert(expectedFs.end(), expectedFs.begin(), expectedFs.begin()+numNodesAfterFtoC); - } - + setUpFsByCopyingF0(expectedFs, numNodesAfterFtoC); + // act copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, recvProcessNeighborHost, sendProcessNeighborHost); // convert result to std::vector std::vector<real> result; - result.assign(sendProcessNeighborHost[0].f[0], sendProcessNeighborHost[0].f[0] + 27*numNodesAfterFtoC); + result.assign(sendProcessNeighborHost[0].f[0], sendProcessNeighborHost[0].f[0] + 27 * numNodesAfterFtoC); EXPECT_THAT(result, testing::Eq(expectedFs)); } @@ -93,34 +87,34 @@ TEST_F(ExchangeData27Test_CopyEdgeNodesXZTest, copyEdgeNodes_XZ_CommunicateAll) // recvProcessNeighborHost std::vector<ProcessNeighbor27> recvProcessNeighborHost(1); - std::vector<real> recvFs(27*numNodes, 0.1); - recvProcessNeighborHost[0].f[0] = recvFs.data(); + std::vector<real> recvFs(numNodes, 0.5); // 0.5s should not be copied + for (LBMSimulationParameter::EdgeNodePositions edgeNode : para->getParH(level)->edgeNodesXtoZ) { + recvFs[edgeNode.indexInRecvBuffer] = 0.1; // 0.1s should be copied + } + setUpFsByCopyingF0(recvFs, numNodes); + 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(); + std::vector<real> sendFs(27 * numNodes, 0.0); + sendProcessNeighborHost[0].f[0] = sendFs.data(); sendProcessNeighborHost[0].numberOfNodes = numNodes; - // expected std::vector<real> expectedFs(numNodes, 0.0); expectedFs[1] = 0.1; expectedFs[3] = 0.1; expectedFs[6] = 0.1; expectedFs[8] = 0.1; - std::vector<real> expectedFsAllDirections; - for (uint direction = 0; direction <= dirEND; direction ++){ - expectedFsAllDirections.insert(expectedFsAllDirections.end(), expectedFs.begin(), expectedFs.end()); - } - + setUpFsByCopyingF0(expectedFs, numNodes); + // act copyEdgeNodes(para->getParH(level)->edgeNodesXtoZ, recvProcessNeighborHost, sendProcessNeighborHost); // convert result to std::vector std::vector<real> result; - result.assign(sendProcessNeighborHost[0].f[0], sendProcessNeighborHost[0].f[0] + 27*numNodes); + result.assign(sendProcessNeighborHost[0].f[0], sendProcessNeighborHost[0].f[0] + 27 * numNodes); - EXPECT_THAT(result, testing::Eq(expectedFsAllDirections)); + EXPECT_THAT(result, testing::Eq(expectedFs)); } \ No newline at end of file