Commit Graph

8542 Commits

Author SHA1 Message Date
Markus Blatt
5be027348a Fix buggy interplay of parallel exceptions and communication.
There cannot happen any collective blocking communication within a
parallel try-catch clause if exceptions might be thrown before the
communication. The communication has to either be reached by all
processes or no processes.
2021-09-24 10:17:13 +02:00
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
Markus Blatt
3cda8a2fdb Added missing parallel try-catch clause for updatePrimaryIntensities.
As Problem::updatePrimaryIntensities might throw we need to do this
to prevent dealocks in parallel run in case problem occurs.
2021-09-24 09:25:44 +02:00
Markus Blatt
a927f8e23b Unify parallel try-catch clauses with Macros and catch everything.
Not a big fan of Macros but here at least they seem ot be the only
option. The problem is that the catch clauses must all catch the same
exceptions that have a entry in ExceptionType, because they might be
nested. In addition we did not have a catch all clause, which is added
now and is needed in case a called method throws an unexpected exception.
2021-09-24 09:25:44 +02:00
Bård Skaflestad
1dc3832966
Merge pull request #3540 from hakonhagland/python_set_sched
Initialize blackoil simulator from Opm::Schedule shared with Python.
2021-09-23 13:32:31 +02:00
Håkon Hægland
7a394df43f Include <stdexcept> header to use std::logic_error()
And some minor stylistic changes.
2021-09-23 13:13:23 +02:00
Håkon Hægland
4c5245196b Changed calling convention for shared pointers.
Expect non-reference type shared pointers arguments instead of references
to shared pointer. This will make it clear to the caller that the called
function is making a copy of the pointer for its own use and not trying
to modify the original pointer of the caller.
2021-09-22 23:49:13 +02:00
Joakim Hove
f581208fa0 Load Action state from restart file 2021-09-22 12:43:10 +02:00
Joakim Hove
a11e3222bd
Merge pull request #3534 from joakim-hove/use-single-well-state
Use single well state
2021-09-22 12:35:15 +02:00
Tor Harald Sandve
b294ea5d8b
Merge pull request #3490 from totto82/targUpdate
Update well rates from target during well/group control update
2021-09-22 12:26:29 +02:00
Tor Harald Sandve
a18e3f4136
Merge pull request #3541 from totto82/updateGPmaint
update gpmain before not after timestep
2021-09-22 10:42:11 +02:00
Håkon Hægland
5ad65c70ee Initialize blackoil simulator from schedule shared with Python.
Adds a new constructor to Main.hpp that takes shared pointers to Deck,
EclipseState, Schedule, and SummaryConfig. This makes it possible to
share these variables with Python without worrying about lifetime issues
of the underlying C++ objects. For example, a Python script can first
create an opm.io.schedule.Schedule object which is modified from Python.
Then, assume the same Python script creates an
opm.simulators.BlackOilSimulator which is initialized with the same
schedule object. Since the underlying C++ object is a shared pointer,
the Schedule object in Python may go out of scope (get deleted by Python)
without having the C++ schedule object being deleted. And the Python
BlackOilSimulator may continue to be used after the Python Schedule object
has been deleted since it still has a valid C++ schedule object.
2021-09-21 15:52:59 +02:00
Tor Harald Sandve
2f86231b8d
Merge pull request #3531 from totto82/aquctAndCo2Store
support aquct and co2store
2021-09-21 14:17:58 +02:00
Tor Harald Sandve
eb4997a011 update gpmain before not after timestep 2021-09-21 14:03:35 +02:00
Joakim Hove
b2ac3eaa59
Merge pull request #3535 from totto82/storePrevWellTestState
add well_test_state to WGState
2021-09-21 11:44:58 +02:00
Joakim Hove
30bd1d6314
Merge pull request #3537 from totto82/openWellWtest
update status after WTEST
2021-09-21 11:42:22 +02:00
Tor Harald Sandve
50cf80910b support aquct and co2store 2021-09-21 11:08:10 +02:00
Tor Harald Sandve
cebe557b15
Merge pull request #3536 from totto82/scalarMobIPR
use getMobilityScalar in updateIPR
2021-09-21 11:05:50 +02:00
Tor Harald Sandve
a650b529d1 commit WGstate after shut well from outside 2021-09-21 11:05:03 +02:00
Tor Harald Sandve
30592c7593 update status after WTEST 2021-09-21 10:32:56 +02:00
Tor Harald Sandve
21942f0cc2 use getMobilityScalar in updateIPR 2021-09-21 09:50:20 +02:00
Tor Harald Sandve
6fa9c05985 add well_test_state to WGState to be able to access last valid wellTestState 2021-09-21 09:30:02 +02:00
Tor Harald Sandve
c6660f0aa2 only update when control is changed 2021-09-21 08:53:25 +02:00
Tor Harald Sandve
9db6b2b946 handle unoperable wells
set potentials and rates to zero
2021-09-21 08:53:25 +02:00
Tor Harald Sandve
dc4436961f update well rates from target 2021-09-21 08:53:25 +02:00
Joakim Hove
0472bc3bf2 Remove unused argument 2021-09-20 11:45:24 +02:00
Joakim Hove
5531120411 Use SingleWellState argument instead of full WellState 2021-09-20 11:45:24 +02:00
Joakim Hove
357540bfca Create Action::State external to the vanguard 2021-09-19 10:17:58 +02:00
Bård Skaflestad
a8078ed695
Merge pull request #3528 from blattms/parallel-throw-untabulated
bugfix: Detect exception during beginReportStep in parallel & abort
2021-09-15 22:41:04 +02:00
Bård Skaflestad
90520f248f
Merge pull request #3527 from totto82/fixNupcol
pass updated well rates totarget reduction not the nupcol ones
2021-09-15 21:44:14 +02:00
Markus Blatt
b056557f57 bugfix: Detect exception during beginReportStep in parallel a. abort
Previously, exceptions happening at this stage have deadlocked
flow. E.g.  UniformTabulated2DFunction in opm-material throws
a NumericalIssue if the values passed are outside the tabulated
reason. This function is e.g. called in 2-phase CO2-storage cases
during BlackoilModel::initializeWellState

BTW: This is only the first step as it is not very user friendly that
a simulation aborts at this (late) stage.
2021-09-15 20:50:49 +02:00
Tor Harald Sandve
bd066d9300
Merge pull request #3524 from totto82/speedUpPot
Do not iterate inside computeBhpFromThp in MSW
2021-09-15 12:44:52 +02:00
Tor Harald Sandve
dd454063d4 pass updated well rates totarget reduction not the nupcol ones + cleanup 2021-09-15 09:47:31 +02:00
Tor Harald Sandve
8e9a43c29b
Merge pull request #3512 from totto82/relaxStw
add option for relaxed convergence for stw
2021-09-15 07:56:12 +02:00
Bård Skaflestad
1dc9cf755e
Merge pull request #3492 from blattms/dune-2.8
Fixes and removes deprecation warnings for Dune 2.8
2021-09-14 21:11:25 +02:00
Tor Harald Sandve
81d9a8c178 add option for relaxed convergence for stw 2021-09-14 14:32:14 +02:00
Tor Harald Sandve
49dfe1006f cleanup 2021-09-13 15:11:38 +02:00
Tor Harald Sandve
43a858ef25 rename computeBhpFromThpPotential to computeBhpFromThpIterations in std wells 2021-09-13 14:07:21 +02:00
Tor Harald Sandve
c8a59946e3 avoid iter in computeBhpFromThp 2021-09-13 14:01:56 +02:00
Tor Harald Sandve
a799c6fc8c
Merge pull request #3522 from totto82/scalarPerfRate
make scalar version of computePerfRate for MSW
2021-09-13 13:39:47 +02:00
Markus Blatt
c84b55c452 Fixes ILU for Dune 2.8
We got compile errors like:

/home/build/opm-simulators/opm/simulators/linalg/FlexibleSolver1.cpp:24:1:   required from here
/usr/include/dune/istl/ilu.hh:140:29: error: 'double' is not a class, struct, or union type

without this patch.
Hence we use the new internal ILU functions if available.
2021-09-13 12:25:49 +02:00
Tor Harald Sandve
bc1bc90504
Merge pull request #3520 from totto82/fixAssertGaslift
oil target may be limited by LRAT as well
2021-09-13 11:32:43 +02:00
Tor Harald Sandve
09cf878649
Merge pull request #3521 from totto82/avoidAvg
only compute fip avg pressure when gpmaint
2021-09-13 11:32:24 +02:00
Tor Harald Sandve
972a832d65 make scalar version of computePerfRate 2021-09-13 09:36:16 +02:00
Joakim Hove
53755bcfa6
Merge pull request #3515 from joakim-hove/add-parser-argument
Add Parser argument to restart loader
2021-09-10 16:27:56 +02:00
Tor Harald Sandve
f203c2106e only compute fip avg pressure when gpmaint 2021-09-10 15:49:02 +02:00
Tor Harald Sandve
305de4016e oil target may be limited by LRAT as well 2021-09-10 13:19:07 +02:00
Bård Skaflestad
e866f1f705
Merge pull request #3516 from akva2/drop_using_statements
Drop using statements
2021-09-09 16:00:24 +02:00
Joakim Hove
eeab23ebab Add Parser argument to restart loader 2021-09-09 15:08:14 +02:00
Atgeirr Flø Rasmussen
d1bfd48b6e Add missing include for unordered_map. 2021-09-09 12:17:54 +02:00