- EclIO classes have been updated to support arrays with size beyond numeric limits for integers
- Output of arrays having 2^31 or more elements is facilitated by using a pair of headers
- The first header is of type X231, second should have the actual type
- The large array format extension is documented in the Eclipse File format manual
Calls '.flush()' on the contained 'ofstream' object. Needed as a
means of ensuring that bits in the internal buffers of the I/O
system are promptly output to permanent storage. This, in turn, is
needed in upcoming work on the summary writing feature.
This commit introduces a new OutputStream class for representing the
summary specification file (.SMSPEC). The stream is constructed
with constant data (output directory, basename, start date &c), and
provides a single write() member function that outputs a summary
specification.
Each call to write rewinds the underlying stream's output position.
Class EclOutput grants friendship to the new output stream class in
order to support easy stream rewinding.
Add a unit test to exercise the new class.
This commit introduces a new class,
Opm::ecl::OutputStream::Restart
that handles the details of opening restart output streams (all
combinations of formatted/unformatted and unified/separate), as well
as correctly positioning the stream 'put' indicator if we're opening
an existing unified restart file. In most cases, this will be a
simple append operation (std::ios_base::app), but there are some
subtleties that require more precise control. The new class is
befriended by EclOutput and ERst in order to access private member
functions and data members of these classes. That is needed in
order to handle file resize operations since some of the requisite
information is only available in those two classes.
We use Boost.Filesystem to implement file resize, as if by POSIX
function ::truncate(), and also to simplify filename generation.
These calls can be switched to std::filesystem once the project
requires C++17.
Intended use of the Restart class is
Restart rst(resultSet, formatted, unified);
rst.prepareStep(17); // Report step/SEQNUM 17.
rst.write("INTEHEAD", ihead);
// ...
The 'prepareStep' operation opens the file stream (if needed) and
also outputs a SEQNUM record in the case of a unified output stream.
Moreover, the 'resultSet' is a pair of output directory and case's
base name (e.g., "./mpi.np4/2019.05.14.01" and "NORNE_ATW2013") and
the formatted/unified flags are bools wrapped in structures.
The Restart class is intended to take over the role of the
'filename' string parameter of RestartIO::save().
Add a set of unit tests to demontrate usage and abilities of class
Restart.
This commit extends the EclOutput constructor to support letting the
client specify a particular open mode. This in turn prepares using
EclOutput as the basis for a restart file writer. Passing
mode=openmode::out is the common case for a new restart file, while
mode=openmode::app is the common case for an existing restart file.
Specifically, add a member function
EclOutput::message(const std::string&)
that outputs the string as an 'eclArrType::MESS'. This is in order
to support outputting 'STARTSOL' and 'ENDSOL' demarcations in a
restart file.
This makes the facility usable for the restart read/write code.
Specifically, import the I/O classes into namespace Opm::ecl, and
place the files in physical location opm/io/eclipse, and move the
test utilities to new top-level directory 'test_util/'. While here,
discontinue the 'testutil' static library since most of its features
are now available in the main 'opmcommon' library. This does entail
compiling a few of the test_util/ CPP files multiple times, and
adding the objects to each executable independently.