This commit adds support for creating the analytic aquifer objects
Opm::AquiferCT
Opm::Aquifetp
Opm::Aquancon
Opm::AquiferConfig
from information stored in the restart vectors
{I,S,X}AAQ
{I,S}CAQ
We add a new helper class
Opm::RestartIO::RstAquifer
which contain the same data members as the '*_data' structures of
the analytic aquifer objects. Those analytic aquifer objects then
get friendship from the '*_data' structures in order to assign the
private members from the corresponding restart information. We
finally add a gateway to EclipseState that consumes an RstAquifer
instance and overwrites the internal AquiferConfig object when the
restarted run contains analytic aquifers.
Update RstState constructor API to meet requirements of RstAquifer,
notably by adding an EclipseGrid parameter. That in turn is needed
by the RstAquifer to translate connection (I,J,K) tuples to active
cell IDs.
Note that if an analytic aquifer does not have any connections then
this facility will not load said aquifer. That may be a problem
when plotting summary curves, but we will address the issue later if
it comes up.
This former restricts summary output events to coincide with the
report step while the latter (*O) turns off this restriction and
makes summary output for every timestep.
- command line option --enable-esmry, default = false
- complete re-write of esmry file for every time step
Updating of class ESmry
- remove automatic loading from ESMRY
This commit adds a new helper object
Opm::WriteRestartFileEvents
that identifies when a restart file output event occurs as well as
the most recent output event prior to a particular report step. We
implement this facility in terms of a dense bit vector that wastes
up to 63 bits of space. Most of the logic is devoted to finding the
most recent previous output event, of which the core routine is
counting the number of leading zero bits in a 64 bit value. We've
elected to implement this in a portable manner using binary search,
although most implementations provide efficient intrinsics for this
operation, e.g., GCC's __builtin_clzl. In C++20 we can use the new
function std::countl_zero() from <bit>.
This commit adds a new helper class,
Opm::data::TypeSpecificData
which holds type-specific sub-structures for Carter-Tracy,
Fetkovich, and Numerical aquifers. We implement this facility in
terms of a std::variant<> of simple structures. In turn, use the
type-specific data for numerical aquifers to fill in the initial
aquifer cell pressures where not available in the input data.
We support both Fetkovich and Carter-Tracy aquifers. We presently
output trivial values only in the 'ACAQ' (per-connection, double
precision elements), but otherwise assemble reasonable values for
many items.
We leverage the fact that the aquifer connections do not change
throughout the simulation run. The "Aggregate" API is therefore
constructed in such a way that most of the expensive operations
(e.g., mapping active cell IDs to their columnar counterparts)
happens once (in the constructor) and the per-aquifer operations are
performed for each restart output step. We intend that one aquifer
output object be constructed at the start of the simulation run, if
needed, and that this object will live until simulation shutdown.