56 commsType_(commsType),
63 <<
"decomposedBlockData " <<
name()
64 <<
" constructed with IOobject::MUST_READ_IF_MODIFIED"
65 " but decomposedBlockData does not support automatic rereading."
91 commsType_(commsType),
98 <<
"decomposedBlockData " <<
name()
99 <<
" constructed with IOobject::MUST_READ_IF_MODIFIED"
100 " but decomposedBlockData does not support automatic rereading."
131 List<char>(move(list)),
132 commsType_(commsType),
139 <<
"decomposedBlockData " <<
name()
140 <<
" constructed with IOobject::MUST_READ_IF_MODIFIED"
141 " but decomposedBlockData does not support automatic rereading."
171 Pout<<
"decomposedBlockData::readMasterHeader:"
179 is.
fatalCheck(
"read(Istream&) : reading entry");
202 os <<
" version " << version <<
";\n";
205 os <<
" format " <<
format <<
";\n"
206 <<
" class " <<
type <<
";\n";
210 os <<
" note " << note <<
";\n";
215 os <<
" location " << location <<
";\n";
218 os <<
" object " <<
name <<
";\n"
234 Pout<<
"decomposedBlockData::readBlock:"
235 <<
" stream:" << is.
name() <<
" attempt to read block " << blocki
247 is.
fatalCheck(
"read(Istream&) : reading entry");
249 string buf(data.begin(), data.size());
256 <<
"problem while reading header for object "
264 is.
fatalCheck(
"read(Istream&) : reading entry");
269 string buf(data.begin(), data.size());
276 <<
"problem while reading header for object "
280 fmt = headerStream.
format();
283 for (
label i = 1; i < blocki+1; i++)
287 is.
fatalCheck(
"read(Istream&) : reading entry");
289 string buf(data.begin(), data.size());
293 realIsPtr().format(fmt);
294 realIsPtr().version(ver);
310 Pout<<
"decomposedBlockData::readBlocks:"
311 <<
" stream:" << (isPtr.
valid() ? isPtr().name() :
"invalid")
313 <<
" comm:" << comm <<
endl;
328 is.
fatalCheck(
"read(Istream&) : reading entry");
340 is.
fatalCheck(
"read(Istream&) : reading entry");
385 is.
fatalCheck(
"read(Istream&) : reading entry");
397 is.
fatalCheck(
"read(Istream&) : reading entry");
431 Pout<<
"decomposedBlockData::readBlocks:"
432 <<
" stream:" << (isPtr.
valid() ? isPtr().name() :
"invalid")
451 is.
fatalCheck(
"read(Istream&) : reading entry");
453 string buf(data.begin(), data.size());
460 <<
"problem while reading header for object "
474 is.
fatalCheck(
"read(Istream&) : reading entry");
501 string buf(data.begin(), data.size());
522 is.
fatalCheck(
"read(Istream&) : reading entry");
524 string buf(data.begin(), data.size());
531 <<
"problem while reading header for object "
545 is.
fatalCheck(
"read(Istream&) : reading entry");
562 string buf(data.begin(), data.size());
570 string versionString(realIsPtr().version().str());
577 os << realIsPtr().format();
578 string formatString(os.
str());
580 realIsPtr().format(formatString);
605 char* data0Ptr =
reinterpret_cast<char*
>(datas.
begin());
612 forAll(recvOffsets, proci)
617 int(
reinterpret_cast<char*
>(&datas[proci]) - data0Ptr);
624 reinterpret_cast<const char*
>(&data),
640 const label startProc,
653 sliceSizes.
setSize(numProcs, 0);
654 sliceOffsets.
setSize(numProcs+1, 0);
657 label proci = startProc;
658 for (
label i = 0; i < nProcs; i++)
660 sliceSizes[proci] = int(recvSizes[proci]);
661 sliceOffsets[proci] = totalSize;
662 totalSize += sliceSizes[proci];
665 sliceOffsets[proci] = totalSize;
697 const off_t maxBufferSize,
699 const label startProci
704 label nSendProcs = -1;
707 off_t totalSize = recvSizes[startProci];
708 label proci = startProci+1;
709 while (proci < nProcs && (totalSize+recvSizes[proci] < maxBufferSize))
711 totalSize += recvSizes[proci];
715 nSendProcs = proci-startProci;
722 reinterpret_cast<const char*
>(&nSendProcs),
725 reinterpret_cast<char*
>(&
n),
745 const bool syncReturnState
750 Pout<<
"decomposedBlockData::writeBlocks:"
751 <<
" stream:" << (osPtr.
valid() ? osPtr().name() :
"invalid")
752 <<
" data:" << data.
size()
753 <<
" (master only) slaveData:" << slaveData.size()
761 if (slaveData.size())
780 for (
label proci = 1; proci < nProcs; proci++)
782 os <<
nl <<
nl <<
"// Processor" << proci <<
nl;
785 os << slaveData[proci];
807 for (
label proci = 1; proci < nProcs; proci++)
809 elems.
setSize(recvSizes[proci]);
820 os <<
nl <<
nl <<
"// Processor" << proci <<
nl;
860 label nSendProcs = nProcs-1;
862 while (nSendProcs > 0 && startProc < nProcs)
864 nSendProcs = calcNumProcs
870 maxMasterFileBufferSize
905 label proci = startProc;
906 proci < startProc+nSendProcs;
910 os <<
nl <<
nl <<
"// Processor" << proci <<
nl;
917 sliceOffsets[proci+1]-sliceOffsets[proci],
923 startProc += nSendProcs;
954 return readBlocks(comm_, isPtr, data, commsType_);
964 reinterpret_cast<const char*
>(data.
cbegin()),
986 formatString = os.
str();
998 fileName masterLocation(instance()/db().dbDir()/local());
1044 gather(comm_,
label(this->byteSize()), recvSizes);
1066 is.
fatalCheck(
"decomposedBlockData::numBlocks(const fileName&)");
1074 token firstToken(is);
1091 token sizeToken(is);
#define forAll(list, i)
Loop across all elements in list.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
static Stream & writeBanner(Stream &os, bool noHint=false)
Write the standard OpenFOAM file/dictionary banner.
static Stream & writeEndDivider(Stream &os)
Write the standard end file divider.
string & note()
Return non-constant access to the optional note.
readOption readOpt() const
static constexpr const char * foamFile
Keyword for the FoamFile header sub-dictionary.
const word & headerClassName() const
Return name of the class name read from header.
virtual void rename(const word &newName)
Rename.
static Stream & writeDivider(Stream &os)
Write the standard file section divider.
bool readHeader(Istream &)
Read header.
const word & name() const
Return name.
bool writeHeader(Ostream &) const
Write header.
string str() const
Return the versionNumber as a character string.
static const versionNumber currentVersion
Current version number.
streamFormat format() const
Return current stream format.
virtual const fileName & name() const
Return the name of the stream.
void fatalCheck(const char *operation) const
Check IOstream status for given operation.
streamFormat
Enumeration for the format of data in the stream.
versionNumber version() const
Return the stream version.
static streamFormat formatEnum(const word &)
Return stream format of given format name.
compressionType
Enumeration for the format of data in the stream.
bool good() const
Return true if next operation might succeed.
Input inter-processor communications stream.
Input from memory buffer stream.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
void putBack(const token &)
Put back token.
void size(const label)
Override size to be inconsistent with allocated storage.
void operator=(const UList< T > &)
Assignment to UList operator. Takes linear time.
void setSize(const label)
Reset size of List.
Output inter-processor communications stream.
virtual ostream & stdStream()
Access to underlying std::ostream.
Output to memory buffer stream.
string str() const
Return the string.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
virtual Ostream & writeQuoted(const std::string &, const bool quoted=true)=0
Write std::string surrounded by quotes.
Buffers for inter-processor communications streams (UOPstream, UIPstream).
void finishedSends(const bool block=true)
Mark all sends as having been done. This will start receives.
static void scatter(const List< commsStruct > &comms, T &Value, const int tag, const label comm)
Scatter data. Distribute without modification. Reverse of gather.
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
A List obtained as a section of another List.
Input inter-processor communications stream operating on external buffer.
static label read(const commsTypes commsType, const int fromProcNo, char *buf, const std::streamsize bufSize, const int tag=UPstream::msgType(), const label communicator=0)
Read into given buffer from given processor and return the.
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
const_iterator cbegin() const
Return const_iterator to begin traversing the constant UList.
label size() const
Return the number of elements in the UList.
iterator begin()
Return an iterator to begin traversing the UList.
std::streamsize byteSize() const
Return the binary size in number of characters of the UList.
Output inter-processor communications stream operating on external buffer.
static bool write(const commsTypes commsType, const int toProcNo, const char *buf, const std::streamsize bufSize, const int tag=UPstream::msgType(), const label communicator=0)
Write given buffer to given processor.
commsTypes
Types of communications.
static int masterNo()
Process index of the master.
static bool master(const label communicator=0)
Am I the master process.
static const NamedEnum< commsTypes, 3 > commsTypeNames
static void gather(const char *sendData, int sendSize, char *recvData, const UList< int > &recvSizes, const UList< int > &recvOffsets, const label communicator=0)
Receive data from all processors on the master.
static label nProcs(const label communicator=0)
Number of processes in parallel run.
static void scatter(const char *sendData, const UList< int > &sendSizes, const UList< int > &sendOffsets, char *recvData, int recvSize, const label communicator=0)
Send data to all processors from the root of the communicator.
static int & msgType()
Message tag of standard messages.
static int myProcNo(const label communicator=0)
Number of this process (starting from masterNo() = 0)
bool valid() const
Return true if the autoPtr valid (ie, the pointer is set)
void reset(T *=nullptr)
If object pointer already set, delete object and set to given.
decomposedBlockData is a List<char> with IO on the master processor only.
static bool writeBlocks(const label comm, autoPtr< OSstream > &osPtr, List< std::streamoff > &start, const UList< char > &masterData, const labelUList &recvSizes, const PtrList< SubList< char >> &slaveData, const UPstream::commsTypes, const bool syncReturnState=true)
Write *this. Ostream only valid on master. Returns starts of.
static void gatherSlaveData(const label comm, const UList< char > &data, const labelUList &recvSizes, const label startProc, const label nProcs, List< int > &recvOffsets, List< char > &recvData)
Helper: gather data from (subset of) slaves. Returns.
virtual bool writeData(Ostream &) const
Write separated content. Assumes content is the serialised data.
static bool readMasterHeader(IOobject &, Istream &)
Read header. Call only on master.
virtual bool writeObject(IOstream::streamFormat, IOstream::versionNumber, IOstream::compressionType, const bool write) const
Write using given format, version and compression.
static void gather(const label comm, const label data, labelList &datas)
Helper: gather single label. Note: using native Pstream.
static label numBlocks(const fileName &)
Detect number of blocks in a file.
static void writeHeader(Ostream &os, const IOstream::versionNumber version, const IOstream::streamFormat format, const word &type, const string ¬e, const fileName &location, const word &name)
Helper: write FoamFile IOobject header.
decomposedBlockData(const label comm, const IOobject &, const UPstream::commsTypes=UPstream::commsTypes::scheduled)
Construct given an IOobject.
static bool readBlocks(const label comm, autoPtr< ISstream > &isPtr, List< char > &data, const UPstream::commsTypes commsType)
Read data into *this. ISstream is only valid on master.
static autoPtr< ISstream > readBlock(const label blocki, Istream &is, IOobject &headerIO)
Read selected block (non-seeking) + header information.
static label calcNumProcs(const label comm, const off_t maxBufferSize, const labelUList &recvSizes, const label startProci)
Helper: determine number of processors whose recvSizes fits.
virtual bool read()
Read object.
virtual ~decomposedBlockData()
Destructor.
A list of keyword definitions, which are a keyword followed by any number of values (e....
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
A class for handling file names.
regIOobject is an abstract class derived from IOobject to handle automatic object registration with t...
bool headerOk()
Read and check header info.
A token holds items read from Istream.
const word & wordToken() const
A class for handling words, derived from string.
static const word null
An empty word.
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
#define WarningInFunction
Report a warning using Foam::Warning.
void write(std::ostream &os, const bool binary, List< floatScalar > &fField)
Write floats ascii or binary.
void writeHeader(std::ostream &, const bool isBinary, const std::string &title)
Write header.
const fileOperation & fileHandler()
Get current file handler.
errorManipArg< error, int > exit(error &err, const int errNo=1)
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Ostream & endl(Ostream &os)
Add newline and flush stream.
word name(const bool)
Return a word representation of a bool.
defineTypeNameAndDebug(combustionModel, 0)
prefixOSstream Pout(cout, "Pout")
fileType type(const fileName &, const bool checkVariants=true, const bool followLink=true)
Return the file type: directory or file.
word format(conversionProperties.lookup("format"))