Simulator programs and utilities for automatic differentiation.
Go to file
Markus Blatt f64230e462 Remove parallel try-catch from prepareTimeStep because of nestedness.
Although not declared as such, prepareTimeStep seems to be an internal
function (despite usage in a test) and hence error control can be done
in code calling it.

There was the following problem with the try-catch approach taken:
The calling site `BlackoilWellModel::assemble` looked like this:

```
OPM_BEGIN_PARALLEL_TRY_CATCH();
{
    if (iterationIdx == 0) {
        calculateExplicitQuantities(local_deferredLogger); // no parallel try-catch
        prepareTimeStep(local_deferredLogger); //includes parallel try-catch
    }
    updateWellControls(local_deferredLogger, /* check group controls */ true);

    // Set the well primary variables based on the value of well solutions
    initPrimaryVariablesEvaluation();

    maybeDoGasLiftOptimize(local_deferredLogger);
    assembleWellEq(dt, local_deferredLogger);
}
OPM_END_PARALLEL_TRY_CATCH_LOG(local_deferredLogger, "assemble() failed: ",
                               terminal_output_);
```

calculateExplicitQuantities had no parallel-try-catch clause inside,
but prepareTimeStep had one.
Unfortunately, calculateExplicitQuantities might throw (on some
processors). In that case non-throwing processors will try to trigger a
collective communication (to check for errors) in
prepareTimeStep. While the one throwing will move to the
OPM_END_PARALLEL_TRY_CATCH_LOG macro at the end and also trigger a different
collective communication. Booom, we have a deadlock.

With this patch there is no (nested parallel)-try-catch clause in the
functions called. (And if an exception is thrown in prepareTimeStep, it
will be logged as being an assemble failure).

The other option would have been to add parallel-try-catch clauses
to all functions called. That would have created a lot more
synchronization points limiting scalability even further.
2021-09-24 10:15:28 +02:00
debian disable python tests in debian packaging 2020-11-18 10:55:46 +01:00
doc/doxygen Fix minor issues pointed out by bska. 2013-09-23 13:02:56 +02:00
ebos Added missing parallel try-catch clause for updatePrimaryIntensities. 2021-09-24 09:25:44 +02:00
examples changed: make bhp template hidden and use explicit instantations 2021-05-31 11:42:29 +02:00
external/fmtlib Add inline fmtlib code in source tree 2020-09-28 11:01:13 +02:00
flow Don't increase shared_ptrs use_count when forwarding. 2021-09-23 10:56:18 +02:00
jenkins fixed: do not make root dir 2020-02-28 14:42:16 +01:00
opm Remove parallel try-catch from prepareTimeStep because of nestedness. 2021-09-24 10:15:28 +02:00
python Include <stdexcept> header to use std::logic_error() 2021-09-23 13:13:23 +02:00
redhat fix redhat packaging 2021-06-30 15:05:43 +02:00
tests Merge pull request #3538 from joakim-hove/actionx-wconinje 2021-09-22 10:56:21 +02:00
.clang-format Add flexible solver and preconditioner infrastructure. 2019-06-03 11:42:30 +02:00
.gitignore Add build/ to .gitignore 2020-04-22 13:22:54 +02:00
CHANGELOG.md Added entries to changelog concerning 2019.10 release 2019-10-29 13:27:07 +01:00
CMakeLists_files.cmake split RateConverter 2021-09-07 08:53:09 +02:00
CMakeLists.txt Merge pull request #3429 from akva2/remove_plain 2021-08-19 14:11:27 +02:00
compareECLFiles.cmake Add regression testing of case ACTIONX_WCONINJE 2021-09-21 10:58:48 +02:00
CTestConfig.cmake cdash: update dropsite 2015-11-11 16:50:25 +01:00
dune.module Bump version number 2021-04-27 10:01:32 +02:00
LICENSE Add LICENSE File 2021-03-30 10:41:18 +02:00
opm-simulators-prereqs.cmake Search for VexCL and create an imported target. 2021-07-07 16:24:52 +02:00
README.md Remove obsolete information from the README 2020-03-13 11:23:35 +01:00

Open Porous Media Simulators and Automatic Differentiation Library

CONTENT

opm-simulators contains simulator programs for porous media flow. The most important (and tested) part is the Flow reservoir simulator, which is a fully implicit black-oil simulator that also supports solvent and polymer options. It is built using automatic differentiation, using the local AD class Evaluation from opm-material.

LICENSE

The library is distributed under the GNU General Public License, version 3 or later (GPLv3+).

PLATFORMS

The opm-simulators module is designed to run on Linux platforms. It is also regularly run on Mac OS X. No efforts have been made to ensure that the code will compile and run on windows platforms.

REQUIREMENTS

opm-simulators requires several other OPM modules, see http://opm-project.org/?page_id=274. In addition, opm-simulators requires Dune and some other software to be available, for details see https://opm-project.org/?page_id=239.

DOWNLOADING

For a read-only download: git clone git://github.com/OPM/opm-simulators.git

If you want to contribute, fork OPM/opm-simulators on github.

BUILDING

See build instructions at http://opm-project.org/?page_id=36

DOCUMENTATION

Efforts have been made to document the code with Doxygen. In order to build the documentation, enter the command

make doc

in the topmost directory.

REPORTING ISSUES

Issues can be reported in the Git issue tracker online at:

https://github.com/OPM/opm-simulators/issues

To help diagnose build errors, please provide a link to a build log together with the issue description.

You can capture such a log from the build using the `script' utility, e.g.:

LOGFILE=$(date +%Y%m%d-%H%M-)build.log ;
cmake -E cmake_echo_color --cyan --bold "Log file: $LOGFILE" ;
script -q $LOGFILE -c 'cmake ../opm-core -DCMAKE_BUILD_TYPE=Debug' &&
script -q $LOGFILE -a -c 'ionice nice make -j 4 -l 3' ||
cat CMakeCache.txt CMakeFiles/CMake*.log >> $LOGFILE

The resulting file can be uploaded to for instance gist.github.com.