|
Opm::ReservoirCouplingMasterReportStep< Scalar > Class Template Reference Manages master-side reservoir coupling operations for a single report step. More...
Detailed Descriptiontemplate<class Scalar> class Opm::ReservoirCouplingMasterReportStep< Scalar > Manages master-side reservoir coupling operations for a single report step. This class encapsulates the master process's communication and coordination with slave processes during a single report step in reservoir coupling simulations. It handles:
The class serves as a helper to ReservoirCouplingMaster, separating the report-step-specific logic from the overall coupling lifecycle management. This separation improves code organization and makes the coupling logic easier to understand and maintain.
Member Typedef Documentation◆ InjectionGroupTarget
template<class Scalar >
◆ MasterGroupNodePressure
template<class Scalar >
◆ MessageTag
template<class Scalar >
◆ Potentials
template<class Scalar >
◆ ProductionGroupConstraints
template<class Scalar >
◆ SlaveGroupInjectionData
template<class Scalar >
◆ SlaveGroupProductionData
template<class Scalar >
Constructor & Destructor Documentation◆ ReservoirCouplingMasterReportStep()
template<class Scalar >
Construct a report step manager for the master process.
Member Function Documentation◆ collectGroupRatesForSummary()
template<class Scalar >
Collect production/injection rates for all master groups.
◆ comm()
template<class Scalar >
Get the MPI communicator for master-slave communication.
◆ flowChangeLimitingGroup()
template<class Scalar >
Description of the group that sets flowChangeTimeStepLimit()
◆ flowChangeTimeStepLimit()
template<class Scalar >
Upper limit for the next sync step length from GRUPMAST item 4 (in seconds)
◆ getMasterGroupCanonicalIdx()
template<class Scalar >
Get the canonical index for a master group.
◆ getMasterGroupInjectionReservoirRate()
template<class Scalar >
Get the injection reservoir rate for a master group.
◆ getMasterGroupInjectionSurfaceRate()
template<class Scalar >
Get the injection surface rate for a master group.
◆ getMasterGroupNamesForSlave()
template<class Scalar >
Get the names of master groups associated with a specific slave.
◆ getMasterGroupNetworkProductionSurfaceRate()
template<class Scalar >
Get the network production surface rate for a master group. This returns the production rate computed with network=true, meaning efficiency factors are 1.0 for groups/wells where GEFAC/WEFAC item 3 = "NO". This is used for network leaf node rate calculations.
◆ getMasterGroupProductionReservoirRate()
template<class Scalar >
Get the production reservoir rate for a master group. This returns the production rate at reservoir conditions, computed using the slave's PVT properties. This is needed when the master's parent group has RESV control mode, so the conversion uses slave's formation volume factors rather than master's.
◆ getMasterGroupProductionSurfaceRate()
template<class Scalar >
Get the production surface rate for a master group.
◆ getMasterGroupToSlaveNameMap()
template<class Scalar >
Get the mapping from master group names to slave names.
◆ getSlaveComm()
template<class Scalar >
Get the MPI communicator for a specific slave process.
◆ getSlaveGroupNumGroupControlledInjectors()
template<class Scalar >
Get the number of a slave group's injectors under group control for a phase.
◆ getSlaveGroupNumGroupControlledProducers()
template<class Scalar >
Get the number of a slave group's producers under group control.
◆ getSlaveGroupPotentials()
template<class Scalar >
Get the production potentials for a slave group.
◆ isFirstSubstepOfSyncTimestep()
template<class Scalar >
Check if this is the first substep within a "sync" timestep. This flag is used to control reservoir coupling synchronization. Master-slave data exchange should only happen at the start of each "sync" timestep, not on internal substeps or at retries after convergence chops.
◆ logger()
template<class Scalar >
Get the logger for reservoir coupling operations.
◆ needsSlaveDataReceive()
template<class Scalar >
Check if the master needs to receive slave data at the next timeStepSucceeded() call. The slave data is needed for correct summary output. ◆ numSlaveGroups()
template<class Scalar >
Get the number of slave groups for a specific slave process.
◆ numSlaves()
template<class Scalar >
Get the total number of active slave processes.
◆ receiveInjectionDataFromSlaves()
template<class Scalar >
Receive injection data from all active slave processes. This method receives injection rates and related data from each slave process via MPI communication. The data is organized by slave groups and stored in slave_group_injection_data_ for use in group control calculations.
◆ receiveProductionDataFromSlaves()
template<class Scalar >
Receive production data from all active slave processes. This method receives production rates, potentials, and related data from each slave process via MPI communication. The data is organized by slave groups and stored in slave_group_production_data_ for use in group control calculations.
◆ saveGroupFlowsAtStartOfSyncStep()
template<class Scalar >
Remember the flow rates of the master groups as they stand now. Called just before the end-of-sync-step slave data is received. The rates then held are those of the last receive in the sync step: after the slaves' initial well solve and any network iterations. So well changes at the start of the step do not count as flow changes. ◆ schedule()
template<class Scalar >
Get the simulation schedule.
◆ sendCoupledNetworkActiveStatusToSlave()
template<class Scalar >
Send a single boolean to a slave telling it whether the master will iterate the cross-rescoup network exchange this sync timestep. Rank-0-only on the master comm.
◆ sendInjectionTargetsToSlave()
template<class Scalar >
◆ sendMasterGroupNodePressuresToSlave()
template<class Scalar >
Send master-computed network-leaf node pressures to a slave. Only emits entries for master groups that are leaf nodes in the master's extended network. Rank-0-only on the master comm. ◆ sendNumGroupConstraintsToSlave()
template<class Scalar >
◆ sendNumMasterGroupNodePressuresToSlave()
template<class Scalar >
Send the count of master-computed network-leaf node pressures that will follow, plus an
◆ sendProductionConstraintsToSlave()
template<class Scalar >
◆ setFirstSubstepOfSyncTimestep()
template<class Scalar >
Set whether this is the first substep within a "sync" timestep.
◆ setNeedsSlaveDataReceive()
template<class Scalar >
Set/clear the flag for pending slave data receive. ◆ setReportStepIdx()
template<class Scalar >
Set the current report step index.
This updates the internal state to track which report step is currently being processed. ◆ setSlaveGroupInjectionData()
template<class Scalar >
Set the injection data of a slave's groups, as received from the slave. Used by unit tests, which have no slave process to receive the data from.
◆ setSlaveGroupProductionData()
template<class Scalar >
Set the production data of a slave's groups, as received from the slave. Used by unit tests, which have no slave process to receive the data from.
◆ setSyncStepLength()
template<class Scalar >
Set the length of the sync step that is about to be taken. ◆ slaveIsCoupled()
template<class Scalar >
Check if a specific slave process currently takes part in the coupling. True only for a slave that has activated and has not ended. A slave that is not coupled sends no data, and its groups contribute zero rates.
◆ slaveName()
template<class Scalar >
Get the name of a specific slave process.
◆ updateFlowChangeTimeStepLimit()
template<class Scalar >
Update the flow-change time step limit (GRUPMAST item 4, RCMASTS) Compares the master group flow rates received at the end of the sync step with those saved by saveGroupFlowsAtStartOfSyncStep(). For each master group with a limiting fraction, the next sync step is limited to the step length times the limiting fraction divided by the largest fractional change of the group's reservoir production rate and phase injection rates, but never below the RCMASTS minimum, or the TUNING TSMINZ if RCMASTS is not given. The step just taken is not redone. The documentation for this class was generated from the following file: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||