This commit introduces a new helper facility,
data::InterRegFlowMap
that knows how to interpret region IDs. It is a simple wrapper
around a common CSR representation of (source, destination) region
ID pairs with the additional feature that the element type of the
connection is a linear sequence values of arithmetic type. We've
initially elected to make this sequence out of 'float' in order to
conserve memory since we expect to do little arithmetic to the
sequence itself outside of compression and parallel communication.
Client code will be of two primary categories
1. Producing side which inserts flow rates from individual
connections, compresses the result when done, and communicates
the results to one or more parallel I/O ranks
2. Consuming side, typically on an I/O rank, which merges the
contributions from multiple source ranks and extracts values
pertaining inter-region flows for purpose of outputting time
series data to a summary file.
The first case will create and populate 'FlowRates' and add these
into the container using the 'addConnection' function and finally
call 'compress' when complete. Consumers will then use member
function 'getInterRegFlows' to extract a signed view of flow rate
values associated to a particular region ID pair (nullopt if no such
pair is registered).
This commit introduces a wrapper for a linear subrange of
consecutive elements of an arithmetic type that imposes an ordering
of the elements when treated as directional component surface flow
rates. The wrapper distinguishes negative from positive flow rate
contributions and tracks those separately. This is a building block
for accounting for the inter-region flows in a parallel context.
This commit adds a new query
SummaryConfig::fip_regions_interreg_flow
that retrieves the set of FIP array names (e.g., FIPNUM and FIPXYZ)
that are associated to any inter-region flow summary keywords. This
query method returns an empty set if there are no inter-region flow
summary keywords.
Allow ACTIONX keywords with empty conditions, these ACTIONX keywords will always
evaluate to false. Main motivation is to facilitate dummy keywords for PYACTION.
The run() function invoked by PYACTION has got a new fifth argument which is a
callable the script should utilize to apply the keywords from an ACTIONX
keyword. The callable is implemented as C++ lambda which will run the
Schedule::iterateScheduleSection() method and make sure an updated
SimulatorUpdate variable can be passed back to the simulator.
This commit adds new nodes pertaining to the inter-region flows to
the summary configuration keyword list. We combine the pair of
region IDs into a single 'NUMS' value as part of creating the node.
We also split inter-region nodes into a "supported" and an
"unsupported" set, with the former containing the oil, gas, and
water keywords.
While here, also correct a misprint in a diagnostic message which I
noticed as part of developing the new feature.
This commit introduces new helper functions
int EclIO::combineSummaryNumbers(int, int)
tuple<int, int> EclIO::splitSummaryNumber(int)
that know about the relation
combined = n1 + 32768*(n2 + 10)
This relation is typically used to combine one-based region IDs for
inter-region flows into a single 'NUMS' entry in the summary file.
This commit adds support for recognizing additional inter-region
flow rate/cumulatives at the parser level. In particular, we now
have input support for the E300-compatible keyword strings
R[OGW]F(R[-+]?|T[-+])
(e.g., ROFR, RGFT-, or RWFR+). This, in turn, ensures that the
parsing process does not abruptly terminate when encountering such
summary keywords. This is also a necessary step towards supporting
actually calculating those summary vectors, but we presently do not
support doing so.
Expand the minimum, input-reading only, corresponding unit test to
include the oil, gas, and water varieties of the new keyword strings.
While here, also properly classify the per-phase gas cumulatives
RGFTG, RGFTL
as inter-region summary vectors. These were inadvertently listed as
per-region vectors (i.e., in the REGION_PROBE instead of in the
REGION2REGION_PROBE).
This commit adds a new member function,
bool Well::hasRefDepth() const
that allows the caller to query whether or not a particular well has
an active value for the well BHP reference depth. The most common
cause of this value being missing is that the depth item of WELSPECS
is defaulted while the well is not connected to any active cells.
This predicate allows client code, e.g., the restart output module,
to safely access reference depth values in the case of potentially
missing reference depths.