ENH: collated: pass through label/scalar size. Fixes #1545.

This commit is contained in:
mattijs
2020-01-09 10:21:02 +00:00
parent 8bbf26f197
commit c186c884b2
3 changed files with 66 additions and 25 deletions

View File

@ -37,6 +37,7 @@ License
#include "labelPair.H" #include "labelPair.H"
#include "masterUncollatedFileOperation.H" #include "masterUncollatedFileOperation.H"
#include "IListStream.H" #include "IListStream.H"
#include "foamVersion.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -210,12 +211,10 @@ void Foam::decomposedBlockData::writeHeader
<< " class " << type << ";\n"; << " class " << type << ";\n";
// This may be useful to have as well // This may be useful to have as well
/*
if (os.format() == IOstream::BINARY) if (os.format() == IOstream::BINARY)
{ {
os << " arch " << foamVersion::buildArch << ";\n"; os << " arch " << foamVersion::buildArch << ";\n";
} }
*/
if (Pstream::parRun()) if (Pstream::parRun())
{ {
@ -290,6 +289,8 @@ Foam::autoPtr<Foam::ISstream> Foam::decomposedBlockData::readBlock
IOstream::versionNumber ver(IOstream::currentVersion); IOstream::versionNumber ver(IOstream::currentVersion);
IOstream::streamFormat fmt; IOstream::streamFormat fmt;
unsigned labelByteSize;
unsigned scalarByteSize;
{ {
UIListStream headerStream UIListStream headerStream
( (
@ -308,6 +309,8 @@ Foam::autoPtr<Foam::ISstream> Foam::decomposedBlockData::readBlock
} }
ver = headerStream.version(); ver = headerStream.version();
fmt = headerStream.format(); fmt = headerStream.format();
labelByteSize = headerStream.labelByteSize();
scalarByteSize = headerStream.scalarByteSize();
} }
for (label i = 1; i < blocki+1; i++) for (label i = 1; i < blocki+1; i++)
@ -330,6 +333,8 @@ Foam::autoPtr<Foam::ISstream> Foam::decomposedBlockData::readBlock
// Apply master stream settings to realIsPtr // Apply master stream settings to realIsPtr
realIsPtr().format(fmt); realIsPtr().format(fmt);
realIsPtr().version(ver); realIsPtr().version(ver);
realIsPtr().setLabelByteSize(labelByteSize);
realIsPtr().setScalarByteSize(scalarByteSize);
} }
return realIsPtr; return realIsPtr;
} }
@ -353,6 +358,22 @@ bool Foam::decomposedBlockData::readBlocks
bool ok = false; bool ok = false;
//// Scatter master header info
//string ver;
//unsigned labelByteSize;
//unsigned scalarByteSize;
//if (UPstream::master(comm))
//{
// ver = isPtr().version().str();
// labelByteSize = isPtr().labelByteSize();
// scalarByteSize = isPtr().scalarByteSize();
//}
//Pstream::scatter(ver); //, Pstream::msgType(), comm);
//Pstream::scatter(labelByteSize); //, Pstream::msgType(), comm);
//Pstream::scatter(scalarByteSize); //, Pstream::msgType(), comm);
if (commsType == UPstream::commsTypes::scheduled) if (commsType == UPstream::commsTypes::scheduled)
{ {
if (UPstream::master(comm)) if (UPstream::master(comm))
@ -637,19 +658,31 @@ Foam::autoPtr<Foam::ISstream> Foam::decomposedBlockData::readBlocks
Pstream::scatter(ok, Pstream::msgType(), comm); Pstream::scatter(ok, Pstream::msgType(), comm);
// version //- Set stream properties from isPtr on master
string versionString(realIsPtr().version().str());
Pstream::scatter(versionString, Pstream::msgType(), comm);
realIsPtr().version(IOstream::versionNumber(versionString));
// stream // Scatter master header info
string ver;
string format;
unsigned labelByteSize;
unsigned scalarByteSize;
if (UPstream::master(comm))
{ {
ver = isPtr().version().str();
OStringStream os; OStringStream os;
os << realIsPtr().format(); os << isPtr().format();
string formatString(os.str()); format = os.str();
Pstream::scatter(formatString, Pstream::msgType(), comm); labelByteSize = isPtr().labelByteSize();
realIsPtr().format(formatString); scalarByteSize = isPtr().scalarByteSize();
} }
Pstream::scatter(ver); //, Pstream::msgType(), comm);
Pstream::scatter(format); //, Pstream::msgType(), comm);
Pstream::scatter(labelByteSize); //, Pstream::msgType(), comm);
Pstream::scatter(scalarByteSize); //, Pstream::msgType(), comm);
realIsPtr().version(IOstream::versionNumber(ver));
realIsPtr().format(format);
realIsPtr().setLabelByteSize(labelByteSize);
realIsPtr().setScalarByteSize(scalarByteSize);
word name(headerIO.name()); word name(headerIO.name());
Pstream::scatter(name, Pstream::msgType(), comm); Pstream::scatter(name, Pstream::msgType(), comm);

View File

@ -34,6 +34,7 @@ License
#include "registerSwitch.H" #include "registerSwitch.H"
#include "masterOFstream.H" #include "masterOFstream.H"
#include "OFstream.H" #include "OFstream.H"
#include "foamVersion.H"
/* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */
@ -217,8 +218,15 @@ bool Foam::fileOperations::collatedFileOperation::appendObject
<< " version " << os.version() << ";\n" << " version " << os.version() << ";\n"
<< " format " << os.format() << ";\n" << " format " << os.format() << ";\n"
<< " class " << decomposedBlockData::typeName << " class " << decomposedBlockData::typeName
<< ";\n" << ";\n";
<< " location " << pathName << ";\n"
// This may be useful to have as well
if (os.format() == IOstream::BINARY)
{
os << " arch " << foamVersion::buildArch << ";\n";
}
os << " location " << pathName << ";\n"
<< " object " << pathName.name() << ";\n" << " object " << pathName.name() << ";\n"
<< "}" << nl; << "}" << nl;
IOobject::writeDivider(os) << nl; IOobject::writeDivider(os) << nl;

View File

@ -2039,18 +2039,18 @@ Foam::fileOperations::masterUncollatedFileOperation::readStream
else else
{ {
// Scatter master header info // Scatter master header info
string versionString; //string versionString;
string formatString; //string formatString;
if (isPtr.valid()) //if (isPtr.valid())
{ //{
versionString = isPtr().version().str(); // versionString = isPtr().version().str();
OStringStream os; // OStringStream os;
os << isPtr().format(); // os << isPtr().format();
formatString = (os.str()); // formatString = (os.str());
} //}
//
Pstream::scatter(versionString); //, Pstream::msgType(), comm); //Pstream::scatter(versionString); //, Pstream::msgType(), comm);
Pstream::scatter(formatString); //, Pstream::msgType(), comm); //Pstream::scatter(formatString); //, Pstream::msgType(), comm);
// Get size of file // Get size of file
off_t sz = Foam::fileSize(fName); off_t sz = Foam::fileSize(fName);