It was disabled because Dune::CpGrid::loadBalance() dropped all cells
which were disconnected from the main part of the grid. since the
problem was fixed in https://github.com/OPM/opm-grid/pull/245, let's
re-enable load balancing.
this code currently has the same limitations as the one in
opm-simulators: these geologic events may only change the porosity of
some cells or the values of the transmissibility, i.e., changes to the
grid topology are not possible.
i.e., if a phase is not present in the upwind DOF, it should not be
considered. this handles things analogous to the opm-simulators
code. (which uses the residual saturation of the phase for the
decision, but fundamentally applies the same logic.)
i.e., it now uses the PORV grid property from opm-parser and does the
accumulation of the disabled cells manually. This patch should be
equivalent to the opm-simulators PR #806
( https://github.com/OPM/opm-simulators/pull/806 ).
grid.cellCenterDepth() is the average of the Z-coordinates of the
element vertices which, for distorted elements, is slightly different
from the depth of the centroid.
IMO this is conceptually a change for the worse, but ECL likes to do a
lot of things inconsistently, so let's budge.
transmissibilities of 10^-20 can occur in real decks. (i.e., Norne;
although the face which belongs to the transmissibility is tiny it
nonetheless affects convergence for some reason.)
now it is always updated at the beginning of an episode. the reason
why this works is that both features do not affect the value of the
residual for the initial solution but only its derivatives. (if
something affects the values of some quantities which are needed to
calculate some parameters, then the first update needs to happen right
after the initial solution is applied and *before* the parameter is
determined.)
10 is a bit too little: the first time step of SPE9_CP now needs 13
iterations to converge. (before the transmissibility change of the
previous commit it was 8 iterations IIRC.)
this may not be the nicest way to calculate transmissibilities
(because the coordinate of the cell center can be located outside of
the cell) but at least the results are the same as the ones obtained
by flow on Norne.
updating them at the end of each time step may make more sense from a
physical POV, but flow updates it only after each report step, so
let's do the same...
before, if the pressure gradient was zero the interior DOF was assumed
to be the upstream one. On the other side of the face it was done the
same which meant that the upstream cell was different depending on
which cell was looked at. This did not have any effect on the value of
the flux (because the pressure gradient was zero anyway), but when AD
was used this resulted in non-symmetric derivatives. In principle this
is okay because the point where the pressure difference between cells
is zero is a kink and thus the flux derivatives there are
undefined. In practice this made comparing with flow quite difficult,
so let's change it...
this is useful if wells shall be handled externally (e.g. most
prominently the upcoming flow wrapper which uses ebos to linearize the
mass balance equations).
disabling the well treatment can be done by setting the DisableWells
property to "true".
the reason why this is needed now probably is because
std::is_convertible<Scalar, Evaluation> is false. While strictly
speaking, scalars can be converted to Evaluations by assuming them to
be evaluations of the constant function, this patch is IMO beneficial
anyway because it makes such conversions more visible.
the in-file lists of authors has been removed in favor of a global
list of authors in the LICENSE file. this is done because (a)
maintaining a list of authors at the beginning of a file is a major
pain in the a**, (b) the list of authors was not accurate in about 85%
of all cases where more than one person was involved and (c) this list
is not legally binding in any way (the copyright is at the person who
authored a given change, if these lists had any legal relevance, one
could "aquire" the copyright of the module by forking it and removing
the lists...)
the only exception of this is the eWoms fork of dune-istl's solvers.hh
file. This is beneficial because the authors of that file do not
appear in the global list. Further, carrying the fork of that file is
required because we would like to use a reasonable convergence
criterion for the linear solver. (the solvers from dune-istl do
neither support user-defined convergence criteria not do the
developers want support for it. (my patch was rejected a few years
ago.))