This commit generates the IAQN and RAQN restart vectors pertaining
to numeric aquifers. The arrays are sized according to the number
of records in the input AQUNUM keyword. RAQN is a mix of static and
dynamic information, including the cumulative total inflow volume of
water from the aquifer into the model. IAQN is exclusively static
information.
We add new members to 'AggregateAquiferData' and ensure that the
numeric aquifer arrays remain empty when no numeric aquifers exist
in the model. Add unit tests for these new arrays and update
existing unit tests to account for new dimension items.
When forming restart arrays for numerical aquifers (IAQN and RAQN)
we need to know the total number of records in the input AQUNUM
keyword as well as the record ID of each individual record. This
commit adds a tracking mechanism for this information.
While here, also add unit tests that verify that we've correctly
interpreted the AQUNUM records.
This commit extends the 'SummaryConfig' aquifer processing to
recognize numeric aquifer keywords without an explicit list of
aquifer IDs, i.e., summary keywords of the form
ANQR
/
We use the new functions '{analytic,numeric}AquiferIDs()' to form
lists of pertinent IDs once and then ensure that we create nodes
only for proper subsets of these ID sets.
Add unit tests to both the analytic and numeric configurations to
ensure that we generate these output sets or input errors when the
input file refers to IDs of incorrect type or out of range.
This commit adds two helper functions
std::vector<int> analyticAquiferIDs(const AquiferConfig&)
std::vector<int> numericAquiferIDs(const AquiferConfig&)
which return the numeric IDs of the model's analytic and numeric
aquifers respectively. These are useful for configuring aquifer
summary keywords of the form
AAQR
/
that do not list individual aquifer IDs and for identifying issues
in the input file when a summary keyword that does list its aquifer
IDs refers to an aquifer of incorrect category (e.g., ID of numeric
aquifer in an analytic aquifer summary keyword).
While here, also add more unit test coverage to the AquiferConfig
object. In particular, add a unit test that includes aquifers at
all.
This commit adds support for outputting the reservoir voidage volume
summary vectors CVPR (production rate), CVPT (cumulative production
total), CVIR (injection rate), and CVIT (cumulative injection total).
The simulator uses the 'data::Connection::reservoir_rate' member to
communicate these values, so add a special purpose evaluation
function to compute the requisite updates.
While here, also add 'CVPR' to the 'CONNECTION_PROBE'. This keyword
being missing looks to be an earlier oversight.
generate all the connections specified in the deck records first, then
filter out the wrong ones using processed grid later. The refactoring is
to avoid using the Deck explicitly in opm-grid.
This commit hooks the aquifer restart output facility (output arrays
{I,S,X}AAQ and {I,S,A}CAQ) up to the general "RestartIO" module. If
a simulation run uses analytic aquifers we construct an aquifer
output object at simulation start and store this in an optional<> in
the internal implementation object. Otherwise the optional holds
nullopt. We expand RestartIO::save() to take such an optional by
reference and aggregate/output aquifer information, directly after
the well information, if the optional holds a value. Update callers
accordingly.
This commit switches the INTEHEAD factory function to passing
dimensions related to aquifers by means of the 'AquiferDims'
structure. While here, also update description and names of a few
aquifer-related INTEHEAD items to reflect more recent understanding.
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.