This commit adds a new class template argument,
bool PermitSelfConnections
with a default value of 'false', that enables client code to
configure whether or not function
addConnection(v1, v2)
creates a connection from v1 to v2 if v1 == v2. The default state
preserves the current behaviour which ignores such connections.
Permitting self connections makes the class slightly more general to
uses cases outside inter-region flow accumulation.
This commit extracts the internal helpers of class
InterRegFlowMap
out to a new public helper class template, CSRGraphFromCoordinates.
Client code can, at the expense of one additional data member and
some dynamic memory, elect to track the index pairs. This enables
O(1) assembly per element when used as part of a CSR matrix with a
value array, SA.
Class CSRGraphFromCoordinates does not track values. It is purely
for the sake of forming the IA and JA structure arrays. Upon
calling 'compress()', column indices are sorted per row and
duplicate column indices condensed to a single, unique,
representative.
Instead we use the old fashioned way of checking the size and then
either return the address of the first element or a nullptr.
ClosesOPM/opm-simulator#4472
In the admittedly special case that "position" is equal to the
buffer's size() and "n == 0", then the expression
&buffer[position]
will index out of bounds. Use the safer expression
buffer.data() + position
instead since that's valid when position <= size().
Detected by libstdc++'s debug mode (checked iterators).
This function converts a std::tm to a std::time_t, assuming UTC
and not local timezone. This is used instead of relying on
repeated calls to mktime(), which can fail on some system (BSD)
for dates before 1900.
This commit switches to constructing Box instances from a GridDims
and two call-back functions instead of taking an EclipseGrid
directly. The two call-back functions are a predicate for active
cells and a translation from Cartesian to active cell indices
respectively.
This is intended to simplify working with nested boxes, such as
those that occur for local grid refinement.
This commit switches the Cartesian -> IJK decomposition in GridDims
from K->J->I into the I->J->K order. The latter is simpler.
While here, also consistently use 'std::size_t' instead of 'size_t'.