From ae5bbe1f8b58420f7cb426d942234b89dcd037d1 Mon Sep 17 00:00:00 2001 From: Anna Wellmann <a.wellmann@tu-bs.de> Date: Mon, 25 Apr 2022 10:16:38 +0200 Subject: [PATCH] Add debug writer for edge nodes receive --- src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp | 9 ++--- .../Output/EdgeNodeDebugWriter.hpp | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp index e27f4a915..284b9f239 100644 --- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp +++ b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp @@ -392,11 +392,12 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std // writers for version with communication hiding if(para->getNumprocs() > 1 && para->getUseStreams()){ - InterfaceDebugWriter::writeInterfaceFCC_Send(para.get()); - InterfaceDebugWriter::writeInterfaceCFC_Recv(para.get()); - InterfaceDebugWriter::writeSendNodesStream(para.get()); - InterfaceDebugWriter::writeRecvNodesStream(para.get()); + // InterfaceDebugWriter::writeInterfaceFCC_Send(para.get()); + // InterfaceDebugWriter::writeInterfaceCFC_Recv(para.get()); + // InterfaceDebugWriter::writeSendNodesStream(para.get()); + // InterfaceDebugWriter::writeRecvNodesStream(para.get()); EdgeNodeDebugWriter::writeEdgeNodesXZ_Send(para); + EdgeNodeDebugWriter::writeEdgeNodesXZ_Recv(para); } } diff --git a/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp index bba1b2331..4b2d2f275 100644 --- a/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp +++ b/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp @@ -60,6 +60,42 @@ void writeEdgeNodesXZ_Send(SPtr<Parameter> para) WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec, nodesVec, datanames, nodedata); } } + +void writeEdgeNodesXZ_Recv(SPtr<Parameter> para) +{ + std::vector<UbTupleFloat3> nodesVec; + std::vector<std::string> datanames = { "SparseIndex", "ProcessNeighbor", "IndexInRecvVector", "AfterFtoC" }; + std::vector<std::vector<double>> nodedata; + + int numberOfNodes = 0; + for (int level = 0; level < para->getMaxLevel(); level++){ + numberOfNodes += (int) para->getParH(level)->edgeNodesXtoZ.size(); + } + nodesVec.resize(numberOfNodes); + nodedata.resize(datanames.size(), std::vector<double>(numberOfNodes)); + + int nodeCount = 0; + for (int level = 0; level < para->getMaxLevel(); level++) { + for (int u = 0; u < numberOfNodes; u++) { + int indexOfProcessNeighborRecv = para->getParH(level)->edgeNodesXtoZ[u].indexOfProcessNeighborRecv; + int indexInRecvBuffer = para->getParH(level)->edgeNodesXtoZ[u].indexInRecvBuffer; + int sparseIndex = para->getParH(level)->recvProcessNeighborX[indexOfProcessNeighborRecv].index[indexInRecvBuffer]; + nodedata[0][nodeCount] = sparseIndex; + nodedata[1][nodeCount] = indexOfProcessNeighborRecv; + nodedata[2][nodeCount] = indexInRecvBuffer; + nodedata[3][nodeCount] = indexInRecvBuffer < para->getParH(level)->recvProcessNeighborX[indexOfProcessNeighborRecv].numberOfNodes; + + addCoordinatesToNodeVector(para->getParH(level), nodesVec, nodeCount, sparseIndex); + + nodeCount++; + } + std::string filenameVec = para->getFName() + "_writeEdgeNodesXZ_Recv_PID_" + + std::to_string(vf::gpu::Communicator::getInstanz()->getPID()) + "_" + + StringUtil::toString<int>(level); + + WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec, nodesVec, datanames, nodedata); + } +} } // namespace EdgeNodeDebugWriter #endif -- GitLab