We need a global view of face-area fractions if aquifer connections
happen to be shared between processes. Add a new helper function,
BlackoilAquiferModel::computeConnectionAreaFraction()
that performs a collective operation to compute the total face areas
and then defers to the local aquifer objects to compute their face
area fractions.
While here, also split the initialisation of analytic aquifers into
two parts, one for the face area and connection mappings, and one
for the connection depths. Run the former as part of the object
constructor and the latter as part of 'initQuantities()'. This
ensures that we can computeConnectionAreaFraction() for all analytic
aquifers before assigning solution quantities from the restart file.
In particular, split the 'static' aquifer object initialisation
of member function 'init()' into a new helper function
initializeStaticAquifers()
This is in preparation of adding a similar function to handle
dynamic aquifer object initialisation from a restart file. To that
end, also add a new member function
createDynamicAquifers(episode_index)
containing the current implementation of beginEpisode(). Creating
the dynamic objects from a restart file then amounts to calling this
function with a different 'episode_index'. As another aid to
maintainability, add a new templated member function
createAnalyticAquiferPointer()
which forms 'unique_ptr<AquiferInterface>' objects for every known
type of analytic aquifer. This, in turn, requires reordering the
parameters of the AquiferConstantFlux constructor to match those of
the existing Fetkovich and Carter-Tracy types.
Finally, split the calculation of the constant flux aquifer's total
flux rate out to a new helper function
AquiferConstantFlux::totalFluxRate()
This commit adds logic to communicate more dynamic aquifer values
between the simulation and I/O layers. In particular, we ensure
that we allocate the 'aquFet' and 'aquCT' substructures of the
dynamic aquifer data as appropriate and that we collect this
information on the I/O rank as part of the restart output process.
We furthermore make the 'ParallelRestart' facility aware of dynamic
aquifer data in preparation of loading these values from the restart
file.
This commit adds a new member function,
initFromRestart()
to the EclBaseAquiferModel and the BlackoilAquiferModel. The former
does nothing, the latter calls AquiferInterface::initFromRestart()
on the contained analytic aquifer objects.