We used to tie reporting these quantities to whether or not a group
had any guide rates for production (GuideRate::has()), but this is
clearly insufficient for injection guide rates.
This commit adds an overload set named
loadRestartGuideRates
which, collectively, initialises the contained GuideRate object
using guide rate values from the restart file. This is necessary,
but not quite sufficient, to restart models in prediction mode with
group-level constraints.
Mostly for readability in preparation of initialising the guide rate
object with values from the restart file. The new stages, each with
its own 'loadRestart*Data()' member function are
- Connection
- Segment
- Well
- Group
While here, also switch to using std::any_of() in place of a raw
loop.
The output layer expects its input values to be strictly SI, but we
know that the GuideRate container's values are in output units.
Forgotten in PR #3467 (commit 517db198f8).
This commit moves the bodies of the various 'dynamicDispatch_<>()'
cases out to separate helper functions. Not only does this reduce
the number of nested conditionals, it also helps reasoning about
each case in isolation and aids future maintenance.
This commit broadcasts the 'removed_cells' to all ranks and uses
that array to delete any analytic aquifer connections that might
have been previously formed to those deactivated cells. This is
needed to have a consistent view of which cells are connected to
analytic aquifers.
This commit activates the restart support for analytical aquifers.
Analytic aquifer keywords do not exist in the input file for
restarted runs since the 'SOLUTION' section is empty apart from from
the 'RESTART' specification.
We use the 'RestartIO::Aquifer' class to load the information from
the restart file and then assign this information to the
AquiferConfig object hosted by the EclipseState. Loading Schedule
information from the restart file is still contingent on the
'--sched-restart=false' command line setting.
We assign cumulative production only on the process that connects to
the reservoir model. As a tiny optimisation, we return 0.0 early
as the aquifer flux on processes that do not connect to the
reservoir.
If, in a restarted run, a single analytical aquifer object happens
to connect to the reservoir model from multiple separate MPI
processes we must not attribute the full historic cumulative water
production from the aquifer to each process.
This commit makes a rough estimate based on the connection areas of
how much of the total cumulative production is attributable to each
process and reduces the restart value using that fraction. This is,
at best, a hack but it is currently the best we can do with the
information available in the restart files. Complete fidelity will
entail tracking cumulative production at the connection level.
In particular, don't print uninitialized memory (Reorder.cpp:left)
and don't capture objects ('prm') that aren't actually used. While
here, refactor the initialization of the MT19937 random number
generator. Constructing this object is too expensive to do for each
try, especially when we can just run the generator in place.
This commit switches to using the new 'typeData' interface for
representing type-specific aquifer data items. In particular we use
the new 'typeData.is<>()' and 'typeData.get<>()' member functions to
query and access the data that is specific to each aquifer type
(e.g., Carter-Tracy or numerical).
While here, also expand the reported data items for numerical
aquifers to one initial pressure value for each aquifer cell. This
is needed for restart purposes.
This commit protects against Opm::Well instances for which the sets
of connections are empty. In those cases, do not put entries in the
well container as there is no influence on the systems of non-linear
equations.
This commit switches to using the analytic aquifer's intrinsic water
properties (i.e., the mass density and the viscosity), and to get
the time constant from the *_data structure instead of calculating
this value with separate logic. Note that this switches to using a
single density value for the aquifer instead of separate density
values for each aquifer connection.
If the aquifer's initial pressure is defaulted we still compute an
equilibrated initial pressure value. We then use the *_data
structure's 'finishInitialisation()' member function to derive the
aforementioned PVT properties.
Finally, report these values in the aquifer type-specific sub
structures of data::AquiferData for restart output purposes.
This commit distinguishes the reference condition pore volume from
the dynamic, pressure (and/or temperature) dependent pore volume
value. Previously we would report the latter as the 'PORV' value in
the "Field Totals" and "FIPNUM region" reports, but this commit
switches to reporting the former instead-mostly for compatibility.
We still report the dynamic pore volume value, but now we report
this on a line of its own, before the table, using one of the forms
Field total pressure dependent pore volume = 12345 RM3
FIPNUM report region 1 pressure dependent pore volume = 123 RM3