/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2012-2016 OpenFOAM Foundation
Copyright (C) 2015-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see .
Class
Foam::functionObjects::writeFile
Description
Base class for writing single files from the function objects.
Usage
\verbatim
{
// Mandatory and other optional entries
...
// Optional (inherited) entries (runtime modifiable)
writePrecision 8;
writeToFile true;
useUserTime true;
}
\endverbatim
where the entries mean:
\table
Property | Description | Type | Reqd | Dflt
writePrecision | Number of decimal points | int | no | \
writeToFile | Produce text file output? | bool | no | true
useUserTime | Use user time (e.g. degrees)? | bool | no | true
updateHeader | Update header on mesh changes? | bool | no | true
\endtable
Note
The file header is normally updated whenver the mesh points or
topology changes. In some cases, the function object is actually
unaffected by these changes.
Use the \c updateHeader flag to override the default behaviour.
See also
- Foam::functionObject
- Foam::functionObjects::logFiles
SourceFiles
writeFile.C
\*---------------------------------------------------------------------------*/
#ifndef functionObjects_writeFile_H
#define functionObjects_writeFile_H
#include "objectRegistry.H"
#include "OFstream.H"
#include "IOmanip.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace functionObjects
{
/*---------------------------------------------------------------------------*\
Class functionObjects::writeFile Declaration
\*---------------------------------------------------------------------------*/
class writeFile
{
protected:
// Protected data
//- Reference to the region objectRegistry
const objectRegistry& fileObr_;
//- Prefix
const fileName prefix_;
//- Name of file
word fileName_;
//- File pointer
autoPtr filePtr_;
//- Write precision
label writePrecision_;
//- Flag to enable/disable writing to file
bool writeToFile_;
//- Flag to update the header, e.g. on mesh changes.
//- Default is true.
bool updateHeader_;
//- Flag to identify whether the header has been written
bool writtenHeader_;
//- Flag to use the specified user time, e.g. CA deg instead
//- of seconds. Default = true
bool useUserTime_;
//- Start time value
scalar startTime_;
// Protected Member Functions
//- Initialise the output stream for writing
void initStream(Ostream& os) const;
//- Return the base directory for output
fileName baseFileDir() const;
//- Return the base directory for the current time value
fileName baseTimeDir() const;
//- Return autoPtr to a new file using file name
// Note: no check for if the file already exists
virtual autoPtr newFile(const fileName& fName) const;
//- Return autoPtr to a new file for a given time
virtual autoPtr newFileAtTime
(
const word& name,
scalar timeValue
) const;
//- Return autoPtr to a new file using the simulation start time
virtual autoPtr newFileAtStartTime
(
const word& name
) const;
//- Reset internal file pointer to new file with new name
virtual void resetFile(const word& name);
//- Return the value width when writing to stream with optional offset
Omanip valueWidth(const label offset = 0) const;
//- No copy assignment
void operator=(const writeFile&) = delete;
// Housekeeping
//- Deprecated(2022-09) Return autoPtr to a new file for a given time
//
// \deprecated(2022-09) - use newFileAtTime function
FOAM_DEPRECATED_FOR(2022-09, "newFileAtTime function")
virtual autoPtr createFile
(
const word& name,
scalar timeValue
) const
{
return newFileAtTime(name, timeValue);
}
//- Deprecated(2022-09) Return autoPtr to a new file
//- using the simulation start time
//
// \deprecated(2022-09) - use newFileAtStartTime function
FOAM_DEPRECATED_FOR(2022-09, "newFileAtStartTime function")
virtual autoPtr createFile
(
const word& name
) const
{
return newFileAtStartTime(name);
}
public:
//- Additional characters for writing
static label addChars;
// Constructors
//- Construct from objectRegistry, prefix, fileName
writeFile
(
const objectRegistry& obr,
const fileName& prefix,
const word& name = "undefined",
const bool writeToFile = true
);
//- Construct from objectRegistry, prefix, fileName
//- and read options from dictionary
writeFile
(
const objectRegistry& obr,
const fileName& prefix,
const word& name,
const dictionary& dict,
const bool writeToFile = true
);
//- Construct copy
writeFile(const writeFile& wf);
//- Destructor
virtual ~writeFile() = default;
// Member Functions
//- Read
virtual bool read(const dictionary& dict);
//- Return access to the file (if only 1)
virtual OFstream& file();
//- Flag to allow writing to file
virtual bool writeToFile() const;
//- Flag to allow writing the header
virtual bool canWriteHeader() const;
//- Return width of character stream output
virtual label charWidth() const;
//- Write a commented string to stream
virtual void writeCommented(Ostream& os, const string& str) const;
//- Write a tabbed string to stream
virtual void writeTabbed(Ostream& os, const string& str) const;
//- Write a commented header to stream
virtual void writeHeader(Ostream& os, const string& str) const;
//- Write the current time to stream
virtual void writeCurrentTime(Ostream& os) const;
//- Write a break marker to the stream
virtual void writeBreak(Ostream& os) const;
//- Write a (commented) header property and value pair
template
void writeHeaderValue
(
Ostream& os,
const string& property,
const Type& value
) const;
//- Write a given value to stream with the space delimiter
template
void writeValue
(
Ostream& os,
const Type& val
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace functionObjects
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
#include "writeFileTemplates.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //