Commit Graph

33 Commits

Author SHA1 Message Date
Tor Harald Sandve
739c0906ef Improvments in convergence for flow_ebos
- restrict pressure changes. Set default to 1.0 (this also effects flow)
- change default number of linear iterations to 150
- tell stabilized newton the residual occilates even if it occilates in
only one phase (this also effects flow)
- avoid problems realated to division on small numbers

Tested on SPE9, norne and Model 2 with significant improvments.
2016-11-14 13:26:38 +01:00
Robert Kloefkorn
11238b1997 [cleanup] Use class variables instead of creating new vectors inside the apply
method of StandardWellsDense.
2016-11-02 10:43:55 +01:00
Tor Harald Sandve
77d5c8fa38 Remove Eigen from StandardWellsDense 2016-11-01 14:27:05 +01:00
Tor Harald Sandve
f1a9b1f21b Remove unused file and #includes
removes StandardWellsDense_impl.hpp
2016-11-01 13:44:38 +01:00
Tor Harald Sandve
362968c315 New WellStateFullyImplicitBlackoilDense
The WellStateFullyImplicitBlackoil is reverted to master and all
extentions moved to WellStateFullyImplicitBlackoilDense
2016-11-01 13:44:38 +01:00
Andreas Lauser
a773fd4c85 use accessor methods to access the value and derivatives of Evaluation objects 2016-11-01 13:30:41 +01:00
Robert Kloefkorn
31724030c9 Merge branch 'frankenstein' into PR/remove-Eigen-from-BMEbos 2016-10-21 14:13:58 +02:00
Robert Kloefkorn
c8374a4b95 [cleanup] Remove Eigen from BlackoilModelEbos. 2016-10-21 13:26:48 +02:00
Andreas Lauser
6754bad00b Merge branch 'master' into frankenstein
* master:
  Update to shared_ptr-less parser interface.
2016-10-20 20:16:42 +02:00
Andreas Lauser
45f11d8820 StandardWellsDense: fix some valgrind complaints
note that I don't know if these changes are semantically correct (I
doubt it), but this patch fixes the valgrind complaints I saw for
SPE9_CP and on Norne.

Also, this makes the timing of flow_ebos for SPE9 determinisic between
runs: without this, I got some random time steps fail in a given run
and in the next run a completely different set of timesteps
failed. Since this was on the same same machine, without any
recompiles and no changes to the deck or any other input parameters, I
initially attributed the behavior to cosmic rays ;)

@totto82: could you have a thorough look on this?
2016-10-17 18:56:38 +02:00
Tor Harald Sandve
22f1df612b Allow crossflow if all perforations is crossflowing 2016-10-03 09:54:28 +02:00
Tor Harald Sandve
8e2657ce4d Some tuning in the Appleyard 2016-09-30 08:57:52 +02:00
Tor Harald Sandve
84c33e0e96 Add trivial well equation when there is no flow
Fixes case when all perforations in a well are crossflowing while
crossflow is not allowed
2016-09-30 08:57:52 +02:00
Andreas Lauser
6bc8080722 Merge remote-tracking branch 'totto82/frankenstein_mod' into frankenstein_merge_master
* totto82/frankenstein_mod:
  Avoid copying of matrices inside StandardWellsDense.
2016-09-15 11:48:24 +02:00
Andreas Lauser
5278b88e2e Merge remote-tracking branch 'remotes/totto82/frankenstein_mod' into frankenstein_merge_master
* remotes/totto82/frankenstein_mod:
  Fix seg-fault for cases without wells
  Some micro performance improvments and cleaning
  Add THP support in the denseAD well model
  Only solve the linear system when it is not converged.
  Revert changes to NewtonIterationBlackoilInterleaved.cpp
  add and use class wellModelMatrixAdapter
  Remove unused code and remove Eigen vectors
  New updateState
  Some cleaning and small changes
2016-09-14 15:03:17 +02:00
Andreas Lauser
4ecd6ca64a fix some serious screw-ups
almost all of them were caused by recent changes in the master
branch:

- there were methods added which depend on the types `V` and
`DataBlock`. these do not make much sense in the context of the
frankenstein simulator. Also, these types are defined globally for the
whole Opm namespace in `BlackoilModelBase_impl.hpp` (which should be
prosecuted as a fellony IMO)! Besides this, their names are useless;
'V' is the letter which comes after `U` in the alphabet and when it
comes to computers basically everything can be seen as a chunk of data
(i.e., a `DataBlock`).
- it seems like the new and shiny dense-AD based well model was never
compiled with assertations enabled, at least some asserts referenced
non-existing variables.
- the recent output-related API changes were pretty unfortunate
because they had the effect of tying the (sub-optimal, IMO) internal
structure of the model even closer to the output code: as far as I can
see, `rq` does only make sense if the model works *exactly* like
BlackoilModelBase and friends. (for flow_ebos, this could be
replicated, but first it would be another unnecessary conversion step
and second, most of the quantities in `rq` are of type `ADB` and much
of the "frankenstein" excercise is devoted to getting rid of these.) I
thus reverted back to an old version of the output code and created a
`frankenstein` branch in my personal `opm-output` github fork.
2016-09-13 23:58:59 +02:00
Robert Kloefkorn
a9663447c2 Avoid copying of matrices inside StandardWellsDense. 2016-09-13 23:07:38 +02:00
Tor Harald Sandve
cd749b3452 Fix seg-fault for cases without wells 2016-09-09 15:17:34 +02:00
Tor Harald Sandve
49f3306abe Some micro performance improvments and cleaning
-- The jacobian and residual in the reservoir is updated directly
-- The sparsity pattern are provided to the well matrices.
-- Some cleaning in updateWellState()
2016-09-09 14:58:54 +02:00
Tor Harald Sandve
3d86cc3668 Add THP support in the denseAD well model
Tested on a set of modified SPE1DECK with VFP for injectors and
producers
2016-09-09 11:33:34 +02:00
Tor Harald Sandve
746f9a56cc add and use class wellModelMatrixAdapter
The well contribution is substracted in the MatrixAdapter
i.e. Ax - BinvDCx
2016-09-07 14:37:48 +02:00
Tor Harald Sandve
a4dcc4b13d Remove unused code and remove Eigen vectors
-- isRS and phaseCondition is removed and hydroCarbonState in the state
is used instead
-- input of pressurediffs to computeHydrostaticCorrection() is changed
to double from Vector in WellHelpers.hpp
2016-09-07 12:25:54 +02:00
Tor Harald Sandve
83ff3271af New updateState
-- a new updateState is implemented based on dune vectors
-- the old is kept for comparision in this PR
-- the updateState is not identical.
Tested on spe1, spe9 and norne and it improves the convergence compares
to the old one.
2016-09-07 10:37:42 +02:00
Tor Harald Sandve
952ccf8338 Some cleaning and small changes
- unused code is removed
- the scaled normed is stored in residual_norm_history for usage in
stabilized newton
- number of linear iterations is outputted
- linear solver tolerance is reduced to 0.01
- make compute wellFlux local
- rewrite ADB::V to std::vector<double>
2016-09-06 13:52:43 +02:00
Andreas Lauser
1d2a5d7f1b fix the headers
remove the now unnecessary inclusion of
"NewtonIterationBlackoilInterleaved.cpp" (mind the .cpp extension!)
and include "dune/istl/solvers.hh" instead.
2016-08-28 15:48:18 +02:00
Robert Kloefkorn
b092b2504c make code compile and run. 2016-08-26 11:54:59 +02:00
Tor Harald Sandve
699a0ede01 Remove remaning usage of ADBs
-- the code is still kept for comparison
2016-08-26 10:55:09 +02:00
Tor Harald Sandve
190076f5da Temperary commit
-- works on SPE1 but not SPE9
-- if number of perforations are increased to 3 in SPE1 the same error
as in SPE9 occur.
2016-08-25 15:25:01 +02:00
Tor Harald Sandve
4bdf74eb11 Reorganize the wellModel
- All well-related stuff is moved to StandardWellsDense.hpp
- Some unused functions are removed from BlackoilModelEbos.hpp
2016-08-23 09:58:21 +02:00
Tor Harald Sandve
b023cb15a5 Reset wellcontrols from well_state 2016-08-19 13:50:27 +02:00
Tor Harald Sandve
49f478480d Remove usage of state in the model
1) The wellsolution is stored in wellVariables as a vector of DenseAD
objects. The wellVariables is computed from the wellstate  in
setWellVariables()
2) BHP and well fluxes are not stored directly but calculated based on
the wellVariables
3) The initial well accumulation term is stored as a vector of doubles.
4) addWellFluxEq() uses DenseAd flux and accumulation terms
5) computePropertiesForWellConnectionPressures() no longer uses state as
input. The wellstate is used to get the bhp pressure.
6) The current wellcontrol is set when updated in updateWellControls()
in order to use well_controls_get_current_type(wc) insted of
well_controls_iget_type(wc, currentIdx)

Tested on SPE1, SPE9 and Norne.
Effects the convergence but the results are identical.
2016-08-18 12:23:46 +02:00
Tor Harald Sandve
dec60a8bd8 The well model no uses the fluidState and fluidsystem from ebos
The well model is modified to use the fluidState and fluidsystem from
ebos. UpdateLegacyState() is no longer needed.
2016-08-18 12:23:46 +02:00
Tor Harald Sandve
5cd7468b51 Implement new well model
Start using the well model desribed in SPE 12259 "Enhancements to the
Strongly Coupled, Fully Implicit Well Model: Wellbore CrossFlow Modeling
and Collective Well Control"

The new well model uses three well primary variables: (the old one had
4)
1) bhp for rate controlled wells or total_rate for bhp controlled wells
2) flowing fraction of water Fw = g_w * Q_w / (g_w * Q_w + q_o * Q_o +
q_g + Q_g)
3) flowing fraction of gas  Fg = g_g * Q_g / (g_w * Q_w + q_o * Q_o +
q_g + Q_g)
where g_g = 0.01 and q_w = q_o = 1;

Note 1:
This is the starting point of implementing a well model using denseAD
The plan is to gradually remove Eigen from the well model and instead
use the fluidState object provided by the Ebos simulator
Note 2:
This is still work in progress and substantial cleaning and testing is
still needed.
Note 3: Runs SPE1, SPE9 and norne until 950 days.
2016-08-18 12:23:45 +02:00