Add updateScheduleSatelliteData() to ReservoirCouplingMaster
and ReservoirCouplingMasterReportStep. Called from
EclWriter::evalSummaryState() before summary evaluation.
This populates the Schedule's GSatProd and
GroupSatelliteInjection with slave production/injection rates
received via MPI. The existing satellite_rate machinery in
opm-common's Summary.cpp then automatically computes all
rate-based summary vectors (FOPR, GOPR, FGOR, FWCT, etc.)
correctly for the master model.
Requires the companion opm-common PR that adds
Schedule::updateSatelliteProduction/Injection().
After the master's first substep, block until all slaves have
completed their sync step and sent production/injection data.
This ensures evalSummaryState() and subsequent master substeps
have up-to-date slave rates for correct summary output (FOPR,
GOPR, etc.).
Previously, slave data was only received at beginTimeStep(),
which meant the first sync step had no data and subsequent steps
used stale rates from the previous sync step.
The master sets a needsSlaveDataReceive flag at the start of
each sync step. On the first converged substep, timeStepSucceeded()
blocks on MPI_Recv until the slaves finish. The slave predicts
whether each substep is the last one in the sync step and sends data
accordingly.
Used for the Dune::SeqILU preconditioner.
Using std::reference_wrapper by calling std::cref at the
call site ensures that the matrix is stored with reference
semantics, instead of copying the matrix from the initial call.
cuda 12.0 (default in ubuntu 24.04) cannot build fmt.
furthermore, cuda 12.0 only supports up to g++-12 as host compiler,
meaning there is no std::format either. so workaround where possible
by using stringstreams
the test_primary_variables_gpu pulls in too much generic code
so disable it.
i'm not entirely sure if 12.1 is enough for our code to compile
but at least this fixes build issues on a common configuration
Implement the RSCONST keyword, which models oil/water systems with dead
oil and constant dissolved gas ratio (RS). This assumes RS is uniform
and pressure remains above the bubble point, enabling faster simulation
through simplified equation formulations.
- Add PVT calculations for RSCONST dead oil properties
- Update equilibration state initialization for RSCONST conditions
- Modify well model and state tracking for new phase behavior
- Add unit tests for well state validation
Master groups with GCONPROD cmode NONE and guide rate caused a crash in
getProductionGroupTargetForMode_(), which only handles rate-specific
cmodes (ORAT, WRAT, GRAT, LRAT, RESV).
The crash path: TopToBottomCalculator falls through to
getGroupConstraintNoGuideRate() when the bottom group has zero or
negative production (first time step on RC master with no local wells).
That function passes the group's NONE cmode to
getProductionGroupTargetForMode(), which throws.
Two fixes in GroupConstraintCalculator.cpp:
1. getGroupConstraintNoGuideRate(): return std::nullopt when the
production cmode is FLD or NONE, since these groups have no own
target.
2. TopToBottomCalculator::calculateGroupConstraint() fallback: when
the bottom group has no own constraint (nullopt from fix 1), return
the guide-rate-distributed target from above, capped by any limit
the bottom group defines for the top-level control mode.
- TPSA-Flow coupling done at the nonlinear solver step level:
- -- Lagged coupling -> TPSA lags behind one time step
- -- Fixed-stress -> Iterate until Flow and TPSA converge
- Generic TPSA solver using Newton with associated linearizer.
- Linear elasticity equations implemented
- Specialized version of ISTL linear solver for TPSA
- Output to restart files and VTK
Reject invalid GCONINJE configurations where multiple RESV/VREP
injection phases conflict, either within the same group or along
an ancestor-descendant path in the group hierarchy. Disconnected
branches with different top-up phases remain allowed.
The validation runs once per time step from setCmodeGroup() when
processing the FIELD group, before injection controls and guide
rates are propagated.
Also add a defensive NETV guide rate check in GuideRateHandler
that rejects NETV usage when the group's top-up phase does not
match the guide rate phase.
Companion PR: opm-common change to exclude REIN from
Group::topup_phase(), so it only reflects RESV and VREP modes.