Commit Graph

302 Commits

Author SHA1 Message Date
Andreas Lauser
46071d5e82 ebos: avoid a few copies for opm-parser object
this is done by simply making these variables const references. these
were overlooked in the big opm-parser pointer-to-references-spree...
2016-12-16 18:45:43 +01:00
Andreas Lauser
a6191a2345 the new home of Valgrind.hpp is opm-common! 2016-12-14 12:38:12 +01:00
Andreas Lauser
fb8d984bf1 adapt to the move of quad.hh to opm-material 2016-12-14 12:38:12 +01:00
Andreas Lauser
e1d11da6d6 EclProblem: fix the type returned by the const version of materialLawManager()
it is supposed to a shared pointer to a constant object, not a
constant pointer to a mutable object...
2016-12-10 10:53:28 +01:00
Andreas Lauser
4b2156a071 ebos: update the PffGridVector for transmissibility after geologic events 2016-12-08 12:26:32 +01:00
Andreas Lauser
706e51f878 ebos: store the names wells that are disabled on the local process due to load balancing 2016-12-07 20:24:48 +01:00
Andreas Lauser
5067ce2f27 ebos: use the transmissibilities as edge weights for load balancing
this makes creating the grid a bit slower because the
transmissibilities need to be calculated twice: once for the
sequential grid and once for the distributed one. while corresponds to
the way `flow_legacy` does the load balancing and it should allow
better results, this does not seem to be the case for the Norne deck
if ZOLTAN is not available:

After loadbalancing process 3 has 4413 cells.
After loadbalancing process 2 has 12390 cells.
After loadbalancing process 0 has 13629 cells.
After loadbalancing process 1 has 21253 cells.

i.e., process 1 is responsible for almost 5 as many cells as process
3.
2016-12-07 20:24:48 +01:00
Andreas Lauser
a0481039db ebos: add the disabled well names kluge to the grid manager
this array is only non-empty for parallel runs.
2016-12-07 20:24:48 +01:00
Andreas Lauser
36c010c956 ebos: replace the opm-parser related pointers/smart pointers by references
this seems to be the spirit of the season. note that now the deck
object must be copied, but I suppose that copying it is pretty cheap.
2016-12-07 20:24:48 +01:00
Andreas Lauser
9460177f17 CollectDataToIoRank: don't require the elements of a dune grid to be traversed in consecutive order 2016-12-05 13:56:32 +01:00
Robert Kloefkorn
4921f7d817 When using matrialLawManager then elemIdx has to be used. 2016-12-05 13:47:04 +01:00
Robert Kloefkorn
e3286b3ec0 EclEquil: use std::vector to store mappings. 2016-12-02 18:55:27 +01:00
Robert Kloefkorn
e240cf8eae [bugfix] fix equil and grid mappings in initialization. 2016-12-02 18:54:14 +01:00
Robert Kloefkorn
deed854a20 [bugfix] fix global, distributed and local mappings. 2016-12-02 18:51:19 +01:00
Robert Kloefkorn
0062a0e18f [bugfix] use neighbor to check whether neighbor is present. 2016-12-02 18:51:19 +01:00
Jørgen Kvalsvik
3088068e37 Mini deck is reference, not pointer 2016-12-01 16:17:52 +01:00
Andreas Lauser
4a0832030c EclProblem: add docstrings for the materialLawManager() methods 2016-11-30 14:24:15 +01:00
Andreas Lauser
4ef6d5d1ce EclProblem: add a porosity(elemIdx) method
this is not a generic API but makes emulating legacy stuff which
requires the porosity quite a bit easier in flow_ebos.
2016-11-30 14:21:04 +01:00
Andreas Lauser
a3ddd2066b ebos: make it possible to easily disable SWATINIT
in flow_ebos, this code collides with the flow part.
2016-11-30 14:20:44 +01:00
Andreas Lauser
c4c00bdaaa implement two-phase blackoil simulations 2016-11-22 15:22:41 +01:00
Andreas Lauser
6cf1eab4f4 ebos: export the ECL material law manager
this allows external code (i.e., flow_ebos) to reuse it.
2016-11-22 14:08:07 +01:00
Andreas Lauser
431cebaa21 EclFluxModule: make sure that the upwind and downwind directions are set
before, they were undefined for phases which exhibited zero mobility
in both directions. since in this case the flux is zero (and thus the
upstream direction does not matter), the correctness is unaffected by
this patch. (still, I consider it to bug and valgrind also complained
about it.)
2016-11-17 19:48:07 +01:00
Andreas Lauser
a5e859e4c6 discretizations: no longer depend on the problem to provide the mappers
Dune entity mappers seem to be dirt-cheap to create so there is not
much point in jumping through hoops to avoid this...
2016-11-17 19:44:17 +01:00
Andreas Lauser
759c2dbdaa move all applications into their top-level directory
thanks to [at]akva2 for the suggestion.
2016-11-11 15:04:04 +01:00
Andreas Lauser
67c978fe75 fix most pedantic compiler warnings in the basic infrastructure
i.e., using clang 3.8 to compile the test suite with the following
flags:

```
-Weverything
-Wno-documentation
-Wno-documentation-unknown-command
-Wno-c++98-compat
-Wno-c++98-compat-pedantic
-Wno-undef
-Wno-padded
-Wno-global-constructors
-Wno-exit-time-destructors
-Wno-weak-vtables
-Wno-float-equal
```

should not produce any warnings anymore. In my opinion the only flag
which would produce beneficial warnings is -Wdocumentation. This has
not been fixed in this patch because writing documentation is left for
another day (or, more likely, year).

note that this patch consists of a heavy dose of the OPM_UNUSED macro
and plenty of static_casts (to fix signedness issues). Fixing the
singedness issues were quite a nightmare and the fact that the Dune
API is quite inconsistent in that regard was not exactly helpful. :/

Finally this patch includes quite a few formatting changes (e.g., all
occurences of 'T &t' should be changed to `T& t`) and some fixes for
minor issues which I've found during the excercise.

I've made sure that all unit tests the test suite still pass
successfully and I've made sure that flow_ebos still works for Norne
and that it did not regress w.r.t. performance.

(Note that this patch does not fix compiler warnings triggered `ebos`
and `flow_ebos` but only those caused by the basic infrastructure or
the unit tests.)

v2: fix the warnings that occur if the dune-localfunctions module is
    not available. thanks to [at]atgeirr for testing.
v3: fix dune 2.3 build issue
2016-11-09 14:54:22 +01:00
Andreas Lauser
f951947773 use accessor methods to access the value and derivatives of Evaluation objects 2016-10-30 22:41:13 +01:00
Andreas Lauser
775ac1900f ebos: fix stupid bug 2016-10-30 22:40:25 +01:00
Andreas Lauser
f8b09de3ca ebos: more Dune 2.3 fixes to make travis happy 2016-10-30 21:24:08 +01:00
Andreas Lauser
11f95f582e fix build
that was a case of semantically conflicting concurrent merges.
2016-10-30 20:12:35 +01:00
Andreas Lauser
22681c3610 ebos: try to make travis happy 2016-10-30 19:34:33 +01:00
Andreas Lauser
b31fb57636 implement explicit prefetching
the main part of this patch is actually an API change of
Ewoms::ThreadedEntityIterator to faciliate the change (since we should
prefetch the data for the element which is to be linarized after the
current one.)  Also, this patch is only an 80% solution: it would be
good if the cached intensive quantities of the model and the stencil
of an element could also be prefetched, but that's currently not
easily possible in a performant way because iterating over the
intersections of an element negates the performance gains obtained by
prefetching.
2016-10-30 18:54:44 +01:00
Andreas Lauser
db5eb4249e add a container for grid data with a prefetch-friendly memory layout
the class is called "PffGridVector", which is short for "PreFetch
Friendly Grid Vector" ("Vector" in the sense of std::vector). The idea
is to store the data in question for the complete stencil of all
elements which makes the memory access pattern of the simulation much
more localized. this approach has the downsides that much more memory
is required to represent the data (for cartesian 3D grids this means
about factor 8 more), and that data cannot easily be changed for an
individual degree of freedom (because it would require to change the
representations of all stencils which contain the DOF).

also, use this new class to store the transmissbility values of
ebos. it is pretty easy to extent the number of quantities stored this
way, but it seems like the performance of linearization stays flat or
is slightly worse if the PffGridVector is used for more quantities...
2016-10-30 18:48:06 +01:00
Andreas Lauser
2bedc2df3c EclFluxModule: fix bug in comment 2016-10-30 18:42:00 +01:00
Andreas Lauser
2e0a8323f3 ebos: change the signature of transmissibility()
we now pass the context plus the local element indices instead of the
global ones. this allows more flexibility in how that data is stored
internally.
2016-10-30 18:41:58 +01:00
Andreas Lauser
323e4f1570 ebos: use the PVTNUM grid property instead of the PVTNUM keyword
besides enabling support for the modifier keywords, this should also
be slightly faster (because no traversal of a binary is needed for
every element anymore.)
2016-10-30 11:23:23 +01:00
Andreas Lauser
70e55bf0ca add a stand alone copy of boost::alignment::aligned_allocator
unfortunately, this is necessary because
boost::alignment::aligned_allocator requires a fairly recent version
of boost (i.e., 1.56) while the oldest platform supported by OPM
(i.e., Ubuntu 14.04LTS) only ships boost 1.54. Anyway, I'm wondering
why there is no std:: version of this class in c++-2011...
2016-10-27 20:02:40 +02:00
Andreas Lauser
911abfd05b fix alignment issues
these occured with the AVX proof of concept: when a variable that is
used by an AVX instruction is not aligned at a 32-byte boundary, the
program receives a (very non-obvious) segfault. this patch gets around
this by using (the GCC specific?)  aligned_alloc() function and the
aligned_allocator from boost for heap objects
2016-10-27 19:06:48 +02:00
Andreas Lauser
d1b884f666 Merge pull request #78 from dr-robertk/PR/use-correct-cellcenterdepth
Use correct cellcenterdepth
2016-10-25 23:03:55 +02:00
Andreas Lauser
988b0e7361 ebos: shortcut flux calculation if the mobilities of both DOFs is zero
this implies a small speedup of the linearization stage.
2016-10-25 17:56:26 +02:00
Andreas Lauser
6fb838aad4 ebos: make the code which handles threshold pressure slightly faster
I don't really understand this, but I suppose the profiler does not
lie...
2016-10-25 17:56:26 +02:00
Robert Kloefkorn
26e5abf699 [bugfix] use DUNE compatible way of computing cell center depth. 2016-10-25 16:45:50 +02:00
Andreas Lauser
8784c81a4e ebos: precalculate the depth of the center of an element
turns out that this is quite slow in Dune::CpGrid.
2016-10-25 16:45:50 +02:00
Andreas Lauser
171ccb0926 ebos: fix "unused variable" warning when using optimized flags 2016-10-21 00:45:27 +02:00
Jørgen Kvalsvik
df9f59dd03 Update to shared_ptr-less parser interface. 2016-10-20 17:59:43 +02:00
Andreas Lauser
77b5bb3114 ebos: always call the loadBalance() method of the grid again
It was disabled because Dune::CpGrid::loadBalance() dropped all cells
which were disconnected from the main part of the grid. since the
problem was fixed in https://github.com/OPM/opm-grid/pull/245, let's
re-enable load balancing.
2016-10-20 17:13:28 +02:00
Andreas Lauser
c271daec01 ebos: add support for geology changes during the simulation
this code currently has the same limitations as the one in
opm-simulators: these geologic events may only change the porosity of
some cells or the values of the transmissibility, i.e., changes to the
grid topology are not possible.
2016-10-17 14:02:09 +02:00
Andreas Lauser
1196ac5937 ebos: fix a compiler warning about a missing case in a switch statement 2016-10-12 18:27:22 +02:00
Andreas Lauser
460f839a80 threshold presure defaults: only consider phases which exhibit a non-zero mobility
i.e., if a phase is not present in the upwind DOF, it should not be
considered. this handles things analogous to the opm-simulators
code. (which uses the residual saturation of the phase for the
decision, but fundamentally applies the same logic.)
2016-09-28 16:19:13 +02:00
Andreas Lauser
e21f0b964e threshold pressures: take advantage of the fact that opm-parser handles them symmetrically
i.e., thpres->hasRegionBarrier(i, j) == thpres->hasRegionBarrier(j, i)

this allows to simplify the code a bit.
2016-09-26 16:42:43 +02:00
Andreas Lauser
97eda5bb55 ECL threshold pressure: fix stupid copy and pasto
(in the code which calculates the default threshold pressure.)
2016-09-26 16:42:43 +02:00