Fix rescoup master-group guide-rate distribution#7089
Open
hakonhagland wants to merge 1 commit into
Open
Conversation
Contributor
Author
|
Putting this in draft mode until #7067 has been merged. |
Contributor
Author
|
jenkins build this serial please |
A reservoir-coupling master group with its own GCONPROD rate limit that is also available for higher-level group control (item 8 RESPOND_TO_PARENT = YES) was wrongly excluded from its parent's guide-rate distribution. The group-controlled-wells count (GCW) that gates participation was derived from the control mode, but a master group carries an individual (ORAT) control mode purely as a marker for communicating its target to the slave. Each such group was therefore allotted close to the full parent target instead of its guide-rate share; the over-allocation fed back through the FIELD target reduction on the next sync step, producing a substep production/injection oscillation (field oil rate alternating between zero and the well-rate limits every step). Decouple GCW from the control mode with a per-master-group effective GCW stored on ReservoirCouplingMaster and reset each sync step. An eligibility predicate (item 8 = YES) lets a master group be counted in the guide-rate sum, in the GCW aggregation toward its parent, and in the target-reduction decision while it is on the marker control mode. Eligibility is necessary but not sufficient: the effective GCW value then decides whether the group actually contributes (1) or is excluded (0) when capped at its slave's potential or when its slave is inactive. A capped group drops out of the guide-rate sum and has its rate subtracted as a parent target reduction, which redistributes its shortfall to its siblings. The predicate returns false for non-master groups, so the standard (non-coupled) path is unchanged. This removes the oscillation across the bulk of the rc_m1 run (the field then produces steadily near its deliverability) and raises cumulative field oil production, closing roughly half of the gap to the reference solution.
Contributor
Author
|
jenkins build this serial please |
1 similar comment
Contributor
Author
|
jenkins build this serial please |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Builds on #7067.
Fixes a reservoir-coupling bug where a master group was excluded from its parent's guide-rate distribution, causing the slave's production and injection to oscillate between zero and the well-rate limits on every substep.
Problem
GCONPRODrate limit and is available for higher-level group control (GCONPRODitem 8RESPOND_TO_PARENT= YES) was wrongly excluded from its parent's guide-rate distribution.ORAT) control mode purely as a marker for communicating its computed target to the slave, so the control mode does not reflect whether the group should participate.FIELDtarget reduction on the next sync step, producing a substep production/injection oscillation — field oil rate alternating between zero and the well-rate limits every step.Fix
ReservoirCouplingMaster(effectiveGCW/setEffectiveGCW/resetEffectiveGCW), decoupled from the control mode and reset at the start of each sync step.GroupStateHelper::isMasterGroupEligibleForGuideRate(item 8 = YES) and apply it at the three sites that gate participation: the guide-rate sum (FractionCalculator::guideRateSum), the GCW aggregation toward the parent, and the target-reductionindividual_controldecision (updateGroupTargetReductionRecursive_). The GCW aggregation site is what was missing at the intermediate hierarchy levels.GroupStateHelper::updateGroupControlledWellsRecursive_(via the newgetMasterGroupEffectiveGCW_helper) instead of deriving it from the control mode.RescoupConstraintsCalculator: reset each sync step (participating groups default to 1), set 0 for inactive slaves' master groups, and set 0 for groups capped at their slave's reported potential during cap-and-redistribute.Validation
rc_m1run: the field now produces steadily near its deliverability instead of bang-banging between zero and the well limits.FOPTgap improves from about −47% to −24%); the remaining oil and gas gaps are the injection-side reinjection cascade, handled in separate follow-up work.Known follow-up (out of scope)
rc_m1once a slave depletes to zero and its share is redistributed onto an over-asked sibling (the cap-and-redistribute path). It is milder than before and not a regression — the pre-fix run oscillated for the entire run, whereas this fix makes the bulk of the run smooth. It is tracked as a separate follow-up.