[MPI] Handle exception during assembleWellEqWithoutIteration correctly

For this particular model WetGasPVT::saturationPressure did throw
because convergence in the newton solver is not reached in 20
iterations. Unfortunately, the exception was only seen on one MPI rank
and the others continued.

With this commit we communicate the problem and throw on all MPI
processes. Time step will be cut as a result.
This commit is contained in:
Markus Blatt 2023-12-07 15:41:35 +01:00
parent faad3a6ee5
commit 260dac77a5

View File

@ -1516,10 +1516,17 @@ namespace Opm {
BlackoilWellModel<TypeTag>:: BlackoilWellModel<TypeTag>::
assembleWellEqWithoutIteration(const double dt, DeferredLogger& deferred_logger) assembleWellEqWithoutIteration(const double dt, DeferredLogger& deferred_logger)
{ {
// We make sure that all processes throw in case there is an exception
// on one of them (WetGasPvt::saturationPressure might throw if not converged)
OPM_BEGIN_PARALLEL_TRY_CATCH()
for (auto& well: well_container_) { for (auto& well: well_container_) {
well->assembleWellEqWithoutIteration(ebosSimulator_, dt, this->wellState(), this->groupState(), well->assembleWellEqWithoutIteration(ebosSimulator_, dt, this->wellState(), this->groupState(),
deferred_logger); deferred_logger);
} }
OPM_END_PARALLEL_TRY_CATCH_LOG(deferred_logger, "BlackoilWellModel::assembleWellEqWithoutIteration failed: ",
terminal_output_, grid().comm());
} }