Commit Graph

302 Commits

Author SHA1 Message Date
Andreas Lauser
dee67a7a94 adapt to the simplifications of the blackoil PVT API in opm-material 2015-09-29 14:47:23 +02:00
Andreas Lauser
a28b2bcd76 ebos: make sure that the initial well condition is only written to the summary file once
before, it could have been written multiple times if the first time
step of the simulation failed and the timestep was repeated with a
smaller step size.
2015-09-22 13:23:39 +02:00
Andreas Lauser
e77cad793b re-order the attributes of EclPeacemanWell and init them in the ctor
re-ordering the attributes avoids some padding for EclPeacemanWell
objects and -- more importantly -- makes their ordering slightly more
logical.

initializing them avoids a valgrind complaint when writing the initial
condition to the ECL summary file.
2015-09-22 13:20:42 +02:00
Robert Kloefkorn
324b764a96 EclEquilInitializer: adjust to BlackoilPropertiesFromDeck changes from opm-core. 2015-09-17 12:47:31 +02:00
Robert Kloefkorn
f6b3bbc386 CartesianIndexMapper: use the CartesianIndexMapper to applied the mapping from the
Cartesian coordinate to the flat index and vice versa.
2015-09-10 16:01:53 +02:00
Andreas Lauser
58aeddf431 ebos: write the ECL summary for the initial condition and shift all consecutive report steps
this brings the SPE1 and SPE9 graphs quite a bit closer to those of flow/eclipse.
2015-09-10 15:37:28 +02:00
Robert Kloefkorn
dc8101a692 Merge remote-tracking branch 'upstream/master' into PR/ewoms-can-use-dune-fem 2015-09-10 15:08:14 +02:00
Andreas Lauser
d82f5be347 ebos: allow initial time step sizes shorter than the initial episode size 2015-09-07 14:05:03 +02:00
Andreas Lauser
53b48b2838 black-oil: fix some stupid errors with vaporized oil
obviously if the switching variable is interpreted as x_g^O, the gas
phase is present, because in this case it is the only phase. Also,
when the oil phase appears, the gas saturation is 1-Sw, not 1. (the
last issue only happened in the vaporized case because the switch
variable would never get the meaning of "oil component's mole fraction
in the gas phase".)
2015-09-04 14:06:29 +02:00
Andreas Lauser
95c482521a ebos: add support for initialization using the EQUIL keyword
so far, it uses the machinery of opm-core for this.
2015-09-04 14:04:45 +02:00
Andreas Lauser
5ce716f1a8 ebos: fix the fallout of the recent introduction of TableManager 2015-09-03 00:30:19 +02:00
Robert Kloefkorn
8700a9533c Merge remote-tracking branch 'upstream/master' into PR/ewoms-can-use-dune-fem 2015-09-01 12:40:19 +02:00
Robert Kloefkorn
67836d69ca make compile after update in opm-material. 2015-08-07 11:17:58 +02:00
Robert Kloefkorn
c15fedf7a1 Merge remote-tracking branch 'andlaus/grid_adaptivity_fixes' into PR/ewoms-can-use-dune-fem 2015-08-06 18:07:35 +02:00
Andreas Lauser
fd26efa140 ebos: adapt to the Cartesian -> compressed cells change of EclMaterialLawManager 2015-08-06 17:03:34 +02:00
Andreas Lauser
bfcd132553 ebos: adapt to the Cartesian -> compressed cells change of EclMaterialLawManager 2015-08-06 17:01:58 +02:00
Robert Kloefkorn
2c12246698 remove warning due to unintialized values. 2015-08-06 14:55:49 +02:00
Robert Kloefkorn
b7996ff5fe added operator << and >> for __float128. 2015-08-06 13:11:51 +02:00
Robert Kloefkorn
0baae605f2 Merge branch 'master' into dune-fem-adaptivity 2015-08-05 18:17:18 +02:00
Andreas Lauser
48f889d980 fix the calculation of which ROCK region is to be used
the mistake was that I assumed that this was specified by the ROCKTAB
keyword; It is not! (It's specified via PVTNUM or SATNUM depending on
the value of the third item of the ROCKOPTS keyword. for now, let's
only use the PVTNUM.)
2015-07-29 13:41:12 +02:00
Andreas Lauser
8c843dd05b ebos: hook up the ECL hysteresis stuff
this required to add a new callback to the problem which is invoked
when the initial solution has been applied.
2015-07-28 17:24:44 +02:00
Andreas Lauser
cc420cc06d ebos: use opm-material's new and shiny EclMaterialLawManager 2015-07-28 17:24:40 +02:00
Andreas Lauser
93478f1dd5 ebos: do not write the oil saturation pressure by default
some decks use inconsistent PVT data which results in negative saturation
pressure for oil with very little gas. (looking at you, Norne!)
2015-07-03 13:18:50 +02:00
Andreas Lauser
a80ce504b5 EclPeacemanWell: handle shut wells better
if a well is shut and thus no DOFs get added, it should work anyway...
2015-07-03 13:18:50 +02:00
Andreas Lauser
c67169ebd3 improve the doxygen documentation
the module hierarchy should now even be mildly useful.
2015-06-19 13:20:19 +02:00
Andreas Lauser
b974549f05 re-add the emacs and vim modelines to all source files
this makes things easier and IMHO these two lines do not cause any
disturbance.
2015-06-18 13:43:59 +02:00
Andreas Lauser
aab270e5b5 ebos: get rid of some Dune 2.4 deprecation warnings
they haven't been noticed yet because CpGrid does not feature them.
2015-06-14 21:35:02 +02:00
Andreas Lauser
c41f642414 ebos: use automatic differentiation instead of finite differences 2015-05-21 16:18:47 +02:00
Andreas Lauser
2428ff41ae make ebos AD aware 2015-05-21 16:18:45 +02:00
Andreas Lauser
eba7e06bed use the infrastructural code using its new locations 2015-04-28 13:38:28 +02:00
Andreas Lauser
12dc2c6447 ebos: fix the restart mechanism 2015-04-08 14:25:23 +02:00
Andreas Lauser
cc76f3bedc fix annoying sign comparison warnings 2015-04-02 12:13:39 +02:00
Andreas Lauser
b0ffc1f573 ecl problem: determine whether the simulation is finished in endEpisode()
it used to be in beginEpisode(), but this caused endEpisode() to be
called twice at the end of the simulation.
2015-04-01 14:33:54 +02:00
Andreas Lauser
15ad669d5d ebos: make linearization recycling potentially useful
the missing piece was determining if the wells have changed between
report steps. This patch adds a simple way to determine this, but it
relies on low-level properties of opm-parser it does not
guarantee. (concretely, these details are that the same well objects
are returned in the same order if nothing changes. Since IMO this is a
pretty reasonable assumption, we use this approach instead of a more
complicated one until opm-parser provides a "change determination API"
for wells...)

note that this patch may increase the number of iterations required
for the simulation because the linear system of equations which is
solved in the first iteration of a time step actually corresponds to
the second to last solution of the previous time step. This means that
that linearization recycling usually only works well if the tolerance
of the Newton-Raphson solver is "sufficiently" low. ("sufficiently"
means that the linearization errors made due to using the "wrong"
solution for the first iteration can be neglected compared to the
differences because of the change of the solution in this iteration.)

therefore, use this feature at your own risk...
2015-04-01 14:18:41 +02:00
Andreas Lauser
a6740b83ee ebos: disable partial relinearization by default again
it often causes quite substantial headaches but does unfortunately not
normally lead to a substantial speedup. (at least not in its current
incarnation.)
2015-03-05 14:46:18 +01:00
Andreas Lauser
909a045261 simulator, ebos: fix episode handling with a focus on deserialization
in particular, the ECL schedule is now used to determine the episode
length on restart. this code is still quite shaky IMO, although it
seems to work for now.
2015-03-05 14:45:31 +01:00
Andreas Lauser
7e89de026a ebos: make it possible write restart files
this means eWoms restart files (*.ers), not Eclipse (*.UNRST) ones. by
default, the restart file writing interval is once every 2^24-1
timesteps, i.e. it is effectively disabled. The interval is settable
using the '--restart-writing-interval=$N" command line parameter,
though.
2015-03-04 16:13:12 +01:00
Andreas Lauser
df12c481c3 ebos: implement support for the PORV keyword 2015-02-13 14:01:07 +01:00
Andreas Lauser
7a729e73ac ECL peaceman well: replace std::unordered_map by std::map
say 99.95% of all time: premature optimization is the root of all
evil.

in this case it turned out that iterating over a std::unordered_map is
very slow and that this is a quite common operation in
ebos. Fortunately the fix for this problem is very simple: use the
tree-based std::map instead of the hash function based
std::unordered_map.

on SPE9 this yielded a performance improvement of about 10% on my
machine...
2015-02-12 12:26:03 +01:00
Andreas Lauser
a28affc2cf ebos: hack around opm-parser's shitty default handling once more
*arg*
2015-02-12 12:09:46 +01:00
Andreas Lauser
a128ee223a ebos: take capillary pressure into account for the initial condition
strangely enough, this leads to slightly worse convergence for SPE9 on
my machine (19.0 vs. 16.8 seconds runtime). Nevertheless this is
definitely "more correct" from a physical point of view.
2015-02-11 17:02:51 +01:00
Andreas Lauser
d6aeda60e9 black oil model: implement vaporized oil
and also allow the oil phase to be immiscible with gas.
2015-02-11 16:55:38 +01:00
Andreas Lauser
e69cd50d42 fix partial relinearization if auxiliary equations are present
this allows to re-enable it by default for ebos.
2015-02-06 13:49:53 +01:00
Andreas Lauser
2516d89349 ECL summary files: write out production and injection totals 2015-02-05 17:38:21 +01:00
Andreas Lauser
48b4e4ccc5 ebos: disable writing restart files
this means eWoms specific .ers files, Eclipse restart files are still
written for visualization purposes.
2015-02-05 16:14:07 +01:00
Andreas Lauser
d83cd2b797 ebos: use the TEMPI keyword to set the temperatures of the cells
this allows to use a "pseudo thermal" simulator, i.e. each cell may
exhibit a different temperature, but energy is not conserved over
time...
2015-02-05 16:14:07 +01:00
Andreas Lauser
a320dd0fa7 adapt to the new PVT API of the black oil fluid system 2015-02-05 16:14:07 +01:00
Andreas Lauser
c7fe719825 adapt to the recent removal of Well::getRefDepthDefaulted() in opm-parser 2015-01-27 22:40:49 +01:00
Andreas Lauser
0e973f7108 ECL transmissibility: implement region multipliers
a.k.a. support the MULTREGT keyword. This has not really been tested
and may contain bugs...
2015-01-27 13:17:01 +01:00
Andreas Lauser
019c272a11 ECL grid manager: make the cartesianCellId() method take an integer and return one
the fact that this is implemented via a std::vector<int> is an
implementation detail which should not be visible to the outside of
this class.
2015-01-27 13:15:06 +01:00