The block-Jacobi partitioner (commit e360c00b7) uses grid interfaces
that are only available in CpGrid and this blocks introducing other
grid managers such as ALUGrid. Since the partitioner was only added
for OpenCL, guard special purposes accesses with HAVE_OPENCL.
This is a temporary measure and we will venture to restore the
partitioner later, although possibly restricted to CpGrid only.
Mostly to reduce the number of nested scopes in doLoadBalance_() and
to make the data flow a little easier to track for human readers.
While here, also use down-casts to pointer instead of references.
Doing so replaces try/catch blocks with simpler if/else blocks.
Reimplement face transmissibility calculation/extraction loop in
terms of helper functions elements() and intersections().
This commit calculates the various BxIP* summary output values such
as BOIP (block-level oil-in-place) and BGIPL (block-level
gas-in-place in liquid phase). While here, also extract the
block-level dissolved gas-oil-ratio (BRS) and vaporised
oil-gas-ratio (BRV).
Adding explicit input specification of water-gas ratio (RVW) and RVW output plus simulator gas-water system with salt precipitation and water evaporation for
This commit switches the debug file's records of "failed" bubble and
dew point pressure calculations from a non-unique list of linearised
Cartesian indices to a unique list of (1-based) (I,J,K) tuples.
This format is hopefully easier to read for humans.
Thanks to [at]blattms for suggesting the gatherv() helper function
which greatly simplifies the communication pattern.
Example from selected time steps in a real field case with Cartesian
dimensions 137-by-236-by-58:
- Original
Finding the dew point pressure failed for 2 cells [1467066, 1467066]
Finding the dew point pressure failed for 8 cells [1467063, 1467063, 1467066, 1467066, 1467066, 1467066, 1467066, 1467066]
- This commit
Finding the dew point pressure failed for 1 cell [(71,89,46)]
Finding the dew point pressure failed for 2 cells [(68,89,46), (71,89,46)]
This is a potentially expensive operation and so we should not run
it unless such values are actually needed for output purposes (e.g.,
inter-region flow summary vectors).
This commit ensures that compute inter-region flow rates on all
ranks and collect those on the I/O rank using CollectDataToIORank.
We add a trivial EclInterRegFlowMap data member to the communication
object. This data member only knows the pertinent FIP region array
names, but uses existing read/write support to collect contributions
from all ranks into this "global" object. We then pass this global
object on to the summary evaluation routine.
This commit adds a new grid traversal that computes fluxes-presently
surface level component fluxes-for all bulk connections on the
current MPI rank. We aggregate those fluxes, if applicable, into a
container for inter-region flows, but this support could be extended
to capturing the full 3D vector flow rates for restart output if
needed.
This commit introduces a new helper class
Opm::EclInterRegFlowMapSingleFIP
that wraps a vector of
Opm::EclInterRegFlowMapSingleFIP
along with the associate array names (e.g., "FIPNUM" and any
additional "FIP*" arrays). We implement the same operations as the
*SingleFIP type and simply loop over the internal accumulators to
affect the operations.
Add unit tests to exercise the new class, including simulating
multiple MPI ranks that are communicated to a single I/O rank for
summary output purposes.
This commit introduces a new helper class
Opm::EclInterRegFlowMapSingleFIP
that wraps an object of type
Opm::data::InterRegFlowMap
along with the MPI rank's notion of a FIP region array definition
(e.g., the local FIPNUM array). The new single-FIP flow map is
responsible for accumulating local contributions to the inter-region
flows defined by that FIP array. In the case of connections between
MPI ranks, the rank that owns the lowest region ID accumulates the
associate flow rates.
Add unit tests to exercise the new class, including simulating
multiple MPI ranks that are communicated to a single I/O rank for
summary output purposes.