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.
This commit switches to using the 'welpi_wells' information from the
SimulatorUpdate structure as a basis to decide the wells for which
it is safe/sufficient to update only the CTFs in response to an
ACTIONX block running WELPI. To this end, we split the actions of
the existing member function updateEclWells() into two parts,
1. updateEclWellsConstraints()
2. updateEclWellsCTFFromAction()
in which the first handles well status and well control updates
while the second deals with CTF updates in response to WELPI. We do
not run the second part if the well structure has changed--e.g., due
to COMPDAT or WELOPEN--since the update loop depends on a static
connection topology.
We add a new member function wellUpdateLoop() which will traverse a
sequence of well names and invoke a loop body on those wells which
exist in wells_ecl_. This collects common operations needed for
both the constraints and the CTF updates.