Commit Graph

480 Commits

Author SHA1 Message Date
Joakim Hove
e1d117c59f Extract group state and create WGState to manage well & group state 2021-04-27 10:55:38 +02:00
Joakim Hove
a68589eb9a WellState will internalize PhaseUsage member 2021-04-27 00:11:04 +02:00
Joakim Hove
43f42ab7d7 Merge pull request #3162 from totto82/addSwitchEvent
Use the event for swithing between producer and injector
2021-04-23 08:17:47 +02:00
Joakim Hove
c8db0d1090 Assign number of phases in WellState constructor 2021-04-21 13:07:57 +02:00
Tor Harald Sandve
352e40d109 honour group available for higher controll 2021-04-19 14:34:38 +02:00
Tor Harald Sandve
090b75425f Use switch event 2021-04-16 13:38:56 +02:00
Joakim Hove
289e0ea938 Handle closed connections when loading connection data from restart 2021-04-14 07:59:55 +02:00
Joakim Hove
7d825ba9d0 Rename function wellToState -> loadRestartData 2021-04-13 21:02:36 +02:00
Håkon Hægland
24c419913a Update to use new API for accessing well state.
Use access function to get a handle to the well state object according
to PR #3140.
2021-03-30 17:10:09 +02:00
Håkon Hægland
231f5374d7 Fixed some typos introduced in previous commit.
Some conflicts in the previous rebase was unfortunately not resolved
correctly. This commit corrects those errors.
2021-03-30 15:42:33 +02:00
Håkon Hægland
434640fdf5 Implements gas lift optimization for groups.
Extends PR #2824 to include support for GLIFTOPT (item 2, maximum lift
gas supply for a group) and group production constraints.

The optimization is split into two phases. First the wells are optimized
separately (as in PR #2824). In this phase LIFTOPT and WLIFTOPT constraints
(e.g. maxmimum lift gas injection for a well, minimum economic gradient) are
considered together with well production constraints.

Then, in the next phase the wells are optimized in groups. Here, the ALQ
distribution from the first phase is used as a starting point. If a group
has any production rate constraints, and/or a limit on its total rate of
lift gas supply, lift gas is redistributed to the wells that gain the most
benefit from it by considering which wells that currently has the largest
weighted incremental gradient (i.e. increase in oil rate compared to
increase in ALQ).
2021-03-30 15:41:46 +02:00
Joakim Hove
98f6a9a7ac Update collection of wells after ACTIONX 2021-03-29 16:20:10 +02:00
Joakim Hove
5fe43c09cb Implement updateEclWell() as an internal function in wellPI code 2021-03-29 16:20:10 +02:00
Joakim Hove
405b9d2244 Add accessor functions to maintain WellState objects in well model 2021-03-29 15:30:32 +02:00
Tor Harald Sandve
8283b53f3b only compute Bavg once pr timestep and use the stored variable instead of passing it around 2021-03-23 15:30:36 +01:00
Tor Harald Sandve
8882b8027a Merge pull request #3115 from totto82/onlyComputeGuideRateOnce
only compute guiderates at the beginning of a timestep
2021-03-23 08:43:47 +01:00
Joakim Hove
e2d75b608b Rename well filter -> not_on_process_() 2021-03-20 20:33:28 +01:00
Joakim Hove
634f0d61d8 Deferred logger will throw "correct" exception 2021-03-19 14:05:55 +01:00
Tor Harald Sandve
78d351676f only update guide rates at the beginning of a timestep 2021-03-19 11:09:14 +01:00
Bård Skaflestad
b982ad0fd2 Record Dynamic Well Status in 'wellData()' Output
This commit sets the 'data::Well::dynamicStatus' based on the
dynamically updated 'Schedule' object (i.e., from ACTIONX and
similar) and the results of well/operability testing (WECON and/or
WTEST).  If a well is closed due to economic limits (WECON) we still
provide summary-style data at the timestep that closed the well, but
omit this data at later steps until the well reopens.

We add a new parameter to WellState::report() to distinguish these
situations.

This is in preparation of making the 'BlackoilWellModel' manage both
open and shut wells alike.
2021-03-18 17:28:28 +01:00
Bård Skaflestad
65edfb702c Preparations for Recording Dynamic Well State
Coalesce blocks with same conditions, split long lines, and apply
'const' where appropriate.  While here, also tighten the "rate = 0"
criterion to include denormalised numbers.
2021-03-18 17:28:28 +01:00
Joakim Hove
cd7c4d9927 Merge pull request #3112 from totto82/refact_ginj
Add support for explicit guiderate for injection groups
2021-03-18 17:03:53 +01:00
Tor Harald Sandve
61de5689bd cleanup: add and remove comments 2021-03-18 14:56:45 +01:00
Tor Harald Sandve
58fa3eaf31 replace asserts with OPM_DEFLOG_THROW 2021-03-18 11:58:05 +01:00
Tor Harald Sandve
6bac5da27c adapt to changes in the guiderate interface 2021-03-16 15:56:31 +01:00
Tor Harald Sandve
f4ac7f555b Add support for explicit guiderate for injection groups
With this commit the guiderate logic used for the production groups is also used for injectors
This allows for setting guiderates explicit at different group levels
Only RATE, NETV and VOID guiderate type is suppored.
2021-03-16 15:56:31 +01:00
Tor Harald Sandve
c29b61ff99 Merge pull request #3074 from plgbrts/thermaloutput
Temperature output for producers
2021-03-15 13:54:18 +01:00
Joakim Hove
8adea8c68a Merge pull request #3102 from totto82/validControls2
make sure wells has valid controls
2021-03-15 09:43:22 +01:00
Tor Harald Sandve
858856adec update solution for WAG injectors 2021-03-09 13:37:03 +01:00
Paul Egberts
646dafe78f introduced computeWellTemperature() to be called at each timestep 2021-03-08 15:11:50 +01:00
Tor Harald Sandve
f861188d60 make sure wells has valid controls 2021-03-08 08:44:55 +01:00
Joakim Hove
9ad5d69744 Utilize private restartconfig 2021-03-07 09:31:10 +01:00
Bård Skaflestad
d78f5dc259 Merge pull request #3083 from totto82/fixMPIThrow
Fix MPI issues in the well model
2021-03-02 12:04:39 +01:00
Tor Harald Sandve
09ff71ae31 only log changes of group controls on rank 0 2021-02-26 14:16:38 +01:00
Tor Harald Sandve
1627e421d7 communicate group data before well testing 2021-02-25 11:08:55 +01:00
Paul Egberts
3ff3d549ed temperature output as weighted sum of well block temperatures based on specific heat capacity of the phases 2021-02-22 18:41:25 +01:00
Joakim Hove
ff51c2d7ee Handle WELLPI keyword in ACTIONX
When an ACTIONX has evaluated to True we inspect the keyword payload and if it
contains WELPI we query the well model for current wellpi values and pass that
along as context to the Schedule::applyAction()
2021-02-18 16:53:50 +01:00
Joakim Hove
99a61e120b Implement BlackoilWellModel::hasWell() method 2021-02-13 10:37:45 +01:00
Joakim Hove
0299af26ed Extract method wellPI() from existing lambda implementation 2021-02-12 11:49:04 +01:00
Joakim Hove
89eb6e5659 Extract functionality to update ecl wells to separate function 2021-02-10 15:17:36 +01:00
Joakim Hove
d9f29945aa Pass unscaled newWellPI to Schedule::applyWellProdIndexScaling() 2021-02-05 12:53:00 +01:00
Arne Morten Kvarving
9b74b5dfac changed: this is known on compile time
use info to disable code
2021-01-28 14:33:56 +01:00
Arne Morten Kvarving
77692c1f99 quell unused parameter warning 2021-01-28 12:52:19 +01:00
Kai Bao
d8f8b9f0cc Merge pull request #3028 from totto82/quarryPerfLengthAndRadius
get connection length and radius from the connection object
2021-01-28 11:21:21 +01:00
Tor Harald Sandve
9277b2edee get connection length and radius from the connection object 2021-01-25 14:08:59 +01:00
Tor Harald Sandve
36ba423d42 Add guard around solve well equation. 2021-01-20 08:46:58 +01:00
Tor Harald Sandve
62e485cbea adapt to changes in the schedule class 2021-01-18 15:12:17 +01:00
Tor Harald Sandve
b6fe8cbd77 only update individual wells after solve eq 2021-01-18 15:12:17 +01:00
Tor Harald Sandve
27bea2fa4f Solve well equation for the first iteration 2021-01-18 15:12:17 +01:00
Tor Harald Sandve
fbcd230eb2 substitute solveWellEq with one inner solve for newly opened wells 2021-01-18 15:12:17 +01:00