This commit splits updateFluidInPlace_() into several smaller helper
functions, each with a narrow purpose. They're all just called from
the original call site--the body of updateFluidInPlace_()--but this
new version is, in my opinion, easier to reason about and there is
less shared state.
In anticipation of adding support for summary vectors FHPV and RHPV
(field and region levels of hydrocarbon pore-volumes), we also split
the pore-volume updates out to a branch separate from that needed
for average pressure calculations.
Step one for moving Damaris calls out of EclWriter class and into its own DamarisWriter class;
EclProblem now calls both writeOutput methods and passes in the data::Solution object;
Add fix for first writeOutput() call not having PRESSURE data available;
data::Solution is now passed by rvalue ref into eclWriter::writeOutput();
guard added to prevent inclusion of damariswriter.hh
This commit adds a new member function,
EclTransmissibility<>::applyNncMultreg_()
which applies regional transmissibility multipliers such as those
entered in the MULTREGT keyword to the explicit input NNCs. We make
the application conditional on a new parameter, default value
'false', and pass 'true' as the argument from 'finishInit()'.
Along with TransMult::getRegionMultiplierNNC(), this implements all
known connection behaviours for inter-region connections.
Multipliers internal to a region in MULTREGT are not yet supported.
it was introduced back then for some purpose. The purpose might not
apply anymore due to other development. And also, some issues were
reported for some situtation with the approach.
Connections between reservoir cells and numerical aquifer cells, or
between numerical aquifer cells when multiple such cells define a
single numerical aquifer, should always be treated as NNCs for
output purposes and end up in the (NNC1,NNC2,TRANNNC) output arrays.
To this end, make a special purpose predicate to identify numerical
aquifer connections when forming the output NNC and transmissibility
arrays and act accordingly in member functions 'computeTrans_()' and
'exportNncStructure_()'.
While here, also pick up the NNC transmissibility value from
'globalTrans()' since multiplier operations like MULTREGT might have
affected the explicit values entered in the NNC, EDITNNC, and
EDITNNCR keywords. This is in preparation of properly incorporating
such multipliers in follow-up work. Finally, fix a subtle problem
caused by using 'std::abs()' to check for non-zero connections.
When accounting for explicit NNCs, it might happen that the final
transmissibility would become negative with a sufficiently large
absolute value that 'abs(t) > threshold' would be true. This would
result in outputting a negative transmissibility value to the NNC
arrays which would confuse result processors.