The new loadbalancer approach will create a graph representing the grid
where all cells that a well perforates are represented by one
vertex. The weight of that cell will be the number of cells it
represents. Also the weights of the faces will be added up due to the
merging of cells. A cell that is not perforated by any well is still
represented by one vertex with weight one.
In the old default appoach the number of vertices in the grid was
equal to the number of cells. Vertex weights were not used. For each
well we added an edge between all its perforated cells for which we
did set a very edge weight to force the cells to the same process
during partitioning.
For realistic cases we have seen improvements across the board due to
this. E.g. this resolved convergence issues on hard cases. Because of
that this becomes the default with this.
Avoiding the mutex-based ThreadedEntityIterator gives a good speedup,
the overhead from the single extra loop over the grid for initialization
should be small in comparison.
* use appropriate hypre init function
* properly handle hypre without device support
* don't add hypre preconditioner to factory if scalar type does not match
The type no longer uses operator overloading and the matching entity
back-end has been revised to no longer expose a vector of strings
for the well names directly.
The functions no longer use the 'episeodeIdx' or Schedule
parameters. Update callers accordingly.
While here, split some long lines and remove unneeded local objects.
fmt wants to do compile time validation of format strings under c++-20.
mark formatting strings constexpr where possible, and mark formats
runtime to disable validation where not possible.
This commit switches to using the new guarantees provided by
ActionX::wellpi_wells (PR OPM/opm-common#4296), namely that the well
names are returned in sorted order on all ranks, to simplify how we
exchange the PI/II values. In particular, given this guarantee, we
can calculate the maximum values across all ranks because zero
values correspond to missing entries and non-zero values correspond
to known entries.
This is in preparation of making the match set for ACTIONX more
general. Having a fully private WELPI framework means we can change
the types more freely without having to rebuild all users of
ActionHandler.
While here, also add Doxygen-style documentation to the ActionHandler.
we do the compostional related in GenericOutputBlackoilModule to minimize the code change.
there needs to be refatoring for GenericOutputBlackoilModule to split
the black oil and compostional related.
currently, it looks the value for ZMF is based on XMF and YMF.
ideally, the ZMF is part of the primary varialbes, it does not need to
be calculated based on XMF and YMF.
there is some refactoring that we can do here.
so the FlowProblemComp can output ecl style output.
it duplicates the OutputBlackoilModule and GenericOutputBlackoilModule
for compositional related output for now.
The new parameter CheckSatfuncConsistency, command line option
--check-satfunc-consistency, allows users to opt into running the
checks. The option currently defaults to 'false' to reflect the
somewhat experimental nature of the new facility.
The new parameter --num-satfunc-consistency-sample-points allows the
user to select the maximum number of reported failures for each
individual consistency check. By default, the simulator will report
at most five failures for each check.
We check the unscaled curves if the run does not activate the
end-point scaling option and the scaled curves otherwise. At
present we're limited to reversible and non-directional saturation
functions for the drainage process, but those restrictions will be
lifted in due time.
The 'globalIdx' generated by localIdxToGlobalIdx() is in the range
zero to number of active cells in global model, not zero to number
of active cells on rank. Using 'globalIdx' as an argument to
set*TracerConcentration() therefore ends up indexing out-of-bounds
for the internal arrays in the tracer model object in parallel
restarted simulation runs.
The problem has been present since the restart support for tracers
was added in commit e9c45f4ca (PR #3708).
This commit switches to using the 'elemIdx' instead, as we already
do when calling the output module's setRestart() member function.
Following this, we are able to restart the standard Norne benchmark
case (NORNE_ATW2013.DATA) in parallel. The numerical results for
the tracer concentrations are, however, a little questionable and
will warrant further investigation. Nevertheless, the tracer values
are now the same in a parallel restarted run as in a sequential
restarted run.