Commit Graph

7892 Commits

Author SHA1 Message Date
Joakim Hove
a8be103173
Merge pull request #3005 from joakim-hove/sched-tuning
Access tuning class from ScheduleState
2021-01-07 07:49:29 +01:00
Joakim Hove
ad9d6079b3
Merge pull request #3001 from joakim-hove/improve-error-message
Output typeid(T).name() for types without packing support
2021-01-06 19:12:25 +01:00
Joakim Hove
fe788cdb05 Access tuning class from ScheduleState 2021-01-06 16:26:13 +01:00
Joakim Hove
c1e10d81ba Use ScheduleState to access nupcol 2021-01-06 15:10:05 +01:00
Tor Harald Sandve
5ee75c45e3 move well operability check for STW 2021-01-05 15:10:40 +01:00
Joakim Hove
f5653af392 Output typeid(T).name() for types without packing support 2021-01-05 12:00:46 +01:00
Bård Skaflestad
cc6d0e35a3 Relperm Diagnostics: Chase EPS API Update
The API for extracting unscaled (raw) saturation end-points has
changed in opm-material.  Follow that change here.
2021-01-05 09:59:07 +01:00
Joakim Hove
fff19a2cf3 Serialize std::chrono::system_clock::time_point through std::time_t 2021-01-03 10:30:51 +01:00
Markus Blatt
c037bd762d
Merge pull request #2990 from atgeirr/testing-precfactory-operators
Only add AMG preconditioners to factory if sensible.
2020-12-22 09:52:53 +01:00
Tor Harald Sandve
967f99500c dont copy the well model in computeWellPotentials 2020-12-22 09:25:56 +01:00
Atgeirr Flø Rasmussen
02f93984f3
Merge pull request #2995 from totto82/stopfix
don't shut stopped wells
2020-12-21 15:51:36 +01:00
Bård Skaflestad
a657f2371a
Merge pull request #2996 from totto82/outputStoppedWells
output stopped wells
2020-12-21 15:22:25 +01:00
Tor Harald Sandve
33e3102983 output stopped wells 2020-12-21 13:51:21 +01:00
Arne Morten Kvarving
b812088519 further avoidance of overlap cells 2020-12-21 12:54:34 +01:00
Arne Morten Kvarving
faa04b5c4d changed: put initializeConnections in base aquifer class 2020-12-21 12:54:34 +01:00
Arne Morten Kvarving
4cdb3e85c0 make initializeConnection similar in aquifer classes 2020-12-21 12:54:34 +01:00
Arne Morten Kvarving
5f844bc3a4 fixed: no reason to calculate this inside the loop 2020-12-21 12:54:34 +01:00
Arne Morten Kvarving
86d7666e5c enable aquifers in parallel 2020-12-21 12:54:34 +01:00
Arne Morten Kvarving
fa90bc0709 add some parallel reductions in aquifer code 2020-12-21 12:54:34 +01:00
Arne Morten Kvarving
91336f30e7 fixed: do not process aquifers attached to overlap cells 2020-12-21 12:02:54 +01:00
Tor Harald Sandve
bcdf6c8d02 don't shut stopped wells 2020-12-21 09:25:57 +01:00
Bård Skaflestad
eb4aabc71a
Merge pull request #2986 from totto82/scalePot
Initial well rates with the well potentials and scale the segment rates
2020-12-18 23:03:37 +01:00
Markus Blatt
ef6c953e0f [bugfix] Fix partial sum
the total number of entries gathered was computed wrong, and we wrote
out ouf memory.
2020-12-18 14:48:19 +01:00
Markus Blatt
5b943761d7 Fixes StandardWell::computeConnectionDensities.
This computation is serial and needs a complete representation
of data attached to all preforations (even those stored on
another process). This commit uses the newly created factory to
correctly compute the connection densities for distributed wells.
2020-12-18 14:48:19 +01:00
Markus Blatt
69fd6495c0 Added factory to construct the global representation of perf data.
Some of our computations are heavily serial and need a complete
representation of the data attached to all perforation no matter
whether a perforation lives on the local partition or not. This commit
adds a factory that allows to easily create such a representaion and
helps writing data back to the local representation.
2020-12-18 14:48:19 +01:00
Markus Blatt
53b51eeba7 Use int as global index type in IndexSet
That is what seems to be used by ECL schedule, too.
2020-12-18 14:48:19 +01:00
Markus Blatt
4dff6fb168 Fixes StandardWell::updateProductivityIndex for distributed wells. 2020-12-18 14:48:19 +01:00
Markus Blatt
12f5a6aaff Fixes StandardWell::allDrawDownWrongDirection for distributed wells. 2020-12-18 14:48:19 +01:00
Markus Blatt
ba1feadb63 Added missing parallel reduction to computeCurrentWellRates.
This is supposed to be summation over values at all perforations.
Hence, it needs a parallel sum.
2020-12-18 14:48:19 +01:00
Markus Blatt
fc4a7fa3c1 Fixes StandardWell::updateIPR for distributed wells.
Of course the summation needs to be over all perforations of the
wells, no matter where they reside. Hence we need communication.
2020-12-18 14:48:19 +01:00
Markus Blatt
c09797355d Sum well rates in computeWellRatesWithBhp for distributed wells.
This needs summation over all procs that share the well as it needs
information from all perforations. Some of them might reside on other
processes.
2020-12-18 14:48:19 +01:00
Alf Birger Rustad
673328a4e1 Remove WSEGAICD from missing features 2020-12-18 11:23:26 +01:00
Atgeirr Flø Rasmussen
d910d42f6e Only add AMG preconditioners to factory if sensible.
Also add test using a new operator class, that would not compile
without the change.
2020-12-17 14:54:59 +01:00
Tor Harald Sandve
273538e1f4 some cleanup 2020-12-16 12:58:17 +01:00
Tor Harald Sandve
30ce605713 use the old initSegmentRates when opening up wells 2020-12-15 15:15:59 +01:00
Atgeirr Flø Rasmussen
81419aa001
Merge pull request #2975 from totto82/dunify_aquifers
Dunify aquifers
2020-12-15 09:46:21 +01:00
Tor Harald Sandve
d027205c34 Initial well rates with the well potentials and scale the segment rates
Initialize the well rates with well potentials when computing rates from bhp or bhp(thp)
The bhp was already initialized.

Scale the segment rates and pressure to adapt to changes in well rate and bhp

Improves convergence of the well potential calculations
2020-12-15 08:39:22 +01:00
Joakim Hove
ab143d15c7 Make sure well is open before copying MSW well state from previous 2020-12-14 09:01:42 +01:00
Joakim Hove
aa345a36f1 Fetch connpos and number of perforations from WellInfo for MSW wells 2020-12-14 09:01:37 +01:00
Markus Blatt
065e2f34f1 Do not include config.h in header (not even in *_impl.hpp)
I was getting warnings about redefined definitions (e.g. HAVE_PARMETIS).
2020-12-11 17:53:24 +01:00
Markus Blatt
924bf5ed19 Use old style traits class approach to check for face tag support.
Old version failed due to a gcc compiler
bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77446 with error:
"non-constant condition for static assertion"
2020-12-11 17:39:55 +01:00
Joakim Hove
cd19e987cf
Merge pull request #2981 from joakim-hove/skip-prev-closed-well
Skip previously shut wells in WellState init
2020-12-11 17:01:46 +01:00
Markus Blatt
9097907857
Merge pull request #2983 from blattms/stdwell-comm-works-on-spe9-2
use random access to simplify code at second occasion
2020-12-11 17:00:07 +01:00
Tor Harald Sandve
7a42a82c55 add check for gridType 2020-12-11 15:33:25 +01:00
Markus Blatt
fa83ed2fdc use random access to simplify code at second occasion 2020-12-11 14:25:56 +01:00
Markus Blatt
354ae1f319
Merge pull request #2976 from blattms/stdwell-comm-works-on-spe9
Make distributed standard well work on SPE9.
2020-12-11 13:43:03 +01:00
Tor Harald Sandve
e09eff6063
Merge pull request #2979 from totto82/prepostreport
Add report for pre/post time
2020-12-11 13:38:58 +01:00
Tor Harald Sandve
6cf91e7f19 Get compressed to cartesian mapping and depths from the vanguard 2020-12-11 12:48:01 +01:00
Tor Harald Sandve
8a0fde9104 dunify the aquifer models 2020-12-11 12:48:01 +01:00
Markus Blatt
b4ed86313e use random access to simplify code during partial_sum of dist wells 2020-12-11 11:24:51 +01:00
Markus Blatt
02bab0957d
Merge pull request #2982 from totto82/fixPot
move the try-catch inside the compute potential loop
2020-12-11 11:24:21 +01:00
Tor Harald Sandve
2deee380f9 move the try-catch inside the compute potential loop 2020-12-11 08:26:52 +01:00
Joakim Hove
8c17172f08 Skip previously shut wells in WellState init 2020-12-10 16:41:10 +01:00
Tor Harald Sandve
6b7c0e630a report pre/post time 2020-12-10 13:40:41 +01:00
Atgeirr Flø Rasmussen
2673af7db5
Merge pull request #2978 from joakim-hove/use-well-status
Use enum Well::Status for well status in WellState
2020-12-10 12:43:40 +01:00
Markus Blatt
c0c1897ea9 Fix computeConnectionPressureDelta for distributed wells.
As this is as sequential (ordering matters!) as it can get we need to
communicate all perforations, do the partial sum with them and save
result back to the local perforations.
2020-12-10 11:32:52 +01:00
Markus Blatt
35218bf042 Added possibility to communicate values from perforations below. 2020-12-10 11:06:28 +01:00
Markus Blatt
3c66b729e1 Fixes perf rate initialization for distributed wells. 2020-12-10 11:06:28 +01:00
Joakim Hove
f5f3d8a98e Introduce WellState::stopWell() 2020-12-10 09:54:37 +01:00
Atgeirr Flø Rasmussen
6e87ec6266
Merge pull request #2955 from blattms/stdwell-comm-rebase-split-pwell-info
Last part of current distributed standard wells.
2020-12-10 08:56:00 +01:00
Joakim Hove
bd3fa0af88 Use enum Well::Status for well status in WellState 2020-12-10 08:11:19 +01:00
Bård Skaflestad
a9e739d0a2
Merge pull request #2977 from joakim-hove/connpos
Change access to connpos to use WellMap instead of index counting
2020-12-09 20:50:03 +01:00
Joakim Hove
e4303c6784 Change access to connpos to use WellMap instead of index counting 2020-12-09 16:49:10 +01:00
Bård Skaflestad
b83f8f0397
Merge pull request #2949 from totto82/msw_operability2
Check operability for MSW
2020-12-09 15:06:21 +01:00
Markus Blatt
1d9d04161d Use std::partial_sum to calculate displacements. 2020-12-09 12:30:48 +01:00
Markus Blatt
b97385c963 Fix and move changes to commented code to code to WellGroupHlper.hpp 2020-12-09 12:29:56 +01:00
Tor Harald Sandve
73439070f7
Merge pull request #2963 from totto82/extbo_conv
add convergence check for extended blackoil model
2020-12-09 08:51:11 +01:00
Atgeirr Flø Rasmussen
f6353535c9
Merge pull request #2973 from blattms/include-config.h
[bugfix] Include config.h in WellGroupHelpers.cpp
2020-12-09 07:36:33 +01:00
Markus Blatt
4f93b2b7c6 Include config.h in WellGroupHelpers.cpp
as should be done in all cpp files.
2020-12-08 21:21:02 +01:00
Atgeirr Flø Rasmussen
6a376b3212
Merge pull request #2922 from atgeirr/make-new-well-rate-init-default
Make --alternative-well-rate-init=true the default.
2020-12-08 16:25:12 +01:00
Tor Harald Sandve
21fd76ccf6 add convergence check for extended blackoil model 2020-12-08 13:09:58 +01:00
Tor Harald Sandve
ba8d2068ea pass trivial B_avg to init method in wellPI calculation 2020-12-08 12:51:25 +01:00
Tor Harald Sandve
5fb73c9714 Only check well operability for wells under THP and BHP limits 2020-12-08 12:38:25 +01:00
Tor Harald Sandve
8ca9cc241a remove unused warnings 2020-12-08 12:38:25 +01:00
Tor Harald Sandve
bc04fb68ef check the sum not individual phases for operability 2020-12-08 12:38:25 +01:00
Tor Harald Sandve
90050372ae keep msw wells open even if bhp from thp fails 2020-12-08 12:38:25 +01:00
Tor Harald Sandve
a7664f9ea6 Add check for operability of MSW 2020-12-08 12:38:25 +01:00
Atgeirr Flø Rasmussen
dbb1d0e731 Silence warnings. 2020-12-08 09:33:07 +01:00
Markus Blatt
44bd18ea78 Used remove_reference_t 2020-12-07 20:41:15 +01:00
Markus Blatt
b6c1a1533c Use vector::empty() instead of size() to test for entries. 2020-12-07 20:41:15 +01:00
Markus Blatt
07e676371e Get global index from Well connection instead of computing it. 2020-12-07 20:22:54 +01:00
Markus Blatt
f7ed1b21fa Determine pressure and depth above for distributed wells. 2020-12-07 16:32:33 +01:00
Markus Blatt
6f4fa114c1 barrier before and after MPI_Broadcast in non-production runs.
This helps with debugging as for some OpenMPI versions communication
might interfere with other communications if there are bugs.
2020-12-07 16:32:33 +01:00
Markus Blatt
901327ac54 Cater for empty parts of distributed wells for pvt region index. 2020-12-07 16:32:33 +01:00
Markus Blatt
a9df5065ae Use global number of perforations when initializing well.
The local number of perforations is not correct anymore
for distributed wells.
2020-12-07 16:32:33 +01:00
Markus Blatt
0d6c39be2f Fix distributed WellInterface::checkMaxRatioLimitCompletions
Not all connections are local, hence we need a sum across all processes
computing for this well.
2020-12-07 16:32:33 +01:00
Markus Blatt
6eb835c98e Only use connections in the interior for distributed wells. 2020-12-07 16:32:33 +01:00
Markus Blatt
91e951420f [bugfix] Pass references to gatherVectorOnRoot 2020-12-07 15:40:51 +01:00
Markus Blatt
fd4db9b933 Only sum rates for owned wells in WellGroupHelpers.
Well rates of distributed wells might be stored on multiple processes
but should be summed only once. Hence only the owner does the
summation with this commit.
2020-12-07 15:40:51 +01:00
Markus Blatt
c2f59b0629 Skip temp. reporting of some rates if distributed non-owned wells.
In the end of the report each the report from these wells will
come from another process, anyway.
2020-12-07 15:40:51 +01:00
Markus Blatt
472623d4a3 Output report for distributed wells only on owner.
For this we need to gather the connection data from
both WellState and WellStateFullyImplicitBlackoil.
2020-12-07 15:40:51 +01:00
Markus Blatt
580ef249b3 Skip wells not owned when communicating goup rates. 2020-12-07 15:40:50 +01:00
Markus Blatt
4edca71a1b Correct pressure and pvt region index for distributed wells.
To get this we need to determine which process has the
very first open well connection and use that to broadcast
pressure and pvt region index.
2020-12-07 15:40:50 +01:00
Markus Blatt
a9a733ebc1 Make check whether a connection exists work for distributed wells. 2020-12-07 15:20:42 +01:00
Arne Morten Kvarving
7d19091cb3 changed: make member variables constexpr
may as well use the compile time information to eliminate
unnecessary code
2020-12-07 12:16:04 +01:00
Arne Morten Kvarving
bbf0f7d6af remove unused members 2020-12-07 12:09:33 +01:00
Markus Blatt
932e3c8fb9 Use a custom handle for copying doubles for above.
The one previously used is unfortunately protected upstream (not noticed with gcc <=8).
2020-12-07 11:47:09 +01:00
Atgeirr Flø Rasmussen
d20641d97b Only modify initial rates for producers. 2020-12-07 10:05:46 +01:00
Atgeirr Flø Rasmussen
a07ee07c66 Add missing template qualification. 2020-12-07 08:31:10 +01:00
Kai Bao
7ecb2e4813
Merge pull request #2866 from bska/activate-welpi-scaling
Initial Implementation of WELPI Feature
2020-12-04 20:44:42 +01:00
Atgeirr Flø Rasmussen
83a6c2abae
Merge pull request #2947 from blattms/fix-parallel-well-red
Prepares for apply distributed standard wells.
2020-12-04 20:32:30 +01:00
Bård Skaflestad
d06b7f9ec2 Record Basic Support for WELPI
Remove 'WELPI' keyword from MissingFeatures.
2020-12-04 15:16:25 +01:00
Bård Skaflestad
319c240336 Run WELPI Scaling At Beginning of Report Step
This commit implements the WELPI feature.  We calculate new PI/II
values for all wells in the event of a WELPI request and use those
values for well-specific WELPI request, to calculate CTF scaling
factors.  We then apply those factors to all subsequent editions of
the well provided the connection factors are eligible for
WELPI-based rescaling.

If we trigger a rescaling event we also reset the WellState's
internal copies of the CTFs and reinitialize the Well PI calculators
to ensure the rescaling takes effect immediately.  Since we rely on
PI values being available at the end of each time step we must also
take care to forward those values from the WellState of one report
step to the WellState of the next report step.

Finally, take care not to redo a WELPI scaling if we've already
performed the scaling operation and restart a report step.  This,
in turn, happens if WELPI is requested on the first report step.
2020-12-04 15:16:25 +01:00
Bård Skaflestad
f6130861df Well Data: Report CTFs for Shut Connections
Needed to ensure that the CTFs reported to the summary files will be
correct in the presence of WELPI even for shut connections.
2020-12-04 15:16:25 +01:00
Bård Skaflestad
e780d107ab Split Well Stat Initialization Out to Helper Function
Mostly to reduce the complexity of the implementation of
beginReportStep() and to enable easier reordering of the stages.
2020-12-04 15:16:25 +01:00
Bård Skaflestad
4e9e60a71b Refactor Well Guide Rate Summary Assignment
In anticipation of adding more steps later.
2020-12-04 15:16:24 +01:00
Bård Skaflestad
c800c5376d Add Special-Purpose Operation to Reset WellState CTFs
This commit adds a new member function

    WellState::resetConnectionTransFactors

which overwrites the transmissibility factor of 'well_perf_data_'
pertaining to a particular well.  This is to keep the values in
sync following a rescaling operation such as WELPI.
2020-12-04 15:16:24 +01:00
Bård Skaflestad
aaca907f77 Productivity Index Calculator: Add Reinitialization operation
This commit adds a new member function

    WellProdIndexCalculator::reInit(const Well& well)

which reinitializes the internal arrays in the same way as the
constructor.  This is needed to ensure that the PI calculation
device is synchronised in the case of CTF rescaling-e.g., as a
result of WELPI.
2020-12-04 15:16:24 +01:00
Bård Skaflestad
3ac2f02f4f
Merge pull request #2839 from akva2/remove_liftopt_missing
remove LIFTOPT and WLIFTOPT from missing features
2020-12-04 13:52:09 +01:00
Markus Blatt
10fd57f37f BlackoilWellModel: Skip capturing this and simulator in lambda
Instead create local variables and capture them.
2020-12-04 13:43:45 +01:00
Markus Blatt
2e5b1c8d54 Use reference for WellInterface::parallel_well_info_ 2020-12-04 13:24:31 +01:00
Markus Blatt
eb03712027 Factored out creation of parallel well infos from getLocalNonshutWells. 2020-12-04 13:02:01 +01:00
Markus Blatt
9c17628995 Renamed pinfo to parallel_well_info 2020-12-03 15:34:48 +01:00
Markus Blatt
9cada4a5a5 Fix indentation 2020-12-03 15:29:12 +01:00
Markus Blatt
575120d4f0 Improce documentation a bit. 2020-12-03 15:24:05 +01:00
Kai Bao
61bebb2ec5 addressing reviewing comments for OPM/opm-simulators#2951 2020-12-03 15:23:14 +01:00
Kai Bao
6e8394eba6 supporting WSEGAICD 2020-12-03 15:23:14 +01:00
Markus Blatt
c5dd4f4533 Make CommunicateAbove constructor explicit. 2020-12-03 15:12:35 +01:00
Markus Blatt
0126243f02 Utility to communicate above value of a perf of distributed well
This adds an utility that creates a vector of all above values for
the local perforations. For distributed wells this is needed as the
perforation above might live on another processor. We use the parallel
index sets together with the global index of the cells that are
perforated.
2020-12-03 11:10:36 +01:00
Markus Blatt
73919d6136 Support broadcasting value of first perforation for distributed well
This needed to e.g. determine bottom hole pressure, pvt region, etc.
2020-12-03 11:10:36 +01:00
Markus Blatt
317e29d15a Utility for checking connections of distributed well. 2020-12-03 11:10:36 +01:00
Markus Blatt
3d92e41cad Recover prev. iteration count and curves for undistributed wells
Rounding errors for `B.mmv(x,y)` are slightly different from
```
Y temp(y);
B-mv(x, temp);
y -= temp;
```
2020-12-03 11:10:36 +01:00
Markus Blatt
8ee58096ba Make the parallel reduction when applying the Wells.
The B matrix is basically a component-wise multiplication
with a vector followed by a parallel reduction. We do that
reduction to all ranks computing for the well to save the
broadcast when applying C^T.
2020-12-03 11:10:36 +01:00
Markus Blatt
3996967344 Added a class with information and comunicator for parallel wells.
BlackoilWellModel now stores an instance of this class for each
well. Inside that class there is a custom communicator that only
contains ranks that will have local cells perforated by the well.
This will be used in the application of the distributed well operator.

This is another small step in the direction of distributed wells,
but it should be safe to merge this (note creation of the custom
communicators is a collective operation in MPI but done only once).
2020-12-03 09:29:43 +01:00
Paul Egberts
877c0b723d fix missing argument for BlackoilTwophaseIndices 2020-12-03 09:04:11 +01:00
Paul Egberts
d0421582e1 add gas-water simulator 2020-12-03 09:04:11 +01:00
Bård Skaflestad
b7fd9e42f4 Well Model: Add Helper for Well Pointer Creation
This commit adds a new helper function,

  WellInterfacePtr createWellPointer(wellID, reportStep) const

which is responsible for creating appropriately typed derived well
pointers depending on well types (multi-segment vs. standard).
This, in turn, allows us to centralise this logic and use the same
factory function both when creating the 'well_container_' and when
forming the well-test objects.

Finally, this helper will become useful for calculating PI/II values
of shut/stopped wells in the context of WELPI.
2020-12-02 16:30:46 +01:00
Atgeirr Flø Rasmussen
30856af1ab
Merge pull request #2959 from blattms/fix-initCompletions
[bugfix] Do not iterate pass end of perf_data_ in initCompletions
2020-12-02 16:11:05 +01:00
Markus Blatt
fdf6f4244c [bugfix] Do not iterate pass end of perf_data_ in initCompletions
IMHO this might have happened if perf_data_ is empty
or if the last connection is closed. (Discovered while
working on distributed wells but might happen already
before!)
2020-12-01 14:54:48 +01:00
Markus Blatt
ab114b2e95 Use WellInterface::perf_data_ to calculate PI.
that simplifies the code a bit and will work with
distributed wells. Previously, we assumed that all
non-shut perforations are stored locally. That does
not hold any more.
2020-12-01 14:11:05 +01:00
Bård Skaflestad
b0dc5c0a63 Well PI: Use Appropriate Calculator for Each Well
The original code assumed that

    well_container_.size() == numLocalWells()

This assumption does not hold when wells open/shut dynamically in
the context of WECON and/or WTEST.

Switch to indexing into the 'prod_index_calc_' vector using the
well's own linear index instead of manually advancing iterators.

Pointy Hat: [at]bska
2020-11-27 14:50:08 +01:00
Atgeirr Flø Rasmussen
374764fc6f
Merge pull request #2946 from atgeirr/add-more-amg-options
Add more AMG options to allow setting from JSON.
2020-11-27 08:57:04 +01:00
Atgeirr Flø Rasmussen
5617a2ef5c
Merge pull request #2919 from blattms/do-not-filter-distributed
Do not filter connections on the schedule of the loadbalanced grid.
2020-11-26 16:43:09 +01:00
Atgeirr Flø Rasmussen
6e31c77234 Add more AMG options to allow setting from JSON. 2020-11-26 15:37:50 +01:00
Tor Harald Sandve
f924ac7ffe
Merge pull request #2933 from totto82/dunefem
WIP make Flow compile with dune-fem
2020-11-26 15:10:34 +01:00
Atgeirr Flø Rasmussen
a0ca8dd0b5 Use better-suited AMG criterion.
Use SymmetricDependency instead of SymmetricMatrixDependency.
Our matrices are structurally symmetric, but not numerically symmetric.
2020-11-25 16:40:03 +01:00
Markus Blatt
19bebcefe2 Broadcast schedule another time after filtering connection on rank 0
Only after rank zero does the filtering the schedule the well
definitions in there are guarateed to have no perforations to inactive
cells. Therefore we broadcast the schedule another time to publish
this to all processes.

Previously, we did the filtering locally on these processes bit that
did also remove perforations to cells that are active globally but
not locally. That seems very hard to work with when allowing
distributed wells.
2020-11-24 22:46:49 +01:00
Bård Skaflestad
bd79d4b9d5 PI/II: Switch to Using Values Only
We don't need to do the calculations in terms of EvalWell when we're
going to reduce this to the .value() before calling the PI/II
calculation routine.  We can also get by with a simpler approach to
computing the II by assuming we always inject pure phases and no
cross flow in injectors.

Suggested by: [at]atgeirr
2020-11-24 21:53:58 +01:00
Bård Skaflestad
92589a697b PI/II Loop: Switch Order of Injection/Production Branches
For readability reasons.

Suggested by: [at]atgeirr
2020-11-24 21:53:58 +01:00
Bård Skaflestad
c8a43b982c PI/II Loop: Check That We Process All Active Connections
Assert that the 'subsetPerfID' is equal to number_of_perforations_
at the end of the loop.

Suggested by: [at]atgeirr
2020-11-24 21:53:58 +01:00
Bård Skaflestad
a46a732f9e PI: Treat Production Differently From Injection
This commit makes the PI/II calculation more closely mirror the
approach taken when computing connection flow rates.  In particular,
we switch to using total mobility, mixing and volume ratios for
injecting connections while producing connections continue to use
the phase mobilities and formation volume factors derived from
conditions in the connecting cells.  We also include dissolved
gas/oil ratios and vaporised oil/gas ratios in order to fully
capture the surface flow conditions.

We split the handling of producing/injecting connections out to
separate helper functions in order to make the overall logic in
updateProductivityIndex() more manageable.ex() more manageable.
2020-11-24 21:53:58 +01:00
Bård Skaflestad
75156cd872 Unconditionally Calculate PI at End of Timestep
This commit ensures that we calculate the well and connection level
per-phase steady-state productivity index (PI) at the end of a
completed time step (triggered from endTimeStep()).

We add a new data member,

    BlackoilWellModel<>::prod_index_calc_

which holds one WellProdIndexCalculator for each of the process'
local wells and a new interface member function

    WellInterface::updateProductivityIndex

which uses a per-well PI calculator to actually compute the PI
values and store those in the WellState.  Implement this member
function for both StandardWell and MultisegmentWell.  Were it not
for 'getMobility' existing only in the derived classes, the two
equal implementations could be merged and moved to the interface.

We also add a new data member to the WellStateFullyImplicitBlackoil
to hold the connection-level PI values.  Finally, remove the
conditional PI calculation from StandardWell's well equation
assembly routine.
2020-11-24 21:53:58 +01:00
Bård Skaflestad
9f12a2edba
Merge pull request #2931 from alfbr/guiderat-supported
Removed supported keywords from list
2020-11-24 21:51:30 +01:00
Cintia Goncalves Machado
f0ba56652e restructure if 2020-11-24 09:05:18 +01:00
Cintia Goncalves Machado
82c8201f00 fix well Control Single-Phase 2020-11-23 18:40:37 +01:00
Atgeirr Flø Rasmussen
ea34c2c2df
Merge pull request #2911 from atgeirr/network-add-glift
Add the option to include gas lift for network calculations.
2020-11-20 15:23:12 +01:00
Atgeirr Flø Rasmussen
69d04b7000 Set and communicate ALQ properly in parallel. 2020-11-20 08:03:21 +01:00
Atgeirr Flø Rasmussen
e15db6a892
Merge pull request #2934 from blattms/stdwell-assign-totalrate-once
StandardWell only assing primary_variables_[WQTotal] once.
2020-11-20 07:54:43 +01:00
Markus Blatt
b21b6cf28c
Merge pull request #2914 from ducbueno/rm-oclcontainer
Removed WellContributionsOCLContainer class
2020-11-19 21:27:55 +01:00
Markus Blatt
fb5f2eb9d0 StandardWell only assing primary_variables_[WQTotal] once.
There seems to be no need to assign the same value consecutively
as often as there are phases.
2020-11-19 19:50:01 +01:00
Tor Harald Sandve
c4c0b7a756 Make it compile with dune-fem 2020-11-19 15:45:37 +01:00
Atgeirr Flø Rasmussen
8716dbfcfd Add the option to include gas lift for network calculations. 2020-11-19 14:19:26 +01:00
Atgeirr Flø Rasmussen
307315a03d
Merge pull request #2932 from atgeirr/glift-constify
Make consistent use of const for alq-related state.
2020-11-19 12:56:37 +01:00
Atgeirr Flø Rasmussen
376aecfad5 Store producer status, only call getALQ() for producers.
As it was, the getALQ() call would insert injectors into the ALQ maps,
leading to trouble.

Also, this gets rid of the slightly weird thing that the output data
structure's producer/injector status was only set after creation,
in BlackoilWellModel::wellData().
2020-11-19 11:22:25 +01:00
Arne Morten Kvarving
a95cc3dcbc fixed: signed/unsigned comparison warnings 2020-11-19 11:03:06 +01:00
Atgeirr Flø Rasmussen
8a5203814b Make consistent use of const for alq-related state.
A const well state was passed to functions that were modifying it by
calling setALQ(). Now the setALQ() method is made non-const, mutable
references to the well state are passed where sensible. The getALQ()
method uses map::at() instead of map::operator[] and no longer modifies
current_alq_. With this, it is now easy to see which methods modify the
well state and which don't. The alq-related members in the
WellStateFullyImplicitBlackoil class are no longer 'mutable'-qualified.
2020-11-19 10:09:52 +01:00
Alf Birger Rustad
b651469f34 Removed supported keywords from list 2020-11-19 09:36:30 +01:00
Tor Harald Sandve
0ac2f922d3
Merge pull request #2851 from osae/extboSimulators
Alternative solvent extension for the black oil model.
2020-11-18 14:01:36 +01:00
Markus Blatt
ea3c899080
Merge pull request #2882 from atgeirr/msw-add-well-contrib
Implement addWellContributions() for multi-segment wells
2020-11-18 13:44:24 +01:00
Jose Eduardo Bueno
a9c2a684c6 Removed WellContributionsOCLContainer class (rebase) 2020-11-18 09:14:31 -03:00
Arne Morten Kvarving
7b58071b8e
Merge pull request #2924 from akva2/janitoring
remove unused variable
2020-11-18 10:53:50 +01:00
Ove Sævareid
940af0f15d Fixed typo. 2020-11-17 19:42:41 +01:00
Ove Sævareid
63c97d54d0 Rebase issue. 2020-11-17 14:50:57 +01:00
Arne Morten Kvarving
cff02ee105 remove unused variable 2020-11-17 13:22:35 +01:00
Markus Blatt
41843f2667 Use consistent pvt region index for groups in parallel.
In serial we use the first cell of the first well to determine the
pvt region index for a group. Previously, we used the first cell of
the first local well in a parallel run. Unfortunately that may lead
to different pvt region indices being used for the same goup on
different processes.

We fix this by using the same approach in parallel as we already use
in serial. For this we use Well::seqIndex() to determine the needed
ordering.
2020-11-17 12:54:45 +01:00
Atgeirr Flø Rasmussen
d69dbf598e Response to review comments. 2020-11-17 12:53:04 +01:00
Ove Sævareid
98b2ed5bd4 Cleaning up various issues. 2020-11-17 12:39:21 +01:00
Ove Sævareid
0f7e66e151 Alternative solvent extension for the black oil model. 2020-11-17 12:33:19 +01:00
Atgeirr Flø Rasmussen
f967d82ad5 Make --alternative-well-rate-init=true the default. 2020-11-17 11:56:02 +01:00
Markus Blatt
09a4a04c22
Merge pull request #2896 from atgeirr/refactor-well-calc
Refactor well calculations
2020-11-17 09:40:19 +01:00
Markus Blatt
64fa5a2b30
Merge pull request #2858 from Tongdongq/ilu-reorder-strategy
Added cmdline parameter --ilu-reorder-strategy
2020-11-17 09:35:12 +01:00
Markus Blatt
0dcfc60363
Merge pull request #2912 from totto82/polyhedrealgrid
Make a flow version that uses the polyhedreal grid
2020-11-16 17:04:38 +01:00
Atgeirr Flø Rasmussen
82ecb1e7cd Implement addWellContributions() for MultisegmentWell. 2020-11-16 11:42:29 +01:00
Atgeirr Flø Rasmussen
963a8b640a Add the invertWithUMFPack() utility. 2020-11-16 11:37:44 +01:00
Atgeirr Flø Rasmussen
db7cd1053f Add the multMatrixImpl() utility. 2020-11-16 11:37:44 +01:00
Atgeirr Flø Rasmussen
cb928f90f0 Refactor per-perforation code into separate function.
Also make some methods const.
2020-11-16 11:19:03 +01:00
Atgeirr Flø Rasmussen
6f7e83a2ce
Merge pull request #2916 from blattms/stdwell-comm-backport
Parts of the distributed well work backported to original approach.
2020-11-13 08:43:00 +01:00
Markus Blatt
d6e2e87efc WellInterface::initComletions: stop relying on open connections being local.
Instead use the perforation data to add the correct indices.
2020-11-12 17:22:36 +01:00
Markus Blatt
049aaad326 Adds original ECL index of well connection to PerforationData
and use it in the WellInterface instead of creating a vector
with these indices there. The original approach recreates
information in another path of the well and assumes that all
connections are in a process's local partition. That assumption
does not hold any more for distributed wells.
2020-11-12 17:21:37 +01:00
Markus Blatt
010ff83f26 Use functor iterating container when communicating group rates.
Makes the code more compact.
2020-11-12 16:28:36 +01:00
Tor Harald Sandve
fbccdbf68e Make a flow version that uses the polyhedreal grid
Currently the simulator creats the polyhedreal grid from an eclGrid from opm-common

TODO
 - make it possible to create the grid directly from DGF or MRST format
 - fix issue on norne.
2020-11-10 15:49:59 +01:00
Alf Birger Rustad
25b12428be Less aggressive growth dampoing factor 2020-11-09 11:45:13 +01:00
Alf Birger Rustad
553a408b13 Set number directly instead of fraction and update comments 2020-11-09 09:13:20 +01:00
Alf Birger Rustad
2fc9b03af4 Switched time step control and changed damping factor for it 2020-11-09 08:40:31 +01:00
Bård Skaflestad
fc3ce85be2
Merge pull request #2906 from goncalvesmachadoc/patch-3
Delete some radial keywords from Missing Features
2020-11-06 16:35:57 +01:00
Tor Harald Sandve
73b384f8cd
Merge pull request #2902 from totto82/fixWlift
Fixes to the wlift implementation
2020-11-06 15:58:24 +01:00
Tor Harald Sandve
2795d1713f avoid oscilating between decreasing and increasing when rates are limited 2020-11-06 15:19:21 +01:00
Cintia Goncalves Machado
9695de9e8c
Delete some radial keywords from Missing Features
They are implemented in the SpyderWeb grid.
2020-11-06 14:26:59 +01:00
Paul Egberts
7ef854f32f
Two fixes
1) Corrected phaseIsActive with PhaseIdx argument instead of CompIdx argument in "subtraction of dissolved gas from oil phase and vapporized oil from gas phase".
2) Fix for well accumulation calculation in case oil is absent.
2020-11-05 17:09:25 +01:00
Atgeirr Flø Rasmussen
adfb8ef771
Merge pull request #2898 from blattms/always-accu-to-one-proc-as-default
Always accumulates data in AMG to 1 process on coarse levels.
2020-11-05 15:41:57 +01:00
Tor Harald Sandve
bd370c6470 fixes to the wlift implementation 2020-11-05 13:05:01 +01:00
Håkon Hægland
7011a6c0b7 Restore cwd after each unittest.
Restores the original cwd after each unittest in test_basic.py. Also
simplifies add_test() in python/simulators/CMakeLists.txt such that the
Bash script wrapper run-python-tests.sh is no longer needed to run the
tests.
2020-11-04 13:51:36 +01:00
Markus Blatt
d83ae17e5b Always accumulates data in AMG to 1 process on coarse levels.
In OPM the matrix graph might be unsymmetric as we do not store
the full sparsity pattern for copy rows but only the diagonal.
Unfortunately, DUNE assumes that matrices from finite elements and
finite volumes have a symmetric sparsity pattern for copy rows to
and uses this assumption to create the graphs for PTScotch/ParMETIS
more easily. But PTScotch/ParMetis assume a symmetric graph.
2020-11-03 22:13:27 +01:00
Håkon Hægland
648bab7108 Implements access to the porosity from Python.
Implements access (read/write) to the porosity from Python.
2020-11-03 17:18:14 +01:00
Håkon Hægland
53cbe0c57e Initialize boolean variables in-class.
Initialize the boolean variables hasRunInit_ and hasRunCleanup_ in
the class instead of in the constructor.
2020-11-03 16:17:52 +01:00
Håkon Hægland
0403d4e6e7 Implements a Python step_cleanup() method.
Continues the work in #2735 on implementing Python bindings for the flow
simulator.
2020-11-03 16:12:12 +01:00
Arne Morten Kvarving
4121e0a3c4 fix typo 2020-11-03 13:48:09 +01:00
Cintia Goncalves Machado
27a00b3c59
Delete WEIR and WEIT 2020-10-28 19:17:53 +01:00
Bård Skaflestad
3058047d3c Extract Correct Connection-Level Rates
The Polymer, Brine, and Solvent quantities would be extracted from
elements 0..#perf-1 of their pertinent container rather than from
the elements associated to the particular well.
2020-10-23 22:24:00 +02:00
Atgeirr Flø Rasmussen
5d48923994
Merge pull request #2856 from plgbrts/temp
fix temperature reporting for injectors
2020-10-22 14:25:35 +02:00
Tor Harald Sandve
990ce70287
Merge pull request #2849 from goncalvesmachadoc/aquifer
Prepare Well Implemantion For Water and Water-Gas System
2020-10-22 14:08:12 +02:00
Arne Morten Kvarving
7d13d347db changed: remove unused parameters 2020-10-21 13:32:12 +02:00
Tor Harald Sandve
41f40e5002
Merge pull request #2626 from atgeirr/network-thp
Network-controlled THP limit
2020-10-21 12:33:42 +02:00
Atgeirr Flø Rasmussen
7e737b143d Address review comments. 2020-10-21 09:50:31 +02:00
tqiu
d25405d39a Renamed parameter to OpenclIluReorder and moved error checking to BdaBridge constructor. 2020-10-19 11:36:25 +02:00
tqiu
a372a1e4bd Added cmdline parameter --ilu-reorder-strategy 2020-10-19 11:33:32 +02:00
Atgeirr Flø Rasmussen
e7d1d6603a Silence unused argument warning. 2020-10-19 09:13:37 +02:00
Bård Skaflestad
9a71bbe4b0 Move 'gridForConn' Into Cuda/OpenCL Block
It is only used within this context and produces a warning of the
form

  ISTLSolverEbos.hpp:128:25: warning: unused variable ‘gridForConn’

unless the build configures accelerator support.
2020-10-19 02:28:05 +02:00
Atgeirr Flø Rasmussen
24b2393334 Add parameter --alternative-well-rate-init.
With this, a slightly more sophisticated procedure is used for well rate intialization.
Since it changes existing results, it defaults to false, giving the existing behaviour.
2020-10-15 17:56:11 +02:00
Atgeirr Flø Rasmussen
6155188a70 Remove unused file SimFIBODetails.hpp. 2020-10-15 16:35:35 +02:00
Atgeirr Flø Rasmussen
8eb4d1dc70 Implemented computeCurrentWellRates() for multisegment wells.
Also add effect of rock compressibility on well connection transmissibility factors,
which was added to StandardWell earlier but not MultisegmentWell.
2020-10-15 16:24:55 +02:00
Atgeirr Flø Rasmussen
7e87ea3200 Refactor to put updateWellStateRates() in base class. 2020-10-15 14:15:05 +02:00
Atgeirr Flø Rasmussen
52c695937b Implement extended network model. 2020-10-15 10:54:03 +02:00
Markus Blatt
44fadfb88a Fixes compilation of CUDA.
nvcc exits compilation if the header dune/istl/basearray.hh (form DUNE
2.6) is included as it does not seem to understand the friend declaration
there (friend class for a struct).

```
/usr/include/dune/istl/basearray.hh:101:49: error: ‘typename Dune::Imp::base_array_unmanaged<B, A>::RealIterator’ names ‘template<class B, class A> template<class T> struct Dune::Imp::base_array_unmanaged<B, A>::RealIterator’, which is not a type
       friend class RealIterator<const ValueType>;
                                                 ^
```
2020-10-14 19:23:57 +02:00
Paul Egberts
9ecd153099 fix temperature reporting for injectors 2020-10-14 17:52:04 +02:00
Cintia Goncalves Machado
a697e7faf6 fix return position 2020-10-14 14:55:38 +02:00
Bård Skaflestad
7bf4b76dac Add Doxygen Documentation to Well PI Calculator
Suggested by [at]atgeirr.
2020-10-13 15:42:35 +02:00
Bård Skaflestad
b6e0bd1b7b Add Calculator for Connection/Well Productivity Index
Switches between using the logarithmic and unit scaling factor based
on whether or not the well has an explicit, positive drainage radius
(WELSPECS item 7).  Does presently not include the D factor.

Add a set of unit tests to exercise the facility.
2020-10-13 15:42:35 +02:00
Atgeirr Flø Rasmussen
2aeefc71c1
Merge pull request #2827 from totto82/timestepping
add options for timestepping
2020-10-13 14:25:26 +02:00
Atgeirr Flø Rasmussen
43d5d2c532
Merge pull request #2850 from atgeirr/silence-warnings
Silence warnings from range-for.
2020-10-13 08:19:48 +02:00
Markus Blatt
884e02c0e2
Merge pull request #2848 from atgeirr/unify-linsolve-only
Unify linear solvers
2020-10-13 08:09:27 +02:00
Atgeirr Flø Rasmussen
ea0abd1331 Bugfix: do not substr() on too small strings. 2020-10-12 21:58:58 +02:00
Atgeirr Flø Rasmussen
dedbe78cee Copyright additions. 2020-10-12 17:06:11 +02:00
Atgeirr Flø Rasmussen
316b28923d Rename parameter --linear-solver-configuration to --linsolver. 2020-10-12 17:03:00 +02:00
Cintia Goncalves Machado
920f071f5f fix fractions 2020-10-12 16:46:39 +02:00
Atgeirr Flø Rasmussen
f169cf90d8 Remove --linear-solver-configuration-file parameter.
This is now handled by passing a string to --linear-solver-configuration that
ends with ".json".
2020-10-12 16:41:09 +02:00
Atgeirr Flø Rasmussen
f262eec9bf Silence warnings from range-for. 2020-10-12 09:39:37 +02:00
Atgeirr Flø Rasmussen
385880485a Fix logic of shouldCreateSolver(). 2020-10-11 22:46:02 +02:00
Atgeirr Flø Rasmussen
30a4fe55b0 Add "amg" option to --linear-solver-configuration. 2020-10-11 09:31:48 +02:00
Atgeirr Flø Rasmussen
842afd312e Refactor setupPropertyTree(). 2020-10-11 09:24:05 +02:00
Atgeirr Flø Rasmussen
00438c4860 Remove unused parts (not just comment out). 2020-10-11 08:44:21 +02:00
Atgeirr Flø Rasmussen
0a70d95bee Refactor shouldCreateSolver(). 2020-10-11 08:20:19 +02:00
Cintia Goncalves Machado
23e7886297 prepareWellImplForLackOfOil 2020-10-10 16:05:12 +02:00
Atgeirr Flø Rasmussen
1c208e9a92 Avoid unnecessary extra matrix manipulation.
When using the ParallelOverlappingILU0 it is not necessary to fix the overlap rows.
2020-10-10 10:09:23 +02:00
Atgeirr Flø Rasmussen
ac3004da9d
Merge pull request #2847 from blattms/blackoilmodel-getLocalNonshutWells
Added BlackoilWellModel::getLocalNonshutWells to reduce code duplicat…
2020-10-09 16:35:50 +02:00
Markus Blatt
ba1bc7c23c Added BlackoilWellModel::getLocalNonshutWells to reduce code duplication. 2020-10-09 15:27:09 +02:00
Atgeirr Flø Rasmussen
65817c9068 Removed old amg/cpr code that can be replaced.
The replacement consists of using the FlexibleSolver code.
2020-10-08 15:12:41 +02:00
Atgeirr Flø Rasmussen
f528adb604
Merge pull request #2837 from blattms/fix-parallel-average-formation-factors
Fixes parallel computation of average formation factors.
2020-10-06 19:37:12 +02:00
Bård Skaflestad
406feea8e7
Merge pull request #2835 from bska/chase-ctfac-api-update
Provide Simulator's Dynamic CTF in data::Connection
2020-10-06 14:33:12 +02:00
Alf Birger Rustad
2949c54957
Merge pull request #2838 from akva2/janitoring
fix typo
2020-10-06 14:10:23 +02:00
Arne Morten Kvarving
440cfdd38b remove LIFTOPT and WLIFTOPT from missing features 2020-10-06 13:55:10 +02:00
Arne Morten Kvarving
3db98e3bef fix typo 2020-10-06 12:36:27 +02:00
Kai Bao
64746e21bf
Merge pull request #2826 from akva2/janitoring
fixed: make some indices constexpr
2020-10-06 11:21:40 +02:00
Bård Skaflestad
e39333895c Provide Simulator's Dynamic CTF in data::Connection
This is in preparation of implementing the WELPI feature.
2020-10-05 23:14:24 +02:00
Bård Skaflestad
14e34378b0
Merge pull request #2829 from GitPaean/wip_aquifer_keywords
aquifer summary keywords
2020-10-05 22:51:40 +02:00
Markus Blatt
5553d2d1f3 Renamed variables/functions for number of cells. 2020-10-05 20:02:13 +02:00
Markus Blatt
ca8de16285 Fixes parallel computation of average formation factors.
This was using the sum of the sum of all cells of the partitions.
Hence the shared cells were counted twice.
2020-10-05 14:08:59 +02:00
Arne Morten Kvarving
c888410a07 avoid usage of property system macros 2020-10-05 09:01:58 +02:00
Atgeirr Flø Rasmussen
f6569b6a4f
Merge pull request #2832 from alfbr/improve-output
Improve output
2020-10-05 08:49:09 +02:00
Alf Birger Rustad
958f368ce7 indent 2020-10-03 12:25:47 +02:00