Commit Graph

229 Commits

Author SHA1 Message Date
Kai Bao
ebe60bc5d7 puting WellModel before Implementation in the template. 2016-04-20 14:26:13 +02:00
Kai Bao
b464e4fb4a adding WellModel as template class for BlackoilModelBase
the compilation and running of flow are recovered.

Conflicts:
	opm/autodiff/BlackoilModelBase_impl.hpp
2016-04-20 14:26:13 +02:00
Tor Harald Sandve
18434e54ad Query the compute_well_potential parameter only once
-- and fix some comments
2016-04-20 08:32:57 +02:00
Tor Harald Sandve
e9b097cbf4 Only compute well potential if needed
A boolen user parameter is added to controll the computation of well
potential.

This is a temporary fix to assure that no extra computation time is used
on well potential calculation if it is not needed. The long term fix
will require a more thorough revising of the well group implementation.
2016-04-19 16:24:28 +02:00
Tor Harald Sandve
84972ac21e Fix bhp/thp logic in well potential calculation
Pick the most restrictive bhp (not the one that gives the largest
potential flow)
2016-04-19 15:58:05 +02:00
Tor Harald Sandve
4867e14f88 Fixes after rebase
-- remove some leftovers from merge process
-- start using stdWells()
2016-04-19 09:41:25 +02:00
Tor Harald Sandve
b216302895 Adapt to usage of stdWells() 2016-04-19 09:21:16 +02:00
Tor Harald Sandve
cc48e8a17e Add support for THP in well potential calculations 2016-04-19 09:21:15 +02:00
Tor Harald Sandve
18246263e9 Move computation of well potentials from simulator class ot model class
- the computation of well potentials in the model class calculates the
well potentials using computeWellFlux()
- in this way the well potential calculations also handle well where
some perforations are closed by the simulator due to cross-flow.
- the well potentials pr perforation and phase is stored in the well
state.
2016-04-19 09:21:15 +02:00
Kai Bao
adb140a788 fixing the running of flow_multisegment 2016-04-14 16:05:19 +02:00
Kai Bao
75b73a893e putting Vector and ADB to be inside StandardWells and wellhelpers 2016-04-14 16:05:19 +02:00
Kai Bao
19734f2103 adding extractWellPerfProperties to StandardWellsSolvent
to fix the flow_solvent running.
2016-04-14 16:05:19 +02:00
Kai Bao
5da57973fe adding updateWellState and updateWellControls to StandardWells 2016-04-14 16:05:18 +02:00
Kai Bao
376c940f09 moving updatePerfPhaseRatesAndPressures to StandardWells 2016-04-14 16:05:18 +02:00
Kai Bao
c398a6e424 puting computeWellFlux in StandardWells 2016-04-14 16:05:18 +02:00
Kai Bao
e9e1b9fda8 adding extractWellPerfProperties to StandardWells
It causes problem for the flow_multisegment. So the version in
BlackoilModelBase is kept for now.

On the other hand, it is few of functions that will be both required by
the standard wells and multisegment wells.

Some decision will be made later on how to put this function.
2016-04-14 16:05:18 +02:00
Kai Bao
c8b66821d5 adding computeWellConnectionDensitesPressures to StandardWells class. 2016-04-14 16:05:18 +02:00
Kai Bao
5d99fac207 adding StandardWellsSolvent for Solvent model. 2016-04-14 16:05:18 +02:00
Kai Bao
266f6f2df5 adding computePropertiesForWellConnectionPressures to StandardWells
tested with flow. Not sure how other flow siblings work.
2016-04-14 16:05:18 +02:00
Pål Grønås Drange
77fc26475b Using new EclipseState API, made ->s into .s 2016-04-12 14:47:50 +02:00
Kai Bao
23ba5fa398 removing the StandardWells definition inside BlackoilModelBase
and some other tiny cleaning up.
2016-04-07 10:45:13 +02:00
Kai Bao
84cc1ed81d correcting the determination of wells_active_. 2016-04-06 14:36:51 +02:00
Kai Bao
9972dae32a updating for the comments.
implement wells(), localWellsActive() and wellsActive() for the
BlackoilModelBase and its derived classed.
2016-04-06 12:54:01 +02:00
Kai Bao
4ad5d81296 fixing wrong codes from the rebase process and cleanup. 2016-04-06 12:54:01 +02:00
Kai Bao
8a52dd743b making StandardWells a simple class. 2016-04-06 12:54:01 +02:00
Kai Bao
3947ff5b1d moving localWellsActive and wellsActive to StandardWells
maybe later it can be something general for different types of wells.
2016-04-06 12:54:01 +02:00
Kai Bao
23288ce2e5 fixing the compilation after updated with master branch. 2016-04-06 12:54:01 +02:00
Kai Bao
bef4b8c077 moving the wellOps to the StandardWells class. 2016-04-06 12:54:01 +02:00
Kai Bao
8367eaacb3 first attempt to introduce StandardWells struct.
To replace the const Wells struct in BlackoilModelBase.
Only testing with Flow for the moment. Will update other Flow siblings
later.
2016-04-06 12:54:00 +02:00
Tor Harald Sandve
764d8a1c3f Remove leftovers from a merge process going wrong 2016-04-05 09:03:22 +02:00
Tor Harald Sandve
89e540cb2c Pass solutionState as first parameter
output parameters go last...
2016-04-05 08:57:07 +02:00
Tor Harald Sandve
9cd0383d36 Factor out computation of properties for well connection pressures
Computation of properties used in computeConnectionPressureDelta
is factored out to computePropertiesForWellConnectionPressures
The motivation is to be able to use a modified version of
computePropertiesForWellConnectionPressures in the solvent model
2016-04-05 08:57:07 +02:00
Tor Harald Sandve
7b81facfb0 Make use of extractWellPerfProperties to avoid code duplication
The following changes are done in order to remove the duplicated code in
assemble().
- extractWellPerfProperties takes SolutionState as input (only used in
the solvent model)
- the computation of effective parameters is moved to computeAccum()
With these changes the solvent model can use assemble() from the base
model.
2016-04-05 08:53:09 +02:00
Tor Harald Sandve
bd81bda57b Remove well_perforation_pressure_diffs fr WellStateFullyImplicitBlackoil
- Calculate the well perforatino pressure difference based on bhp and
perforation pressures instead of storing it in
WellStateFullyImplicitBlackoil
2016-04-04 08:35:59 +02:00
Tor Harald Sandve
30bd24f2fe Compute well potentials
The well potentials are caculated based on the well rates and pressure
drawdown at every time step. They are used to calculate default guide
rates used in group controlled wells.

well_perforation_pressure_diffs is stored in
WellStateFullyImplicitBlackoil as it is needed in the well potential
calculations.
2016-04-01 14:58:46 +02:00
Atgeirr Flø Rasmussen
b5c216f4f3 Merge pull request #621 from totto82/fix_lrat
Bugfix. Fix setting initial rates in updateWellControls
2016-03-31 14:33:33 +02:00
Joakim Hove
18c07d5d66 Replaced SimulatorState -> SimulationDataContainer 2016-03-29 10:48:36 +02:00
Tor Harald Sandve
d91831b971 Avoid comparsion of floating point numbers 2016-03-18 14:30:47 +01:00
Tor Harald Sandve
94aa360fe6 Bugfix. Fix setting initial rates in updateWellControls
- The initial rates are only set to target values for single phase
producers (orat, wrat, grat).
- For injectors compi is used to determine the initial target rates.
2016-03-18 13:16:23 +01:00
Atgeirr Flø Rasmussen
b0b42d7dc7 Add missing initializer for 'singlePrecision'. 2016-02-29 11:17:54 +01:00
Jørgen Kvalsvik
6ae1613765 Add missing opm-parser headers
opm-parser pull #695
https://github.com/OPM/opm-parser/pull/695
2016-02-26 11:56:44 +01:00
Robert Kloefkorn
2eebf73e1a computeWellFlux: use operator -= when possible. 2016-02-16 10:25:57 +01:00
Robert Kloefkorn
37e49a62c8 BlackoilModelBase: use single precision for solver when dt < 20 days. 2016-02-12 12:14:02 +01:00
Robert Kloefkorn
4111797822 BlackoilModelBase: added parameter singlePrecision and print residual to large at right
place.
2016-02-12 12:14:02 +01:00
Tor Harald Sandve
dee96db6b2 Cleaning and adding comments 2016-02-12 10:42:26 +01:00
Tor Harald Sandve
c85f10046c Density and viscosity as inputs instead of computed in computeMassFlux
Density and viscosity are given as input instead of calculated inside
computeMassFlux. This allow for modifying the properties prior to
calling computeMassFlux which avoids code duplication in the solvent
implementation.
2016-02-12 10:42:26 +01:00
Atgeirr Flø Rasmussen
2505183887 Improve threshold pressure mismatch error message. 2015-12-28 09:22:53 +01:00
Atgeirr Flø Rasmussen
bd82e5ade9 Merge pull request #554 from totto82/nnc_thpress
NNC and threshold pressure
2015-12-14 11:33:30 +01:00
Markus Blatt
afc3ad3522 Guard access of well variable with asImpl().localWellsActive()
Since PR #541 the arrays cq_s, mob_perfcells, and b_perfcells are
empty if there are no wells in the domain of the process. This
caused segementation faults at various places where we compute
on the wells. With this commit we now guard this places using
asImpl().localWellsActive() and only using the array if the call
returns true.
2015-12-09 15:18:03 +01:00
Tor Harald Sandve
e3393c5ee9 Handle combination of threshold_pressure and nnc
The nncs threshold pressures are calculated and appended to the face
threshold pressures
2015-12-08 11:03:05 +01:00
Tor Harald Sandve
99ddc46318 Store the nncs in geoprops 2015-12-08 10:38:58 +01:00
Kai Bao
0022bb8465 adding one missing #pragma line resulting from rebasing conflicts. 2015-12-01 00:06:46 +01:00
Atgeirr Flø Rasmussen
a40d93a170 Comment out changes to residual output. 2015-12-01 00:06:46 +01:00
Atgeirr Flø Rasmussen
61cccfebf8 Refactor updatState() to use numWellVars().
This allows us to use the base version of updateState().
2015-12-01 00:06:45 +01:00
Kai Bao
fcd31d74ac restoring the original wellstate when solveWelleq fails. 2015-12-01 00:06:45 +01:00
Atgeirr Flø Rasmussen
233a275191 Made the solveWellEq() method return if it converged.
Also use this to avoid updating if not converged in the
multi-segment version.
2015-12-01 00:06:45 +01:00
Kai Bao
b6ede37ca3 WIP for fixing the solveWellEq running for ms wells.
refactoring needs to be done to finish it.
2015-12-01 00:06:45 +01:00
Kai Bao
c8fbb0b80d clearning up some comments and debugging output 2015-12-01 00:06:45 +01:00
Atgeirr Flø Rasmussen
e82828527c Make some methods const.
The methods are: computeWellFlux(), updatePerfPhaseRatesAndPressures()
and extractWellPerfProperties().
2015-12-01 00:06:45 +01:00
Kai Bao
50938effc4 output the well equation residual. 2015-12-01 00:06:45 +01:00
Kai Bao
7d11b49732 re-organizing the output.
no functional change.
2015-12-01 00:06:44 +01:00
Atgeirr Flø Rasmussen
4dd8536afa Make multi-segment model use Base::addWellContribution...() method.
Also make assemble() more similar to base version, using the
extractWellPerfProperties() member from Base.

To do this it was necessary to change the well_cells member of the
WellOps to be correct for the multi-segment wells (since they may
have different perforation order for some wells).
2015-12-01 00:06:44 +01:00
Atgeirr Flø Rasmussen
44f36c45cf Add well_cells to WellOps to avoid recreating. 2015-12-01 00:06:44 +01:00
Atgeirr Flø Rasmussen
920eeed3b2 Improve assemble() with new method extractWellPerfProperties(). 2015-12-01 00:06:44 +01:00
Atgeirr Flø Rasmussen
e6a81fca83 Make convergence methods work for multi-segment wells.
The convergenceReduction() method no longer takes a number-of-wells argument,
instead it infers the number of well fluxes to check from the size of the
well_flux_eq member of the residual.

After this, a custom getConvergence() method is no longer required for the
multi-segment well model.
2015-12-01 00:06:44 +01:00
Atgeirr Flø Rasmussen
1c4f4c646d Add asImpl() to some method calls.
This enables those methods (mostly well related) to be used polymorphically.
2015-12-01 00:06:44 +01:00
Kai Bao
504dc45de2 some information output
for debugging puropose.
2015-12-01 00:06:44 +01:00
Kai Bao
8c522ccc34 correcting a bug in pressure initialization in WellStateMultiSegment
for the pressure of top segment and peforations.
2015-12-01 00:06:44 +01:00
Kai Bao
02b187e14c friend class BlackoilModelBas in BlackoilMultiSegmentModel
and adding asImp() when using variableWellStateInitials and
variableWellStateInitials.
2015-12-01 00:06:43 +01:00
Kai Bao
76be27a64c recovering BlackoilModelBase BlackoilModelBase_impl
to be the same with the master branch.
The multisegment part should be in a new model.
2015-12-01 00:06:42 +01:00
Kai Bao
d2728fbfc6 chaning the naming of the member functions of WellStateMultiSegment
segPressures   -> segPress
perfPressures  -> perPress
to keep consist with the WellState
2015-12-01 00:06:42 +01:00
Kai Bao
1788f5c1b3 changing ADB::M to be Eigen::SparseMatrix<double> 2015-12-01 00:06:42 +01:00
Kai Bao
07709c52c6 a wIP version. 2015-12-01 00:06:42 +01:00
Atgeirr Flø Rasmussen
9275070bad Honor the min_iter parameter.
This also required the minIter() accessor to be made public,
so made all of the remaining accessors public.
2015-11-24 16:09:01 +01:00
Atgeirr Flø Rasmussen
a06892a070 Add asImpl() to method calls.
This is needed by derived models.
2015-11-19 14:39:49 +01:00
Bård Skaflestad
022bd6b8fe Merge pull request #536 from atgeirr/refactor-nonlinear
Refactor nonlinear solver
2015-11-18 11:47:43 +01:00
Atgeirr Flø Rasmussen
2a0051655c Merge pull request #520 from totto82/surface_dens
Support for non-constant surface densities
2015-11-13 11:40:30 +01:00
Atgeirr Flø Rasmussen
29a1a891d2 Make nonlinearIteration() the only interface to the model.
This means that details such as calling assemble(), solveJacobianSystem(),
updateState() etc. are now left to the model class. This will make it easier
to create new model classes with different behaviour (such as sequential models).
2015-11-12 17:47:18 +01:00
Robert Kloefkorn
ab12d95273 relativeChange: brackets for if statement. 2015-11-10 10:07:57 -07:00
Robert Kloefkorn
ebf61ed1bd added docu. 2015-11-10 10:05:06 -07:00
Robert Kloefkorn
31aa0544e7 computeTimeError --> relativeChange. 2015-11-10 10:00:04 -07:00
Robert Kloefkorn
77f9977ca8 BlackOilModelBase: revision of adaptive time stepping such that time error is computed
by model.
2015-11-10 09:53:25 -07:00
Tor Harald Sandve
a47c9add9b Change interface of surfaceDensity()
Add phaseIdx as input and return array of n density values for the
phase. And adapt the usage accordingly.
2015-11-10 14:54:49 +01:00
Tor Harald Sandve
a46b64adcd Support for non constant surface densities
The surface density function returns one value pr cell to allow for non
constant surface densities.
2015-11-10 12:49:19 +01:00
Markus Blatt
1916c8d35a Prevent copying the porevolume when checking for convergence.
As it is just used to compute the tempV value there is no need to
copy it to a new vector. With commit we use a reference to
geo.poreVolume() instead to prevent the copy.
2015-10-29 16:12:54 +01:00
Markus Blatt
e555cd45f1 Correctly compute the scaling factor for the equations in parallel.
When running parallel one cannot use Eigen::Array::mean() for this
as the it is just a local part of the complete array. With this commit
we correctly compute the number of global cells in the grid and use this
together with a parallel reduction to compute a global mean value.
2015-10-27 01:58:16 +01:00
Markus Blatt
ba9f227a5b Cater for wells null pointer
In the rare occasion that there are no wells int the model the wells_ pointer in
BlackoilModelBase class is a null pointer. Therefore we need to test whether it is
null and only process well information if it is not.

This problem was reintroduced with PR #460 and gets fixed by this
one. No we can run the equilibrium examples without wells again.
Sorry for the inconvenience.
2015-10-22 16:28:18 +02:00
Atgeirr Flø Rasmussen
98a3d1675a Merge pull request #454 from babrodtk/openpm_experiment
Parallel assembly (partial)
2015-10-19 15:32:50 +02:00
Tor Harald Sandve
16140c54fc Update comment
Cases with wells with no flow where crossflow is banned is handled in
the parser by shutting these wells. They will never be seen by the
simulator.
2015-10-19 08:17:52 +02:00
Tor Harald Sandve
1772a8c257 Handle allowCrossFlow flags from the input deck 2015-10-19 08:15:21 +02:00
Tor Harald Sandve
3f089b10d8 Add support for banning crossflow in the well equations 2015-10-19 08:15:21 +02:00
Andreas Lauser
72b0cb2c3e use the error macros from opm-common 2015-10-08 12:08:28 +02:00
Tor Harald Sandve
8b8ca200d6 Use implemented computeWellConnectionPressures() 2015-10-06 10:40:18 +02:00
Tor Harald Sandve
6106d560ba Compute matbal_scale for the solvent model
The material balance scaling is extended to the solvent model
The gas value is used as default and an updateEquationsScaling() method
is added.

Minor modifications is done to the BlackoilModelBase.hpp and
BlackoilModelBase_impl.hpp in order to re-use code from the base case.
2015-10-06 10:40:18 +02:00
Tor Harald Sandve
7bdd91d78f Allow for different surface densities in well perforations
The surface density input in well_perforation_densities() in
WellDensitySegmented.hpp is changed from one value pr. phase to one
value pr phase and perforation. This allow for different densities in
different perforation. The test is changed accordingly.
2015-10-06 10:38:36 +02:00
babrodtk
1d6f12e870 Added OMP pragmas 2015-10-02 10:37:08 +02:00
Atgeirr Flø Rasmussen
39a0766b8c Refactor MPI version of convergenceReduction(). 2015-10-01 11:05:35 +02:00
Atgeirr Flø Rasmussen
d29ee6967c Also refactor getWellConvergence() like getConvergence(). 2015-09-30 15:20:04 +02:00
Atgeirr Flø Rasmussen
dcb78877eb Separate phase and material concepts. 2015-09-30 14:44:50 +02:00
Atgeirr Flø Rasmussen
01f7e48693 Implement numPhases() by phase_name_.size().
This makes it easier for derived models to add a phase.
2015-09-30 13:46:57 +02:00