diff --git a/src/gpu/VirtualFluids_GPU/Output/DistributionDebugWriter.cpp b/src/gpu/VirtualFluids_GPU/Output/DistributionDebugWriter.cpp index 0fb48b1573c56b042167ea4d08adcd94e7d73a08..e98bcbc549de00b7fb5f488a96abe425d0d01880 100644 --- a/src/gpu/VirtualFluids_GPU/Output/DistributionDebugWriter.cpp +++ b/src/gpu/VirtualFluids_GPU/Output/DistributionDebugWriter.cpp @@ -13,17 +13,17 @@ void DistributionDebugWriter::writeDistributions(const Parameter* para, uint tim } } -void DistributionDebugWriter::writeDistributionsForLevel(const Parameter* para, uint level, uint timestep) +void createFileNames(std::vector<std::string>& fileNames, uint numberOfParts, uint level, uint timestep, const Parameter* para) { - const uint numberOfParts = WriterUtilities::calculateNumberOfParts(para, level); - - std::vector<std::string> fileNames; for (uint i = 1; i <= numberOfParts; i++) { fileNames.push_back(para->getFName() + "_bin_distributions" + WriterUtilities::makePartFileNameEnding(level, para->getMyProcessID(), i, timestep)); } +} - std::vector<std::string> nodeDataNames(NUMBER_Of_DIRECTIONS); +void createNodeDataNames(std::vector<std::string>& nodeDataNames) +{ + nodeDataNames.resize(NUMBER_Of_DIRECTIONS); for (uint dir = STARTDIR; dir <= ENDDIR; dir++) { const size_t minLenghtOfNumberString = 2; // the number is padded with zeros to this length @@ -32,18 +32,29 @@ void DistributionDebugWriter::writeDistributionsForLevel(const Parameter* para, "f_" + std::string(minLenghtOfNumberString - std::min(minLenghtOfNumberString, numberString.length()), '0') + numberString; } +} + +void DistributionDebugWriter::writeDistributionsForLevel(const Parameter* para, uint level, uint timestep) +{ + const uint numberOfParts = WriterUtilities::calculateNumberOfParts(para, level); + + std::vector<std::string> fileNames; + createFileNames(fileNames, numberOfParts, level, timestep, para); + + std::vector<std::string> nodeDataNames; + createNodeDataNames(nodeDataNames); uint sizeOfNodes; uint startPosition; uint endPosition; std::array<uint, 8> indicesOfOct; std::array<uint, 8> relativePosInPart; - uint relPosInPart; + uint relativePositionInPart; const LBMSimulationParameter* parH = para->getParHConst(level).get(); Distributions27 distributions = parH->distributions; - for (unsigned int part = 0; part < (uint)fileNames.size(); part++) { + for (unsigned int part = 0; part < numberOfParts; part++) { sizeOfNodes = WriterUtilities::calculateNumberOfNodesInPart(para, level, part); startPosition = part * para->getLimitOfNodesForVTK(); endPosition = startPosition + sizeOfNodes; @@ -59,17 +70,13 @@ void DistributionDebugWriter::writeDistributionsForLevel(const Parameter* para, if (parH->typeOfGridNode[pos] != GEO_FLUID) continue; - relPosInPart = pos - startPosition; + relativePositionInPart = pos - startPosition; - // node - double x1 = parH->coordinateX[pos]; - double x2 = parH->coordinateY[pos]; - double x3 = parH->coordinateZ[pos]; - nodes[relPosInPart] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3))); + nodes[relativePositionInPart] = + makeUbTuple((float)parH->coordinateX[pos], (float)parH->coordinateY[pos], (float)parH->coordinateZ[pos]); - // node data for (uint dir = STARTDIR; dir <= ENDDIR; dir++) { - nodeData[dir][relPosInPart] = distributions.f[0][dir*parH->numberOfNodes + pos]; + nodeData[dir][relativePositionInPart] = distributions.f[0][dir * parH->numberOfNodes + pos]; } WriterUtilities::getIndicesOfAllNodesInOct(indicesOfOct, pos, parH);