Commit Graph

13437 Commits

Author SHA1 Message Date
Joakim Hove
cf340644b2 Add ParallelWellInfo member to SingleWellState 2021-09-28 21:42:57 +02:00
Joakim Hove
56afec81b4
Merge pull request #3548 from joakim-hove/broadcast-udq+action
Broadcast UDQState and Action state after restart loading
2021-09-28 19:31:53 +02:00
Bård Skaflestad
0b8778e432
Merge pull request #3547 from totto82/makeWTESTrobust
Make wtest more robust
2021-09-28 12:06:10 +02:00
Atgeirr Flø Rasmussen
e5c85e88ce
Merge pull request #3552 from fgfuchs/cuda_improvements
cusparsesolver wrong size and type in cols,rows fixed
2021-09-28 11:41:17 +02:00
Tor Harald Sandve
c790b14753 Make WTEST more robust
Only open wells that are solvable, operable and economical
2021-09-28 10:07:12 +02:00
Joakim Hove
8943e90e17 Broadcast UDQState and Action state after restart loading 2021-09-28 09:54:15 +02:00
Tor Harald Sandve
70f11a2129
Merge pull request #3554 from joakim-hove/do-glift-opt
Remove unused query/switch code for GLO - it is always on
2021-09-28 09:05:35 +02:00
Joakim Hove
ef12186d78 Remove unused query/switch code for GLO - it is always on 2021-09-27 14:11:54 +02:00
Franz Georg Fuchs
a0ccd1e754 cusparsesolver wrong size and type in cols,rows fixed 2021-09-27 13:53:26 +02:00
Joakim Hove
edb2c4abb2
Merge pull request #3549 from joakim-hove/serialize-set
Add serializer support for set - closely modelled after map
2021-09-27 13:47:15 +02:00
Markus Blatt
88ae5b5963
Merge pull request #3545 from blattms/fix-parallel-try-catch
[bugfix] Fix deadlocks because of parallel try-catch for some CO2 storage cases
2021-09-27 13:02:34 +02:00
Joakim Hove
064d134711 Add serialize test for UDQState 2021-09-25 11:51:59 +02:00
Joakim Hove
7c358b17df Add serialise test for Action::State 2021-09-24 18:55:54 +02:00
Joakim Hove
1b7ef65509 Add serializer support for set - closely modelled after map 2021-09-24 18:55:54 +02:00
Bård Skaflestad
b63a4ea3a3
Merge pull request #3546 from totto82/fixWSOL
updateWsolvent only after well container is created
2021-09-24 13:41:47 +02:00
Tor Harald Sandve
9381b0857b updateWsolvent only after well container is created 2021-09-24 12:09:02 +02:00
Markus Blatt
e0f7b082c1
Merge pull request #3542 from blattms/unordered_map-compressed2cartesian
Save space for cartesianToCompressed mapping.
2021-09-24 10:24:34 +02:00
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
16bbc338ab Don't increase shared_ptrs use_count when forwarding.
Use std::move() to avoid increasing the use count of std::shared_ptr
when forwarding them to the vanguard object.
2021-09-23 10:56:18 +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
Bård Skaflestad
95e64e86f6
Merge pull request #3543 from joakim-hove/load-action-state
Load Action state from restart file
2021-09-22 21:56:53 +02:00
Bård Skaflestad
512f4c95b1
Merge pull request #3532 from totto82/aqnumco2store
combine co2store and numerical aquifers
2021-09-22 21:42:29 +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
Joakim Hove
5fd7432e96
Merge pull request #3538 from joakim-hove/actionx-wconinje
Add regression testing of case ACTIONX_WCONINJE
2021-09-22 10:56:21 +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
Markus Blatt
33645cb4f6 Save space for cartesianToCompressed mapping.
For 10 Million cell problems my compute server (with 128 GB Ram)
starts to swap, when I use debugging tools in parallel runs. I assume
that this might get an issue for others, too.

Now we consistently use unordered_map for the mapping.
2021-09-22 10:23:50 +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
Joakim Hove
26e9ef37f5 Add regression testing of case ACTIONX_WCONINJE 2021-09-21 10:58:48 +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
e5de82473e
Merge pull request #3533 from joakim-hove/external-action-state
Create Action::State external to the vanguard
2021-09-20 19:01:30 +02:00
Joakim Hove
0472bc3bf2 Remove unused argument 2021-09-20 11:45:24 +02:00