This commit promotes the 'aquifer' data member of 'RestartValue' to
first class status. In particular, this means that users must
provide aquifer data, albeit possibly empty, when constructing the
RestartValue object for input or output.
This is in preparation of using more dynamic aquifer quantities from
the simulator layer as part of the restart I/O.
This commit introduces 'MessageBuffer' read and write operations for
the CarterTracyData and FetkovichData structures in preparation of
communicating these substructures from parallel processes to the IO
rank. This is foundational work for retrieving more of the dynamic
quantities pertaining to aquifers from the simulation layer.
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.
This commit checks that gas lift is active before outputting a
positive value in INTEHEAD[EACHNC]. Unless gas lift is activated
through keyword LIFTOPT, that item in INTEHEAD must be zero.
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.
This commit adds support for calculating and outputting the
CT-specific summary vectors "AAQTD" (dimensionless time, real time
divided by aquifer's time constant) and "AAQPD" (dimensionless
pressure-influence function evaluated at dimensionless time).
This commit adds a new data member
Well::Status dynamicStatus
to the data::Well object. This member records the simulator's
notion of a well's open/shut/stop status and is especially needed to
support WECON-type status changes once the simulator maintains both
open and shut wells.
While here, also change multiple summary primitives to not look up
the same values repeatedly.
The protocol for outputting an aquifer's active cell IDs to the
restart file requires that the cells be enumerated according to
their column. In particular, the aquifer's notion of a model's
active cells correspond to a cell ordering of the form
for (i = 0; i < Nx; ++i)
for (j = 0; j < Ny; ++j)
for (k = 0; k < Nz; ++k)
use(X(i, j, k))
instead of the common ordering, sometimes referred to as "natural
ordering"
for (k = 0; k < Nz; ++k)
for (j = 0; j < Ny; ++j)
for (i = 0; i < Nx; ++i)
use(X(i, j, k))
which is employed elsewhere.
This commit adds a special purpose mapping facility which will
translate active cell IDs from natural ordering to the columnar
enumeration. The facility is intentionally bare-bones because we
do not expect to use it outside of the restart writing code, and
only in a limited fashion within that context. We will however
consider adding more features if the need arises.
code improvement plus initial changes on test dataset
removed changes to test-dataset
changes to adapt to changes of Schedule object
Added test data set
changed test data - all in one DATA-file, changed serielizer - vector string
added unit test of INode data
first code that runs and outputs the INODE array
Added INODE and parts of IBRAN
added contributions for IBRAN and INOBR
added changes for output of RNODE
initial changes for RBRAN
Note: We're missing the 'LIQUID' option (integer value 4) since
Well::getPreferredPhase()
does not return that value.
Also, while here, remove the previously misattributed IWEL[15] item.
This item is the well's preferred phase, not the prediction control.
Finally, don't assign the active control mode to the history control.
That was a mistake.
- The NNC and EDITNNC keywords are internalized in the same class.
- The EDITNNC keyword operations are applied directly to the NNC keywords.
- The nnc vectors are ordered with cell1 < cell2 and ascending order.
- An api has been added to get the KeywordLocation from an NCC
- NNC/EDITNNC which is connected to inactive cell is ignored