From 6ccc587bea65e17653b1007ead7b11176724b479 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Wed, 17 Mar 2021 14:09:55 +0100 Subject: [PATCH] ENH: reduce some code duplication in fileOperations --- .../decomposedBlockData/decomposedBlockData.H | 18 +++++- .../decomposedBlockDataHeader.C | 27 ++++++++- .../collatedFileOperation/OFstreamCollator.C | 15 +++-- .../collatedFileOperation/OFstreamCollator.H | 2 +- .../collatedFileOperation.C | 34 +++-------- .../collatedFileOperation.H | 6 +- .../hostCollatedFileOperation.C | 14 ++--- .../fileOperation/fileOperation.C | 17 +++++- .../fileOperation/fileOperation.H | 58 +++++++++---------- .../fileOperationInitialise.C | 28 ++++++++- .../fileOperationInitialise.H | 9 ++- .../unthreadedInitialise.H | 5 +- .../masterUncollatedFileOperation.C | 49 +++------------- .../masterUncollatedFileOperation.H | 8 ++- 14 files changed, 160 insertions(+), 130 deletions(-) diff --git a/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockData.H b/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockData.H index 23a99162a4..6e1f8e5df8 100644 --- a/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockData.H +++ b/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockData.H @@ -93,6 +93,9 @@ SourceFiles namespace Foam { +// Forward Declarations +class dictionary; + /*---------------------------------------------------------------------------*\ Class decomposedBlockData Declaration \*---------------------------------------------------------------------------*/ @@ -177,8 +180,8 @@ public: //- Read object virtual bool read(); - //- Write separated content. Assumes content is the serialised data - // and that the master data contains a header + //- Write separated content (assumes content is the serialised data) + // The serialised master data should also contain a FoamFile header virtual bool writeData(Ostream& os) const; //- Write using stream options @@ -209,7 +212,8 @@ public: const word& objectType, const string& note, const fileName& location, - const word& objectName + const word& objectName, + const dictionary* extraEntries = nullptr ); //- Helper: write FoamFile IOobject header @@ -220,6 +224,14 @@ public: const IOobject& io ); + //- Helper: generate additional entries for FoamFile header + static void writeExtraHeaderContent + ( + dictionary& dict, + IOstreamOption streamOptData, + const IOobject& io + ); + //- Helper: read block of (binary) character data static bool readBlockEntry ( diff --git a/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockDataHeader.C b/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockDataHeader.C index b1ccebb754..51313bc972 100644 --- a/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockDataHeader.C +++ b/src/OpenFOAM/db/IOobjects/decomposedBlockData/decomposedBlockDataHeader.C @@ -140,7 +140,8 @@ void Foam::decomposedBlockData::writeHeader const word& objectType, const string& note, const fileName& location, - const word& objectName + const word& objectName, + const dictionary* extraEntries ) { if (IOobject::bannerEnabled()) @@ -160,6 +161,11 @@ void Foam::decomposedBlockData::writeHeader objectName ); + if (extraEntries) + { + extraEntries->writeEntries(os); + } + os.endBlock(); if (IOobject::bannerEnabled()) @@ -169,6 +175,25 @@ void Foam::decomposedBlockData::writeHeader } +void Foam::decomposedBlockData::writeExtraHeaderContent +( + dictionary& dict, + IOstreamOption streamOptData, + const IOobject& io +) +{ + dict.set("data.format", streamOptData.format()); + dict.set("data.class", io.type()); + + // Deep-copy of meta-data (if any) + const dictionary* metaDataDict = io.findMetaData(); + if (metaDataDict && !metaDataDict->empty()) + { + dict.add("meta", *metaDataDict); + } +} + + void Foam::decomposedBlockData::writeHeader ( Ostream& os, diff --git a/src/OpenFOAM/global/fileOperations/collatedFileOperation/OFstreamCollator.C b/src/OpenFOAM/global/fileOperations/collatedFileOperation/OFstreamCollator.C index 9f76817ed3..28bcfbe0ff 100644 --- a/src/OpenFOAM/global/fileOperations/collatedFileOperation/OFstreamCollator.C +++ b/src/OpenFOAM/global/fileOperations/collatedFileOperation/OFstreamCollator.C @@ -79,18 +79,21 @@ bool Foam::OFstreamCollator::writeFile { Foam::mkDir(fName.path()); osPtr.reset(new OFstream(fName, streamOpt, append)); + auto& os = *osPtr; - // We don't have IOobject so cannot use IOobject::writeHeader if (!append) { + // No IOobject so cannot use IOobject::writeHeader + + // FoamFile decomposedBlockData::writeHeader ( - *osPtr, - streamOpt, // streamOpt for container + os, + streamOpt, // streamOpt for container objectType, - "", // note - "", // location (leave empty instead inaccurate) - fName.name() // object name + "", // note + "", // location (leave empty instead inaccurate) + fName.name() // object name ); } } diff --git a/src/OpenFOAM/global/fileOperations/collatedFileOperation/OFstreamCollator.H b/src/OpenFOAM/global/fileOperations/collatedFileOperation/OFstreamCollator.H index 4e2393bb98..de34d74a5d 100644 --- a/src/OpenFOAM/global/fileOperations/collatedFileOperation/OFstreamCollator.H +++ b/src/OpenFOAM/global/fileOperations/collatedFileOperation/OFstreamCollator.H @@ -119,7 +119,7 @@ class OFstreamCollator }; - // Private data + // Private Data //- Total amount of storage to use for object stack below const off_t maxBufferSize_; diff --git a/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C b/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C index 267a350eb8..977b75c857 100644 --- a/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C +++ b/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C @@ -74,23 +74,6 @@ namespace fileOperations } -// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // - -Foam::labelList Foam::fileOperations::collatedFileOperation::ioRanks() -{ - labelList ioRanks; - - string ioRanksString(Foam::getEnv("FOAM_IORANKS")); - if (!ioRanksString.empty()) - { - IStringStream is(ioRanksString); - is >> ioRanks; - } - - return ioRanks; -} - - // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::fileOperations::collatedFileOperation::printBanner @@ -125,20 +108,20 @@ void Foam::fileOperations::collatedFileOperation::printBanner if (printRanks) { // Information about the ranks - stringList ioRanks(Pstream::nProcs()); + stringList hosts(Pstream::nProcs()); if (Pstream::master(comm_)) { // Don't usually need the pid - // ioRanks[Pstream::myProcNo()] = hostName()+"."+name(pid()); - ioRanks[Pstream::myProcNo()] = hostName(); + // hosts[Pstream::myProcNo()] = hostName()+"."+name(pid()); + hosts[Pstream::myProcNo()] = hostName(); } - Pstream::gatherList(ioRanks); + Pstream::gatherList(hosts); DynamicList