Commit Graph
1985 Commits
Author SHA1 Message Date
Joakim Hove 30a897e89d Merge pull request #2047 from joakim-hove/gconprod-item10
Blank string is default rate in GCONPROD
2020-10-27 19:50:14 +01:00
Joakim Hove a90feb6bb7 Blank string is default rate in GCONPROD 2020-10-27 18:51:36 +01:00
Joakim Hove d301274e89 Improve warning for UDQ missing unit 2020-10-27 18:50:47 +01:00
Joakim Hove 2a41058eda Merge pull request #2039 from joakim-hove/rst-tstep
Allow restart date to be at a TSTEP
2020-10-27 18:24:08 +01:00
Joakim Hove e9dadcf93e Extract leading sign when extract UDQ factor 2020-10-27 14:17:12 +01:00
Joakim Hove 70353f496d Allow restart date to be at a TSTEP 2020-10-26 15:10:10 +01:00
Joakim Hove 508b4e6f96 Scan UDQ expressions to extract required summary keywords 2020-10-24 10:15:58 +02:00
Joakim Hove 5c1604c5f2 Merge pull request #2045 from joakim-hove/include-udq-summary-commits
Include udq summary commits
2020-10-24 10:15:30 +02:00
Bård Skaflestad 9fc6948e05 Merge pull request #2042 from joakim-hove/well-reperf
Changes to well reference depth
2020-10-23 16:49:08 +02:00
Joakim Hove b53acbc6a7 Add functionality to extract required summary keys from UDQConfig 2020-10-23 16:05:55 +02:00
Joakim Hove b4388ba203 Merge pull request #2040 from joakim-hove/udq-left-assoc
Ensure that division is left assosiative in UDQ parser
2020-10-23 16:04:45 +02:00
Joakim Hove b9bd1598d7 Changes to well reference depth
1. The well reference depth should *not* be updated when new connections are
   added with COMPDAT.

2. The well reference depth should be recalculated when the well is updated with
   the WELSPECS keyword.
2020-10-23 15:25:38 +02:00
Joakim Hove 0a0f30133d Remove not interesting test code 2020-10-22 18:52:05 +02:00
Joakim Hove 80a023794e Ensure that division is left assosiative in UDQ parser 2020-10-22 14:40:32 +02:00
Joakim Hove 4a806533db Merge pull request #1915 from goncalvesmachadoc/addSpyderwebGrid
add Spiderweb grid
2020-10-22 14:08:01 +02:00
Joakim Hove 0894f7e774 Merge pull request #2032 from joakim-hove/MULTIREG
Multireg
2020-10-22 08:06:37 +02:00
Joakim Hove ee7f50a51d Merge pull request #2037 from joakim-hove/udq-define-order
Make sure UDQ define statements are evaluated in definition order
2020-10-21 17:32:55 +02:00
Joakim Hove 413a16157c Make sure UDQ define statements are evaluated in definition order 2020-10-21 13:49:07 +02:00
Joakim Hove ba4082b2b9 Merge pull request #2034 from joakim-hove/udq-assign-define
Udq assign define
2020-10-21 11:45:41 +02:00
Joakim Hove 2289ba165b Update SummaryState in UDQContext 2020-10-20 22:22:21 +02:00
Joakim Hove 5ff65747f3 Rename summary variable in test 2020-10-20 20:02:19 +02:00
Joakim Hove 158c7376d7 Add test for MULTIREG and COPYREG keywords 2020-10-20 08:22:42 +02:00
Bård Skaflestad 91bb168ee5 Fix Shadowing Type Alias
The local 'WellPI' type alias shadowed the name of the test.
2020-10-19 21:16:55 +02:00
Bård Skaflestad 5b4a1c0bad Remove WELL_CONNECTIONS_UPDATED Event
With the introduction of Schedule::applyWellProdIndexScaling(), this
special-purpose event type is no longer needed and only causes
confusion.
2020-10-19 19:16:17 +02:00
Bård Skaflestad 26ef5d01a2 Apply WELPI CTF Scaling at Schedule Level
This commit adds a new member function

  applyWellProdIndexScaling(well_name, report_step, scalingFactor)

which applies WELPI-based CTF scaling (by scalingFactor) for all
pertinent report steps from 'report_step' and until the end of the
simulation run.  We use the 'scalingApplicable' array to communicate
connection eligibility between report steps and only apply the
scaling if the internal connections pointers differ between report
steps.
2020-10-19 19:16:16 +02:00
Bård Skaflestad cfa5dd80cc Enable Applying WELPI CTF Scaling Across Time Direction
This commit adds a new in/out parameter, scalingApplicable, to the
applyWellProdIndexScaling functions.  This parameter carries time
(history) information on whether or not a particular connection is
eligible for WELPI-based CTF scaling.  Entries are marked ineligible
(false) and left untouched on subsequent calls if the corresponding
connection is ineligible at any point--e.g., as a result of new
COMPDAT entries.

This ability enables implementing WELPI CTF scaling at the Schedule
level which is the only level that has sufficient time information
to identify all the unique Well/WellConnections object combinations.
2020-10-19 19:16:15 +02:00
Bård Skaflestad 338a48708a Add Special Predicate to Check if Two Wells Have Same Connections
This commit adds a new special purpose predicate member function

    bool Well::hasSameConnectionsPointers

which checks if the internal WellConnections pointers of two Well
objects (*this and the input argument) point to the same object.
This, in turn, enables identifying when to apply dynamic WELPI CTF
scaling across the time direction the internalized connection
information.
2020-10-19 19:16:15 +02:00
Bård Skaflestad dabf988aa7 Split WELPI Application Into Two Parts
First part, implemented in a new member function

    Well::getWellPIScalingFactor

calculates a CTF scaling factor from stored WELPI information and a
dynamically calculated well-level PI value.  The second part, using
the original name applyWellProdIndexScaling, applies an externally
calculate CTF scaling factor to all eligble connections.

This is needed to enable applying multiple scalings across the time
direction.  Update unit tests accordingly.
2020-10-19 19:16:12 +02:00
Bård Skaflestad 3eef45e87d Capture Preferred Phase When Processing WELPI Keyword
This is to handle the case of an injector changing its injected (and
therefore preferred) phase (e.g., in WCONINJE or WCONINJH) at the
same report step as a WELPI CTF rescaling, but logically after the
WELPI action is applied.

For instance, this happens in the following setup:

    WCONINJH
       INJ2   WATER   OPEN  5500 /
    /

    DATES
      1 'JAN' 2020 /
    /

    WELPI
      'INJ2' 0.1E5 /
    /

    WCONINJH
       INJ2   GAS   OPEN   701627 /
    /

    DATES
      1 'FEB' 2020 /
    /

In this case, the WELPI for 'INJ2' is supposed to be interpreted as
the water-phase PI (preferred phase is 'WATER' when we read WELPI),
but since the injecting phase is reset to 'GAS' at the same report
step we risk misinterpreting the PI as pertaining to the 'GAS' phase
when calculating the well's effective/dynamic PI in the simulator if
we just use Well::getPreferredPhase().

Switch the the well's input PI from an optional<double> to an
optional<struct> that captures both the input PI value (SI units)
and the preferred phase when processing the WELPI data.  Provide a
way to query that information from the simulator and update unit
tests accordingly.
2020-10-19 11:09:00 +02:00
Bård Skaflestad f84858279f WELPI: Don't Inadvertently Overwrite Scaling Eligiblity
Since the Well stores a pointer to its connections, rather than the
connections themselves, we must take care not change the existing
state of the connections' WELPI eligibility flag.  Do the update
check on a copy of the connections instead of the real connections.

Pointy Hat: [at]bska
2020-10-19 11:08:59 +02:00
Bård Skaflestad f718cc1adc Injectors: Ensure "Preferred" Phase is "Injected" Phase
This needed to correctly interpret WELPI values when wells switch
from injecting Water to injecting Gas or the other way around.
2020-10-19 11:08:59 +02:00
Joakim Hove 134834cefa Pass VFP ALQ type to enable unit conversion for ALQ values 2020-10-16 12:16:33 +02:00
Joakim Hove 2644e3bd78 Add test (safety belt) for VFP dimension conversion 2020-10-16 12:16:33 +02:00
Joakim Hove 451eefbda5 UDQContext - differentiate between missing well and invalid variable 2020-10-16 11:24:21 +02:00
Joakim Hove c11d2eee37 Merge pull request #2024 from joakim-hove/summary-state-has-well-var
Add SummaryState functions has_well_var() and has_group_var()
2020-10-16 11:23:12 +02:00
Joakim Hove 0cdfdca0f7 Add SummaryState functions has_well_var() and has_group_var() 2020-10-15 13:01:52 +02:00
Joakim Hove a2f72f0953 Count of abondoned wells should handle both STOP and SHUT 2020-10-14 16:08:11 +02:00
Joakim Hove 6e82f3cb7a Merge pull request #2021 from joakim-hove/no-wells-message
No wells message
2020-10-14 14:23:24 +02:00
Joakim Hove 7f8578ea96 Merge pull request #2020 from joakim-hove/fmwia
Fmwia
2020-10-14 14:22:38 +02:00
Joakim Hove e3959c5fa1 Implement number of abondoned injectors: FMWIA 2020-10-14 08:43:03 +02:00
Joakim Hove 2d036144cc Raise OpmInputError for unbalanced quotes 2020-10-14 08:40:10 +02:00
Joakim Hove e1698f7be8 Rename test well RFT -> RFTP 2020-10-14 00:12:50 +02:00
Joakim Hove 53fe0f2d11 Add guide rate delay and damping to rst header class 2020-10-13 13:11:04 +02:00
Bård Skaflestad 6f20858d73 Record Event if WellConnections Change
This is different from COMPLETION_CHANGE which is unconditionally
recorded when processing COMPDAT.  This event is recorded only when
the Well's internal WellConnections structure actually changes and
informs clients that they may need to rerun any dynamic WELPI
scaling.  Such scaling will not be automatically forwarded onto the
new WellConnections structure.

This is arguably a hack.
2020-10-12 15:10:28 +02:00
Bård Skaflestad 810a93ba87 Ensure *HEAD Arrays Have Sufficient Size
The regression test program depends on this.
2020-10-12 13:49:53 +02:00
Bård Skaflestad 6708273616 Merge pull request #2007 from joakim-hove/rst-cmp
Use restart object in regression testing
2020-10-12 11:47:09 +02:00
Joakim Hove 206243c78d Compare string and integere members from well using RestartIO data 2020-10-12 10:11:07 +02:00
Joakim Hove 36e03cf6b9 Use ParserKeyword::prohibits for COORD / GDFILE / ZCORN 2020-10-10 08:30:48 +02:00
Bård Skaflestad fa7d8bc28c Add Support Infrastructure for WELPI Feature
This commit adds logic implementing the static parts of the WELPI
keyword.  We internalize the keyword data, record appropriate events
and provide hooks for dynamically adjusting the per-connection
transmissibility factor (Connection::CF()) when those events occur.
We implement support at three levels

  - WellConnections:
    Add new public member functions prepareWellPIScaling and
    applyWellPIScaling which, respectively, creates bookkeeping
    data to track those connections which are subject to CF scaling
    and actually applies that CF scaling.

  - Well:
    Add new data member 'productivity_index' which holds the 'WELPI'
    data value from the input keyword (converted to SI) and new
    member functions updateWellProductivityIndex and
    applyWellProdIndexScaling.  The first follows the 'update*'
    protocol (return 'true' if state change) and assigns new values
    to 'productivity_index' while the second uses the stored PI
    value and a dynamically calculated effective PI value to rescale
    the pertinent connections' CF value.

  - Schedule:
    Add new member function handleWELPI which internalizes the WELPI
    keyword and its data and records WELPI events for subsequent
    playback in the simulator layer.

Also add a set of unit tests to exercise the new features at all
levels.
2020-10-08 11:19:03 +02:00
Bård Skaflestad de5e3d90cd Miscellaneous Cleanup Changes
In particular, include standard library headers as needed, fix
function declarations (operator<<() for Well::WellProductionProperties),
and make a few helper functions 'static' to avoid warnings of the
form "no previous declaration for".

For the Schedule's keyword handlers, also switch to storing member
function pointers directly instead of std::function objects.  This
saves space and does not incur function pointer conversions.  Use
std::invoke to call those handlers to avoid having to spell out the
'->*' operator.
2020-10-08 11:19:03 +02:00