Commit Graph
100 Commits
Author SHA1 Message Date
Andreas Lauser 589db89b09 Merge pull request #1810 from totto82/rockcomp
Rockcomp
2019-05-08 09:59:09 +02:00
Andreas Lauser dd74fe1027 document all methods of EclThresholdPressure 2019-05-03 14:07:15 +02:00
Andreas Lauser d329547463 EclProblem: clean up the time management code
- when an episode/report step is over, the next is started by endEpisode()
- the problem does not deal with updating the simulation time anymore
- rename `episodeIdx` in to `reportStepIdx` the 'EclWriter' because
  this variable is -- and always has been -- the report step number
  used by some parts of `opm-output`'s ECL writing code (the report
  step number is equivalent to the episode index plus 1). IMO, the
  output and parser code should be made more consistent in regard of
  whether it expects 0-based or 1-based indices, but this is a story
  for another day.
2019-05-03 14:07:15 +02:00
Andreas Lauser 17a4092c82 EclProblem: introduce a simulator auxiliary variable in most most cases
in most instances, this reduces the visual clutter a bit...
2019-05-03 14:07:15 +02:00
Andreas Lauser 6e351fef2e EclProblem: limit the limitTimeStepSize() to ebos
also, fix a few mistakes in that function.
2019-05-03 14:07:15 +02:00
Andreas Lauser b9995f697f well models: remove superfluous arguments
concretely this means the `eclState` and `schedule` arguments to the
`init()` and `beginTimeStep()` methods.
2019-05-03 14:07:15 +02:00
Andreas Lauser 7868e420c0 EclProblem: print "checking conservativeness" messages in debug mode 2019-05-03 14:06:41 +02:00
Andreas Lauser 0be0de38cb EclProblem: ensure that eclWriter_ is always present
before patch, setting the `EnableEclOutput` parameter to `false`
resulted in the `eclWriter_` not to be allocated; yet it was used in
some places. this resulted in segfaults.
2019-05-03 14:06:41 +02:00
Andreas Lauser d9be3393d7 equil test decks: make them feature one time step
the output writing code has issues if no time steps are specified...
2019-05-03 14:06:41 +02:00
Andreas Lauser 701eb0edd3 ebos: never write restart files using the ad-hoc format
medium term, the output and restart file writing should be refactored:
the simulator does not need to be aware of this because it can be
accomplised in the problem's endTimeStep() method.
2019-05-03 14:06:41 +02:00
Andreas Lauser 794b043a28 ebos: use the non-multisegmented well model by default
this avoids regressions for decks that use well testing and makes
`ebos` work as expected if UMFPACK is not available, but obviously it
will not work for decks that use multisegment wells in earnest.

`flow` is unaffected by this because it does not use this type tag.
2019-05-02 13:54:40 +02:00
Andreas Lauser f5db6e8e1c Merge pull request #1811 from atgeirr/bump-version
Update version to 2019.10-pre.
2019-05-02 09:55:56 +02:00
Andreas Lauser 4805e9fe05 ebos: run the diagnostics code for relative permeabilities
maybe this needs to be reverted since the code in question can
cause the simulation to abort inadvertently.

As usual, `flow` is unaffected because this functionality is only
called in experimental mode and flow calls it itself.
2019-04-05 16:21:22 +02:00
Andreas Lauser 67a8283000 ebos: call Opm::checkDeck() after parsing
this catches at least some common issues with ECL decks.
2019-04-05 16:21:22 +02:00
Andreas Lauser 6f1018f11a also pass the parseContext and errorGuard to Opm::checkDeck() 2019-04-04 18:13:36 +02:00
Andreas Lauser 11439bca80 ebos: some small fixes to EclProblem::checkDeckCompatibility_() 2019-03-28 13:12:29 +01:00
Andreas Lauser 7b967d0498 ebos: implement experimental support for THPRESFT
as usual, `flow` is unaffected.
2019-03-28 13:09:44 +01:00
Andreas Lauser cd681c6445 ebos: make its core headers self sufficient
this is part of the release maintainance. in this context "core
headers" means the ones which do not include the well model headers,
and only those which are concerned with non-exotic functionality,
e.g., the PolyhedralGrid and ALUGrid vanguards are not changed.
2019-03-26 13:17:54 +01:00
Andreas Lauser cdb2c6312a ebos: add a stub implementation for API tracking
the only thing which this does so far is to introduce the respective
property and `ebos` will abort the run if the deck requests API tracking.

As usual for experimental features, `flow` is unaffected.
2019-03-22 15:04:07 +01:00
Andreas Lauser 0b0eb6df5e ebos: add some checks to make sure that the simulator produces what the deck specifies
this should significantly reduce surprising behavior for users. since
this is an experimental feature, `flow` is unaffected.
2019-03-22 13:38:58 +01:00
Andreas Lauser f1d3be27a7 ISTLSolverEbos: fix valgrind complaint that isIORank_ is not initialized
like most of the rest of the code, we now simply assume that rank 0
does all printing.
2019-03-21 12:35:26 +01:00
Andreas Lauser 1b8124cc31 EclProblem: remove the initialTemperature_ array
this was not used since the fluid states that correspond to the
initial condition are kept permanently.
2019-03-21 12:35:10 +01:00
Andreas Lauser 685a193558 make the branch self contained
Concretely this avoids having to patch eWoms by adding a generic
`Opm::transposeDenseMatrix()` template function instead of relying on
the dense matrix class to provide a `transpose()` method.
2019-03-19 15:09:19 +01:00
Andreas Lauser fe62b4fe5e add an ebos variant which uses completely different numbering for phases and components
for some reason, this yields quite different results for norne than
the default variant, e.g. when comparing PRESSURE, we get

```
> compareECL -k PRESSURE -t UNRST ebos/NORNE_ATW2013 ebos_altidx/NORNE_ATW2013 1 1e-4
Comparing 'ebos/NORNE_ATW2013' to 'ebos_altidx/NORNE_ATW2013'.
Comparing PRESSURE...
Occurrence in first file    = 9
Occurrence in second file   = 9
Value index                 = 0
(first value, second value) = (254.195, 253.191)

Program threw an exception: [/home/and/src/opm-common/build-cmake/fake-src/examples/test_util/EclRegressionTest.cpp:161] Deviations exceed tolerances.
The absolute deviation is 1.00311, and the tolerance limit is 1.
The relative deviation is 0.00394624, and the tolerance limit is 0.0001.
```

IMO this is a bug, but the reasons for it are currently unknown.
2019-03-13 11:14:22 +01:00
Andreas Lauser fb70fe2ba3 add but do not build disabled targets
this simply excludes the disabled simulators from `make all` while
`make flow` will continue to work even if the cmake variable
`BUILD_FLOW` was set to `OFF`. This requires a small patch for
opm-common.
2019-03-07 12:45:15 +01:00
Andreas Lauser d8148d281f add cmake build switches to enable/disable flow and/or ebos 2019-03-06 11:54:21 +01:00
Andreas Lauser 383009e031 add some ebos variants
these variants should cover most of the common use cases. That said,
there are no plans to provide simulators for combinations of blackoil
extensions or a "multiplexing" simulator like `flow`: If someone is
interested in e.g., an oil-water simulator with polymer and energy
enabled, a separate self-compiled executable should be added locally.
2019-03-05 18:30:35 +01:00
Andreas Lauser a812041184 ebos: implement partial elimination of systematic mass defects
the idea is to compensate the residual of the final solution of a time
step by means of an opposing source term in the next time step.

This patch has been developed as a joint project with [at]totto82 and
[at]osae.

(`flow` is unaffected by this because for now drift compensation is an
experimental feature and thus disabled within the production
simulator.)
2019-03-05 11:32:11 +01:00
Andreas Lauser a5863a1f36 CMakeLists.txt: remove unecessary condition
thanks to [at]akva2 for catching this.
2019-03-04 15:42:57 +01:00
Andreas Lauser f4435a5de9 fix the default build system
for some reason, libraries produced for a module are not linked to the
executables of the module by the default build system. so far this did
not matter for `ebos` but with this PR, it starts using stuff from
`libopmsimulators`...
2019-03-04 15:38:07 +01:00
Andreas Lauser d9c67ef551 ebos: use the same well model, aquifer model and linear solver as flow
This enables `ebos` to run Norne and other non-trivial data
sets. While at it, adapt the tolerances by `ebos`.

This patch only affects the research simulator, i.e. `flow` is
unaffected by it.
2019-03-04 14:23:59 +01:00
Andreas Lauser d7e74e7c4e fix review comment by [at]totto82 2019-03-04 13:59:50 +01:00
Andreas Lauser c37bc1cf38 flow: hide a few unused eWoms parameters
these parameters where introduced with support for the TUNIING keyword
in `ebos`. since `flow` implements its own time stepping these
parameters are unused and should thus be hidden from view in it.
2019-03-04 13:58:38 +01:00
Andreas Lauser 21f5c1fbd3 ISTLSolverEbos: throw NumericalIssue instead of LinearSolverProblem
the former is caught by `ebos`, while the latter isn't. Alternatively,
this can be fixed by deriving `LinearSolverProblem` from
`NumericalIssue`, if preferred.
2019-03-04 13:58:38 +01:00
Andreas Lauser b60305082d EclBaseProblem: fix the parent type tags for the EclBaseProblem tag in the non-default cases
this bitrot a bit because it was never seen by the compiler. (I still
did not check if `ebos` compiles and works if `CpGrid` is replaced by
dune-alugrid or `PolyhedralGrid`.)
2019-03-04 13:58:38 +01:00
Andreas Lauser 3ca8b8f285 ebos: improve the messages printed during the run
the convergence behaviour can now be understood and the report step
information is printed, too. This does not affect `flow`, becase it
implements its own newton and time stepping routines.
2019-03-04 13:58:38 +01:00
Andreas Lauser 8e5f1279f3 EclWellManager: do not use parallelism
the speedup gained by parallelism here are simply not worth the
headaches.

note that `flow` is unaffected by this because it uses
`Opm::BlackoilWellModel`.
2019-03-04 13:58:38 +01:00
Andreas Lauser 43dd9928b4 EclNewtonMethod: Fix convergence criterion if the residual is volumetric 2019-03-04 13:58:38 +01:00
Andreas Lauser 0a9d6a0760 include missing header files
this makes the well model and the equil initializer header more autonomous.
2019-03-04 13:58:38 +01:00
Andreas Lauser f36680bf3a EclProblem: Rename NewtonRawTolerance to NewtonTolerance
this property is not used by `flow` because `flow` implements its own
Newton method, but it not renaming the property prevents `flow` from
building.
2019-03-01 10:48:06 +01:00
Andreas Lauser ef956da9b5 make the build system happy about the imported ebos binary
also, a few data files changed their location.
2019-02-27 22:34:10 +01:00
Andreas Lauser 6753e9ca31 aquifers: add missing serialize() and deserialize() methods
the original purpose of those is to provide a checkpoint/restart
mechanism using an ad-hoc file format. They might also be useful for
implementing the adjoint functionality, though.
2019-02-25 15:04:16 +01:00
Andreas Lauser 46e41228b5 flow: call getConvergence() on the raw reservoir residual
i.e., the residual without the Schur complement for the wells being
applied. This hopefully fixes the issue pointed out by
[at]totto82.
2019-02-25 11:24:30 +01:00
Andreas Lauser f5e7ca9bb3 well model: fix application of Schur complements
using the eWoms API for wells, the Schur compliment was not applied at
all. If `BlackOilWellModel::linearize()` was made non-trivial, the
Schur complement was applied twice in `flow`. With this patch, we only
apply this using the eWoms API (in
`BlackOilWellModel::linearize()`). I could not observe a signficant
effect on the convergence behaviour of `flow` for the cases which I
tested (Norne and realization 5 of Model 2).
2019-02-25 10:51:30 +01:00
Andreas Lauser c9dfad2a3d prefix the ECL timestep tuning parameters with 'Ecl' 2019-02-20 12:47:12 +01:00
Andreas Lauser 148728973f fix the output of the size of the next time step if timestepping is done externaly 2019-02-20 12:47:12 +01:00
Andreas Lauser b1a526e5c2 ebos: remove unused deprecated function 2019-02-20 12:47:12 +01:00
Andreas Lauser a34a8d6b9e ebos: implement partial support for the TUNING keyword
this only implements the parameters that are currently supported by
`flow`.
2019-02-20 12:47:12 +01:00
Andreas Lauser d1fa4e3248 do not print the new core-ebos time step tuning parameters in the usage message
they are not used by `flow`.
2019-02-20 10:51:24 +01:00
Andreas Lauser c80e4c40c4 fix missing semicolon 2019-02-19 11:04:40 +01:00
Andreas Lauser 10d1d5c9a7 introduce an "experimental mode"
this is a compile time switch with the intention to be able to more
easily turn experimental features that are not yet considered to be
production quality on and off. DUNE has a similar mechanism (i.e., the
`DUNE_GRID_EXPERIMENTAL_GRID_EXTENSIONS` macro), but it relies on
the preprocessor.

For now, the property does not have any effect.
2019-02-19 10:22:34 +01:00
Andreas Lauser 7165ae246a ebos: clarify startup message
this hopefully makes the purpose of `ebos` clear in its
description. this prose should be interpreted as "if you use ebos in
production, you are on your own and you should only expect a very
limited amount of support (or even sympathy) if something breaks".
2019-02-19 10:07:01 +01:00
Andreas Lauser 5b032a6a28 fix the issues found by [at]tosa82 in his review
in particular the missing synchronization after restarts was very
nasty to find. thanks a ton for pointing this out!

also, IIRC changing DR[SV]DT in the schedule section has been working
properly for a while, so the comment which stated the opposite is
removed as well.
2019-02-19 09:07:12 +01:00
Andreas Lauser 65d44a055f EclProblem: fix a few minor style issues 2019-02-18 15:30:28 +01:00
Andreas Lauser 427741fe84 ebos: Fix restart from ECL files
Some time loop stuff was missing in the doobly-doo, the init() method
of the well model was not called and there was the slightly deeper
issue that the initial solutions where not calculated on restarts
which breaks everything that relies on them. (at the moment, that's
everything which is related to non-trivial boundary contitions.)
2019-02-18 15:29:27 +01:00
Andreas Lauser 3cd1252079 ebos: remove the code to calculate a mass conservative initial condtion if the specified condition is inconsistent
As far as I can see, this was always set to `false` anyway.
2019-02-15 13:45:23 +01:00
Andreas Lauser 0423676305 ebos: remove the DisableWells property
the purpose of this was a hack to be able to manipulate the Jacobian
matrix directly from outside code. Since `flow` has been converted to
the eWoms wells API, this is not required anymore.
2019-02-15 13:39:58 +01:00
Andreas Lauser 51b24d33d5 EclWriter: remove obsolete writeOutput() overload
this has been unused for any simulator for a while. the only code
which called it was the ECL output test, but this one could be easily
ported.
2019-02-06 12:21:08 +01:00
Andreas Lauser dc1b92521a ebos: make it possible to account for external setup costs 2019-02-06 12:21:08 +01:00
Andreas Lauser 777fd61342 flow: account for external setup costs 2019-02-05 16:52:58 +01:00
Andreas Lauser 4ecda15b11 coding style fixes for the black-oil model and more style fixes for ebos 2019-02-01 17:33:30 +01:00
Andreas Lauser 7f27c4fb4b fix coding style of the ECL tracer model 2019-02-01 17:33:30 +01:00
Andreas Lauser 9afa62b78b fix some minor coding style issues in Ewoms::EclOutputBlackOilModule 2019-02-01 17:33:30 +01:00
Andreas Lauser 8b89e6ed97 unify coding style of Ewoms::AluCartesianIndexMapper 2019-02-01 17:33:30 +01:00
Andreas Lauser c600d807b6 use the eWoms coding style conventions for Ewoms::TracerVdTable 2019-02-01 17:33:30 +01:00
Andreas Lauser a9359602fc fix some minor coding style inconsistencies in EclWriter 2019-02-01 17:33:30 +01:00
Andreas Lauser 80e04aa8b4 fix style issues in EclTransmissibility and make the editNnc handling a bit simpler
the new editNNC code might be slightly slower, but I doubt that the
difference is even measureable for real decks.
2019-02-01 17:33:30 +01:00
Andreas Lauser 0aa9a2c6b8 make the coding style of femcpgridcompat.hh consistent with the rest of eWoms/ebos 2019-02-01 17:33:30 +01:00
Andreas Lauser c379823dec Really adapt to the new linear solver API used by eWoms
I tested #1712 without deriving the `EclFlowProblem` type tag from
`FlowIstlSolver`, and it worked because the linear solver was still
`Opm::ISTLSolverEbos` because the linear solver is set via the
`LinearSolverSplice` a few lines down.

This time, I verified that the
`Ewoms::Linear::ParallelBiCGStabSolverBackend` was used if the
offending line was commented out. also, Norne worked fine with the
default solver as long as the Schur complement for the wells was done
explicitly.

Finally, the naming of the eWoms API is a bit inconsistent
(`setMatrix()` vs. `setResidual()`). any opinions here? I'm fine with
whatever.
2019-01-30 15:26:39 +01:00
Andreas Lauser 2563a58db8 adapt to the new preparation procedure of ewoms linear solvers 2019-01-18 09:05:24 +01:00
Andreas Lauser 89a6afdba1 do not try to re-register the EclStrictParsing parameter
this is already done by the eWoms side and for consistency reasons,
parameters may only be registered once.
2019-01-14 09:59:14 +01:00
Andreas Lauser c2377e7b10 EclNewtonMethod: make the exponent of the tolerance scaling settable by a parameter
the parameter is called `EclNewtonSumToleranceExponent`. if it is set
to 1, the specified tolerance will be used directly. (this is not
desireable in the general case though, because at the same result
quality, the sum error for large reservoirs can be larger than for
small ones.)
2019-01-11 11:24:20 +01:00
Andreas Lauser 0492796e85 address review comments 2019-01-11 11:21:23 +01:00
Andreas Lauser ec391f529d make the ebos-Newton specific parameters setable from the command line
also, tweak them a bit: increase the sum tolerance before scaling to
1e-3 and reduce the default number of strict iterations to 4.
2019-01-11 11:21:23 +01:00
Andreas Lauser c08f0008ad EclNewtonMethod: tweak the parameters a bit 2019-01-11 11:21:23 +01:00
Andreas Lauser 85a9b75076 ebos: allow larger errors for larger reservoirs
albeit, we scale the error only to the cube root of the pore
volume. the rationale is that the same amount of mass can get lost
"along" a line for each timestep.

maybe it would be a good idea to do something like this for time step
size as well because taking multiple small time steps currently allows
a much larger error in the result than doing it in one big step.
2019-01-11 11:21:23 +01:00
Andreas Lauser 07e1b4ecde ebos: introduce an EclNewtonMethod
this calculates the error and convergence differently from the
standard Newton method.
2019-01-11 11:21:23 +01:00
Andreas Lauser 18e64d0e7e fix some masochistic compiler warnings for the GCC 9 pre-release
the flags which I used are
```
-pedantic \
-Wall \
-Wextra \
-Wformat-nonliteral \
-Wcast-align
-Wpointer-arith \
-Wmissing-declarations \
-Wcast-qual \
-Wshadow
-Wwrite-strings \
-Wchar-subscripts \
-Wredundant-decls \
-fstrict-overflow \
-O3 \
-march=native \
-DNDEBUG=1
```

note that some heavy filtering is not the worst idea because DUNE is
far from not emiting any warnings with these flags.

Also, there were some pesky warnings in test_ecl_output which I don't
know how to fix:

```
tests/test_ecl_output.cc:218:73: warning: missing initializer for member ‘Opm::data::Connection::effective_Kh’ [-Wmissing-field-initializers]
```
2019-01-09 09:34:26 +01:00
Andreas Lauser 5d581bab7e ebos: fix explicit init for twophase cases
since OPM/opm-material#310 has been merged, data for deactivated
phases is not stored anymore and can thus no longer be accessed/set.

this fixes OPM/opm-simulators#1686
2019-01-08 11:18:17 +01:00
Andreas Lauser af0d02b03d use enableEnergy consistently
thanks to [at]totto82 for noticing.
2018-12-21 10:07:58 +01:00
Andreas Lauser 0a1fa8de81 make it possible to explicitly compute the storage term of the previous time step
some weird hacks (hello, DR[SV]DT) cause a change of the storage term
in the first Newton-Raphson iteration compared to the solution of the
previous time level. In order to use the correct values, one thus must
explicitly recompute the storage term for the previous time step
instead of just reusing the result of the first Newton-Raphson
iteration of the current time step.
2018-12-20 15:52:06 +01:00
Andreas Lauser 868f447f20 use the common API opm-material for functions
the way to get the result of an evaluation is by return value, i.e.,

 z = fn.eval(x, y);

not by passing a separate argument to the eval() function like

 fn.eval(x, y, z);

the `XYTabulated2DFunction` used the latter approach causing an API
inconsistency with all other tabulation classes in
opm-material. OPM/opm-material#319 fixes that but requires this mop-up
as a consequence.
2018-12-20 10:46:22 +01:00
Andreas Lauser 6a29318adf ebos: only write out temperature in thermal runs 2018-12-17 11:37:47 +01:00
Andreas Lauser bf602c621b flow: use eclipseState.simulatorConfig().isThermal() to determine whether energy ought to be conserved
this is the new and hip way to query this information from the ECL
parser.
2018-11-16 14:49:17 +01:00
Andreas Lauser f58f5d3c7a MPIUtilities.hpp: include required header file 2018-11-14 14:36:11 +01:00
Andreas Lauser d5089076d9 ISTLSolver: add now-necessary include 2018-11-14 14:35:52 +01:00
Andreas Lauser f9104ca3d7 adapt to the eWoms interface for abstracting sparse matrices 2018-11-14 14:35:52 +01:00
Andreas Lauser 46641d5ace move the MatrixBlock class and assorted code to its own header
this avoids recompiles if something changes in ewoms because
ISTLSolver.hpp included ISTLSolverEbos.hpp . also, it is better style.
2018-11-14 14:35:52 +01:00
Andreas Lauser 781825121d some cleanups 2018-11-12 12:48:33 +01:00
Andreas Lauser a5493919da ecl base vanguard: make the schedule and summaryConfig objects user-replaceable
thanks to [at]atgeirr for the suggestion.
2018-11-08 11:32:56 +01:00
Andreas Lauser e5fb6cf83c flow: do not pass the schedule and summaryConfig objects anymore
they are now always created internally by the vanguard.
2018-11-07 12:34:54 +01:00
Andreas Lauser 868c4b1cc5 ebos: clean up the mess that is the schedule and summaryConfig objects a bit
IMO the simulator should not be in the business of managing low-level
parser objects in the first place, because that's what EclipseState is
supposed to do?!

anyway, since these objects are not needed to decide which simulator
to use, they are now always managed internally by the vanguard, i.e.,
setExternalDeck() does not take them anymore.
2018-11-07 12:31:20 +01:00
Andreas Lauser 848a65c1c8 BlackoilAquiferModel: move the function bodies to the _impl.hpp file
... to make it more consistent with the existing code.
2018-11-01 15:19:33 +01:00
Andreas Lauser 6a929ca797 try to fix subtle lifetime bug
it is possible that a dune entity vanishes if its iterator gets out of
scope. Whether this is a problem or not seems to be be highly depend
on the used configuration...
2018-11-01 15:13:28 +01:00
Andreas Lauser 46b52448aa fix a few review comments 2018-10-31 15:20:56 +01:00
Andreas Lauser 339c76bcac make aquifers work again, quite a few cleanups 2018-10-31 15:20:56 +01:00
Andreas Lauser 805eec9566 make the CT aquifiers code do something 2018-10-31 15:20:56 +01:00
Andreas Lauser 7c81dbdaab let the aquifiers be managed by core ebos
also, clean them up a bit:
- do not use the intensive quantities cache directly anymore. (i.e.,
  that code should now work if the IQ cache is disabled)
- do not fiddle with the global Jacobian matrix and residual vector
  directly. Instead, implement the water fluxes to the reservoir as a
  source term like wells.

one thing that did not become fully clear to me is if each aquifer
ought to be assumed to be in contact with the whole reservoir or just
a few cells on the boundary. The current implementation goes down the
former path, while, without any deeper knowledge, I would rather
suppose that the latter applies. maybe my understanding of this is
just too limited, though.
2018-10-31 15:20:56 +01:00
Andreas Lauser b04c82a64e well model: fix valgrind complaints if either oil or gas are disabled 2018-10-31 13:18:10 +01:00
Andreas Lauser ec898fa8c2 extend the aquifer model so that it can initialize itself
nothing is perfect on first try...
2018-10-30 11:22:26 +01:00