From e4fc10746e18fefbfb9280cc8bb654c9799fb45a Mon Sep 17 00:00:00 2001 From: Anna Wellmann <a.wellmann@tu-bs.de> Date: Mon, 25 Apr 2022 09:21:35 +0200 Subject: [PATCH] Add debug writer for edge nodes send --- src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp | 4 +- .../Output/EdgeNodeDebugWriter.hpp | 66 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp index 4abc071a8..c3b12b79b 100644 --- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp +++ b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp @@ -17,6 +17,7 @@ #include "Output/MeasurePointWriter.hpp" #include "Output/AnalysisData.hpp" #include "Output/InterfaceDebugWriter.hpp" +#include "Output/EdgeNodeDebugWriter.hpp" #include "Output/VeloASCIIWriter.hpp" ////////////////////////////////////////////////////////////////////////// #include "Utilities/Buffer2D.hpp" @@ -389,12 +390,13 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std //InterfaceDebugWriter::writeInterfaceLinesDebugCF(para.get()); //InterfaceDebugWriter::writeInterfaceLinesDebugFC(para.get()); - // writers for Version with communication hiding + // 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()); + EdgeNodeDebugWriter::writeEdgeNodesXZ_Send(para.get()); } } diff --git a/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp new file mode 100644 index 000000000..82084103e --- /dev/null +++ b/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp @@ -0,0 +1,66 @@ +#ifndef EDGENODEDEBUG_HPP +#define EDGENODEDEBUG_HPP + +#include <fstream> +#include <sstream> +#include <stdio.h> +// #include <math.h> +#include "Core/StringUtilities/StringUtil.h" +#include "LBM/D3Q27.h" +#include "LBM/LB.h" +#include "Parameter/Parameter.h" +#include "basics/utilities/UbSystem.h" +#include <basics/writer/WbWriterVtkXmlBinary.h> +#include <cmath> + +#include "VirtualFluids_GPU/Communication/Communicator.h" + +namespace EdgeNodeDebugWriter +{ + +void writeEdgeNodesXZ_Send(Parameter *para) +{ + std::vector<UbTupleFloat3> nodesVec; + + // nodedata + std::vector<std::string> datanames = { "SparseIndex", "ProcessNeighbor", "IndexInSendVector", "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++) { + // node data section + int indexOfProcessNeighborSend = para->getParH(level)->edgeNodesXtoZ[u].indexOfProcessNeighborSend; + int indexInSendBuffer = para->getParH(level)->edgeNodesXtoZ[u].indexInSendBuffer; + int sparseIndex = para->getParH(level)->sendProcessNeighborZ[indexOfProcessNeighborSend].index[indexInSendBuffer]; + nodedata[0][nodeCount] = sparseIndex; + nodedata[1][nodeCount] = indexOfProcessNeighborSend; + nodedata[2][nodeCount] = indexInSendBuffer; + nodedata[3][nodeCount] = indexInSendBuffer < para->getParH(level)->sendProcessNeighborsAfterFtoCZ[indexOfProcessNeighborSend].numberOfNodes; + + // coordinate section + double x1 = para->getParH(level)->coordX_SP[sparseIndex]; + double x2 = para->getParH(level)->coordY_SP[sparseIndex]; + double x3 = para->getParH(level)->coordZ_SP[sparseIndex]; + nodesVec[nodeCount] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3))); + + nodeCount++; + } + std::string filenameVec = para->getFName() + "_writeEdgeNodesXZ_Send_PID_" + + std::to_string(vf::gpu::Communicator::getInstanz()->getPID()) + "_" + + StringUtil::toString<int>(level); + + WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(filenameVec, nodesVec, datanames, nodedata); + } +} +} // namespace EdgeNodeDebugWriter + +#endif -- GitLab