From 58d09dd5e5bca4c6d3ad07b02720354a6d029261 Mon Sep 17 00:00:00 2001 From: mark <mark@opencfd> Date: Thu, 19 Oct 2017 18:04:24 +0200 Subject: [PATCH] ENH: emit number of blocks for decomposedBlockData in header - better documentation of the file contents. - quicker to obtain number of blocks without reading an entire file. --- .../decomposedBlockData/decomposedBlockData.C | 26 +++++++++++++++++-- .../collatedFileOperation.C | 2 +- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockData.C b/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockData.C index d5a9336338..21ad121dfb 100644 --- a/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockData.C +++ b/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockData.C @@ -30,8 +30,9 @@ License #include "Fstream.H" #include "StringStream.H" #include "dictionary.H" -#include <sys/time.h> #include "objectRegistry.H" +#include "foamVersion.H" +#include <sys/time.h> // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -204,6 +205,20 @@ void Foam::decomposedBlockData::writeHeader << " version " << version << ";\n" << " format " << format << ";\n" << " class " << type << ";\n"; + + // This may be useful to have as well + /* + if (os.format() == IOstream::BINARY) + { + os << " arch " << Foam::FOAMbuildArch << ";\n"; + } + */ + + if (Pstream::parRun()) + { + os << " blocks " << Pstream::nProcs() << ";\n"; + } + if (note.size()) { os << " note " << note << ";\n"; @@ -938,7 +953,7 @@ Foam::label Foam::decomposedBlockData::numBlocks(const fileName& fName) return nBlocks; } - // Skip header + // FoamFile header token firstToken(is); if @@ -951,8 +966,15 @@ Foam::label Foam::decomposedBlockData::numBlocks(const fileName& fName) dictionary headerDict(is); is.version(headerDict.lookup("version")); is.format(headerDict.lookup("format")); + + // Obtain number of blocks directly + if (headerDict.readIfPresent("blocks", nBlocks)) + { + return nBlocks; + } } + // Fallback to brute force read of each data block List<char> data; while (is.good()) { diff --git a/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C b/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C index b5dbb13517..dd105496a4 100644 --- a/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C +++ b/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C @@ -200,7 +200,7 @@ Foam::fileOperations::collatedFileOperation::collatedFileOperation << " may \"hang\". If thread support cannot be " "enabled, deactivate threading" << nl << " by setting maxThreadFileBufferSize to 0 in " - "$FOAM_ETC/controlDict" + "the OpenFOAM etc/controlDict" << endl; } -- GitLab