Kai Bao
e38e557bbc
cleaning up to preapre for pull request
2023-09-29 10:55:19 +02:00
Stein Krogstad
035d216641
adding function iterateWellEqWithSwitching
...
when we do the local solve for well equations, control/status will be
updated during the iteration process, such that the converged well gets
correct control/status regarding to the current reservoir state.
various change in the other parts of the code were made to make the
function work as intended.
2023-09-29 10:51:04 +02:00
Arne Morten Kvarving
92fa9577da
consistently use std::size_t
2023-08-15 09:32:10 +02:00
Bård Skaflestad
7f89276fe8
Hook New WBPn Calculation Up to Well Model
...
This commit activates the support for calculating WBPn summary
result values per well in parallel. To affect the calculation we
add two new data members in BlackoilWellModelGeneric:
- conn_idx_map_:
Maps well's connection index (0..getConnections().size() - 1) to
connections on current rank. Its local() connections are
negative 1 (-1) if the connection is not on current rank, and a
non-negative value otherwise. The global() function maps well
connections on current rank to global connection ID for each
well. Effectively the reverse of local(). Finally, the open()
function maps well connections on current rank to open/flowing
connections on current rank. Negative 1 if connection is not
flowing.
- wbpCalculationService:
Parallel collection of WBPn calculation objects that knows how
to exchange source and result information between all ranks in a
communicator. Also handles distributed wells.
We furthermore need a way to compute connection-level fluid mixture
density values. For the standard well class we add a way to access
the StandardWellConnection's 'perf_densities_' values. However,
since these are defined for open/flowing connections only, this
means we're not able to fully meet the requirements of the
WELL/ALL
WPAVE depth correction procedure for standard wells. The
multi-segmented well type, on the other hand, uses the fluid mixture
density in the associated well segment and is therefore well defined
for ALL connections. OPEN well connections are supported for both
well types.
2023-07-10 13:42:46 +02:00
Bård Skaflestad
77fe28979e
Calculate Segment Phase and Mixture Densities for Summary Output
...
This commit adds logic and backing storage in the SegmentState to
provide the segment level summary vectors
- SDENx -- Phase density of phase 'x' (O, G, W)
- SDENM -- Mixture density without flowing fraction exponents
- SMDEN -- Mixture density with flowing fraction exponents
We defer the calculation of SDENM and, especially, SMDEN, to the
MultisegmentWellSegments class since this class maintains the
current flowing fractions.
2023-07-05 11:05:26 +02:00
Bård Skaflestad
82a2d284fb
Merge pull request #4686 from GitPaean/support_winjmult_rebase
...
Support WINJMULT
2023-06-27 15:40:06 +02:00
Kai Bao
f78f8e45f7
addressing the review comments
2023-06-27 14:46:11 +02:00
Arne Morten Kvarving
fffb3d9f0e
suppress unused lambda capture warnings with clang
2023-06-27 14:35:35 +02:00
Kai Bao
cc9ee9c059
support WINJMULT
2023-06-27 12:49:25 +02:00
Arne Morten Kvarving
e7bb51740e
cosmetics
2023-06-23 08:47:11 +02:00
Arne Morten Kvarving
768a4903a3
reorganize (Std|MS)Well::computeWellPotentials
...
put shared parts in WellInterfaceGeneric::computeWellPotentials and
WellInterfaceGeneric::checkNegativeWellPotentials
2023-06-22 11:28:59 +02:00
Arne Morten Kvarving
7b33cc6d62
move computeConnLevel(Inj|Prod)Ind to WellInterface
...
now code is shared between STW and MSW
2023-06-22 09:58:58 +02:00
Bård Skaflestad
b5517c8600
Merge pull request #4652 from akva2/update_ws_thp_prod_shared
...
move updateWellStateWithTHPTargetProd to WellInterface
2023-06-22 09:54:35 +02:00
Arne Morten Kvarving
01c4aa1927
move updateWellStateWithTHPTargetProd to WellInterface
...
to share implementation between STW and MSW
2023-06-22 09:10:38 +02:00
Arne Morten Kvarving
b55ca83917
changed: unify MultisegmentdWell::computePerfRate(Eval|Scalar)
2023-06-22 08:46:06 +02:00
Atgeirr Flø Rasmussen
d46d23befd
Silence shadowing warning.
2023-06-13 20:54:06 +02:00
Atgeirr Flø Rasmussen
bc9cfc8cd5
Add methods for getting and setting primary variables.
...
These can be used to manage state in the well models, and will
be used in the NLDD solver option. Also added the setupDomains()
method, as the getters and setters are working on a domain basis.
2023-06-13 15:31:30 +02:00
Håkon Hægland
64c041d08f
Account for pressure loss also in thp
2023-06-02 09:25:34 +02:00
Arne Morten Kvarving
127ddd44a2
supress unused capture warning with clang
...
a bug in clang causes it to emit unused lambda captures
here due to the if constexpr usage. use standard (void)
trick to suppress it
2023-05-31 09:35:16 +02:00
Stein Krogstad
5c0b76f337
Revert to original segment density computations
...
(keep average version as option)
2023-05-23 12:44:06 +02:00
Arne Morten Kvarving
0406a033a2
introduce getMobility in WellInterface
...
we now share implementation between StandardWell and MultisegmentWell
2023-05-15 21:39:59 +02:00
Arne Morten Kvarving
5126097d7b
changed: unify MultisegmentWell::getMobility(Eval|Scalar)
2023-05-15 21:38:39 +02:00
Arne Morten Kvarving
c18fb6a577
changed: store rates in an array in SingleWellState
...
introduce an enum for indexing into the array. this again
allows us to coalesce 4 parallel reductions into one.
2023-05-09 12:26:18 +02:00
Kai Bao
5536b24a84
fixing the comilation from the reverted commit
...
the interface has changed.
2023-05-08 10:43:49 +02:00
Kai Bao
2d67d819e7
Revert "removing unused function solveEqAndUpdateWellState"
...
This reverts commit 7931e6e00a
.
2023-05-08 10:43:49 +02:00
Arne Morten Kvarving
f06cc1f626
changed: simplify computePerfRate signatures
...
pass a PerforationRates ref instead of multiple references
to doubles
2023-05-04 13:33:45 +02:00
Arne Morten Kvarving
9bfe835652
changed: introduce a struct PerforationRates
...
this holds various rates for a perforation that used to be
kept as separate variables
2023-05-04 13:33:45 +02:00
Kai Bao
7c06ec38a3
stricter tolerance for wells with zero rate target
...
for StandardWell only at this moment.
2023-03-30 15:49:27 +02:00
Kai Bao
9304542dbe
combining wellIsStopped and wellUnderZeroRateTaget
...
for better readability.
2023-03-29 14:40:50 +02:00
Kai Bao
b6eecf5c55
not updating the THP for zero rate controlled wells
2023-03-29 13:48:34 +02:00
Kai Bao
f4e0a996b9
wells under zero injection target are also treated as stopped well
...
when formulating the well control equations
2023-03-29 13:48:34 +02:00
Kai Bao
7931e6e00a
removing unused function solveEqAndUpdateWellState
...
from MultisegmentWell and WellInterface .
2023-03-27 13:26:00 +02:00
Kai Bao
2c5a4398c9
make sure zero production rates are obtained for the following wells
...
1. stopped production wells
2. production wells under zero rate control
We guarantee the objective through enforce zero values for the WQTotal
primary variable during the initialization and update process during the
Newton solution.
2023-03-27 13:24:08 +02:00
hnil
aa40d2f0f3
-- prepared for possibliy of not using cached intentensive quantities
2023-03-24 19:57:31 +01:00
Vegard Kippe
f527267593
Fixing MSW connection pressure output
2023-02-17 12:17:41 +01:00
Kai Bao
57bf959efd
update well state when switching to THP control for producers
...
hopefully, it begins at a reasonably good initial point. When the Newton
iteration begins with certian solution region, the nonlinear solution
might fail.
2023-02-07 14:50:07 +01:00
Arne Morten Kvarving
3745a4c02d
clean up Units.hpp includes
...
include it where required instead of relying on other
headers to pull it in
2023-01-16 12:21:29 +01:00
Arne Morten Kvarving
1bf36dfc08
MultisegmentWell: move code using WellSegments to compile unit
2023-01-12 14:37:32 +01:00
Arne Morten Kvarving
ff0f9c05f0
MultisegmentWell: avoid use of sstream
2023-01-02 15:24:35 +01:00
Arne Morten Kvarving
4c3d933835
MultisegmentWell: use {fmt} to format error messages
2022-12-23 09:39:29 +01:00
Tor Harald Sandve
5854b8a7a1
Support gas dissolution in water (Rsw)
...
- adapt to interface change in waterPvt()
- add gas + water + disgasw simulator
Note
- MSW is not supported
- EQUIL initialization is not supported
2022-12-21 13:13:52 +01:00
Arne Morten Kvarving
c1e05fae18
MultisegmentWellSegments: make members private
...
and add various read-only accessors
2022-12-19 16:03:54 +01:00
Arne Morten Kvarving
12b15b5038
move updateUpwindingSegments to MultisegmentWellSegments
2022-12-19 16:03:54 +01:00
Arne Morten Kvarving
ef7b2aca4e
move computeSegmentFluidProperties to MultisegmentWellSegments
2022-12-19 16:03:54 +01:00
Arne Morten Kvarving
4a9cedf452
move getSegmentSurfaceVolume to MultisegmentWellSegments
2022-12-19 16:03:53 +01:00
Arne Morten Kvarving
5755c94256
move segment_inlets_ to MultisegmentWellSegments
2022-12-19 16:03:27 +01:00
Arne Morten Kvarving
2766427df0
move segment_perforations_ and perforation_segment_depth_diffs_ to MultisegmentWellSegments
2022-12-19 16:03:26 +01:00
Arne Morten Kvarving
aa684a10b8
added: MultisegmentWellSegments
...
this is a container class for per-segment properties in MultisegmentWell
2022-12-19 15:55:20 +01:00
Arne Morten Kvarving
654c252bb8
MultisegmentWellAssemble: simplify assembleControlEq
...
by passing primary variables
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
e1cd54b267
MultisegmentWell: move updateUpwindingSegments to MultisegmentWellPrimaryVariables
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
37607c570a
MultisegmentWell: move updateWellStateFromPrimaryVariables to MultisegmentWellPrimaryVariables
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
dbdcb2d5ce
MultisegmentWell: move getWQTotal to MultisegmentWellPrimaryVariables
...
also drop otherwise unused getSegmentWQTotal
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
6b47f9bf1a
MultisegmentWell: move getQs to MultisegmentWellPrimaryVariables
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
99020fe33b
MultisegmentWell: move getBhp to MultisegmentWellPrimaryVariables
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
bb377c0a47
MultisegmentWell: move getSegmentPressure to MultisegmentWellPrimaryVariables
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
f99ecd15ac
MultisegmentWell: move getSegmentRateUpwinding to MultisegmentWellPrimaryVariables
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
8e9b004cfc
MultisegmentWell: move surfaceVolumeFraction to MultisegmentWellPrimaryVariables
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
b112a793c5
MultisegmentWell: move updatePrimaryVariablesNewton to MultisegmentWellPrimaryVariables
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
5212e9c100
MultisegmentWell: move updatePrimaryVariables to MultisegmentWellPrimaryVariables
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
e1fccd47dc
added: MultisegmentWellPrimaryVariables
...
this is a container class for the primary variables in
multisegment well
2022-12-19 13:05:39 +01:00
Arne Morten Kvarving
10a671e88c
MultisegmentWell: make updateWellState non-const
...
this will obviously update state
2022-12-16 15:05:06 +01:00
Arne Morten Kvarving
f17a90170d
use exception classes from opm-common
2022-12-13 12:56:13 +01:00
Arne Morten Kvarving
6011a42246
added: MultisegmentWellAssemble::assemblePerforationEq
...
extracted from MultisegmentWell::assembleWellEqWithoutIteration
2022-12-05 11:07:09 +01:00
Arne Morten Kvarving
b1d1e47e28
added: MultisegmentWellAssemble::assembleInflowTerm
...
extracted from MultisegmentWell::assembleWellEqWithoutIteration
2022-12-05 11:07:09 +01:00
Arne Morten Kvarving
d5bbccde65
added: MultisegmentWellAssemble::assembleOutflowTerm
...
extracted from MultisegmentWell::assembleWellEqWithoutIteration
2022-12-05 11:07:09 +01:00
Arne Morten Kvarving
517dd49771
added: MultisegmentWellAssemble::assembleAccumulationTerm
...
extracted from MultisegmentWell::assembleWellEqWithoutIteration
2022-12-05 11:07:09 +01:00
Arne Morten Kvarving
d64508f3b8
added: MultisegmentWellAssemble::assemblePressureLoss
...
extracted from MultisegmentWellEval::handleAccelerationPressureLoss
2022-12-05 11:07:09 +01:00
Arne Morten Kvarving
4ebde4e003
added: MultisegmentWellAssemble
...
this handles assembly of the equation system for multisegment well.
start by moving assembleControlEq into the new class
2022-12-05 11:07:09 +01:00
Arne Morten Kvarving
97e1cdb662
added: MultisegmentWellEquations::extractCPRPressureMatrix()
...
this adds the cpr pressure matrix to a matrix.
this is the core of MultisegmentWell::addWellPressureEquations
use the new method in the implementation.
2022-12-05 10:13:55 +01:00
Arne Morten Kvarving
de8eedb9a6
added: MultisegmentWellEquations::extract(SparseMatrixAdapter)
...
this adds the well matrices to a sparse matrix adapter.
this is the core of MultisegmentWell::addWellContributions.
use the new method in the implementation.
2022-12-05 10:13:55 +01:00
Arne Morten Kvarving
d50aaf8ed4
added: MultisegmentWellEquations::recoverSolutionWell()
...
this recovers the well solution from a solution vector.
use the new method in the well implementation.
2022-12-05 10:13:55 +01:00
Arne Morten Kvarving
bc312d1117
added: MultisegmentWellEquations::solve()
...
this applies the inverted D matrix to the residual vector.
use the new method in the well implementation.
2022-12-05 10:13:55 +01:00
Arne Morten Kvarving
a7cb444328
MSWellHelpers: simplify interfaces
...
- avoid passing the matrix, only pass the solver. possible
since setting up the solver is not done in here any more.
- avoid passing shared_ptr's
2022-12-05 10:13:55 +01:00
Arne Morten Kvarving
e67e58d0c8
added: MultisegmentWellEquations::createSolver
...
this applies compute the LU decomposition of the D matrix
2022-12-05 10:13:53 +01:00
Arne Morten Kvarving
abf5f94561
added: MultisegmentWellEquations::apply(r)
...
this applies the equation system to a vector.
use the new method in the well implementation.
2022-12-01 10:36:40 +01:00
Arne Morten Kvarving
f2acbccc1a
added: MultisegmentWellEquations::apply(x,Ax)
...
this applies the equation system to a vector.
use the new method in the well implementation.
2022-12-01 10:36:40 +01:00
Arne Morten Kvarving
ac245a2e17
added: MultisegmentWellEquations::clear
...
this zeros the equation system.
use the new method in the well implementation.
2022-12-01 10:25:57 +01:00
Arne Morten Kvarving
57f09050fc
add: MultisegmentWellEquations
...
this is a container for the multisegment well equation system
2022-12-01 10:25:28 +01:00
Arne Morten Kvarving
eadf972014
MSWellHelpers: reverse order of template parameters
...
this way the matrix type and be deduced from passed parameters
2022-11-30 23:05:29 +01:00
Kai Bao
6102249466
Merge pull request #4289 from akva2/fix_thp_regression
...
fix regression in wells
2022-11-28 10:46:35 +01:00
Arne Morten Kvarving
c9856b9b2a
WellInterface: make updatePrimaryVariables non-const
...
this will obviously modify well state
2022-11-25 13:09:29 +01:00
Arne Morten Kvarving
fba6249dd8
WellInterface: make recoverWellSolutionAndUpdateWellState non-const
...
this will obviously modify well state
2022-11-25 13:09:29 +01:00
Arne Morten Kvarving
147f0eb2bd
WellInterface: make initPrimaryVariablesEvaluation non-const
...
this will obviously modify well state
2022-11-25 13:09:29 +01:00
Arne Morten Kvarving
2da1322697
fix regression in wells
...
we need to call WellInterface::getTHPConstraint,
not WellBhpThpCalculator::getTHPConstraint
2022-11-23 15:37:04 +01:00
Arne Morten Kvarving
d2c028fb74
StandardWell_impl.hpp: remove some unused headers
2022-11-22 10:37:41 +01:00
Atgeirr Flø Rasmussen
5107bcfada
Merge pull request #4226 from hnil/remove_assert_cprw
...
removed assert in cprw for strictly positive diagonal well coupling
2022-11-14 12:42:37 +01:00
hnil
9c76c96f21
moved debug code into #if section
2022-11-14 11:36:48 +01:00
Kai Bao
97b016ef44
fixing some typos in MultisegmentWell_impl.hpp
2022-11-05 22:51:59 +01:00
hnil
85bfa13c46
change std:cout to OPM::debug
2022-11-04 16:26:12 +01:00
hnil
a86bd1c585
removed assert in cprw for strictly positive diagonal well coupling
2022-11-01 21:39:55 +01:00
Arne Morten Kvarving
e8152a1b65
changed: tidy up computeBhpAtThpLimitProdWithAlq interface
...
put deferred_logger at the end of the parameter list.
similar to the rest of this family of methods
2022-10-31 13:16:16 +01:00
Arne Morten Kvarving
42fff132b0
changed: drop wrapper MultisegmentWellGeneric::computeBhpAtThpLimitProdWithAlq
2022-10-31 13:16:16 +01:00
Arne Morten Kvarving
f214ccc138
changed: move computeBhpFromThpLimitInj to WellBhpThpCalculator
2022-10-31 13:15:56 +01:00
Arne Morten Kvarving
4fcb1e9d37
changed: move calculateThpFromBhp to WellBhpThpCalculator
2022-10-31 13:15:18 +01:00
Arne Morten Kvarving
f7f4352b68
changed: move mostStrictBhpFromBhpLimits to WellBhpThpCalculator
2022-10-31 13:15:18 +01:00
Bård Skaflestad
36ca7d11e9
Merge pull request #4149 from totto82/improve_conv_thp
...
Improve convergence for newly opened wells with thp control
2022-10-18 10:26:55 +02:00
Tor Harald Sandve
74eb0d048f
Improve convergence for newly opened wells with thp control
2022-10-17 15:32:27 +02:00
Kai Bao
9056bf3d98
removing the usage of GTotal
2022-10-13 22:13:45 +02:00
Markus Blatt
a4360b4961
Merge pull request #4028 from akva2/reduce_dup
...
changed: get rid of duplicate MatrixBlock headers/classes
2022-09-09 15:30:30 +02:00
Tor Harald Sandve
f36ac3eeed
Merge pull request #3837 from totto82/wvfpexp
...
Add option for explicit vfp lookup for problematic wells
2022-09-09 10:00:02 +02:00