From c23094b29969996d7e16d958a3a4b1b29f249822 Mon Sep 17 00:00:00 2001 From: Tor Harald Sandve Date: Wed, 24 Feb 2021 15:54:02 +0100 Subject: [PATCH] make another throw tread safe --- opm/simulators/wells/MultisegmentWell.hpp | 3 ++- opm/simulators/wells/MultisegmentWell_impl.hpp | 13 +++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/opm/simulators/wells/MultisegmentWell.hpp b/opm/simulators/wells/MultisegmentWell.hpp index 7dabf5f2b..aea80f5a6 100644 --- a/opm/simulators/wells/MultisegmentWell.hpp +++ b/opm/simulators/wells/MultisegmentWell.hpp @@ -465,7 +465,8 @@ namespace Opm EvalWell getSegmentSurfaceVolume(const Simulator& ebos_simulator, const int seg_idx) const; - std::vector getWellResiduals(const std::vector& B_avg) const; + std::vector getWellResiduals(const std::vector& B_avg, + DeferredLogger& deferred_logger) const; void detectOscillations(const std::vector& measure_history, const int it, bool& oscillate, bool& stagnate) const; diff --git a/opm/simulators/wells/MultisegmentWell_impl.hpp b/opm/simulators/wells/MultisegmentWell_impl.hpp index 263b3a708..9ea2642d7 100644 --- a/opm/simulators/wells/MultisegmentWell_impl.hpp +++ b/opm/simulators/wells/MultisegmentWell_impl.hpp @@ -2720,7 +2720,7 @@ namespace Opm const int max_iter_number = param_.max_inner_iter_ms_wells_; const WellState well_state0 = well_state; - const std::vector residuals0 = getWellResiduals(B_avg); + const std::vector residuals0 = getWellResiduals(B_avg, deferred_logger); std::vector > residual_history; std::vector measure_history; int it = 0; @@ -2745,7 +2745,7 @@ namespace Opm break; } - residual_history.push_back(getWellResiduals(B_avg)); + residual_history.push_back(getWellResiduals(B_avg, deferred_logger)); measure_history.push_back(getResidualMeasureValue(well_state, residual_history[it], deferred_logger) ); bool is_oscillate = false; @@ -3222,7 +3222,8 @@ namespace Opm template std::vector::Scalar> MultisegmentWell:: - getWellResiduals(const std::vector& B_avg) const + getWellResiduals(const std::vector& B_avg, + DeferredLogger& deferred_logger) const { assert(int(B_avg.size() ) == num_components_); std::vector residuals(numWellEq + 1, 0.0); @@ -3238,8 +3239,8 @@ namespace Opm } } if (std::isnan(residual) || std::isinf(residual)) { - OPM_THROW(Opm::NumericalIssue, "nan or inf value for residal get for well " << name() - << " segment " << seg << " eq_idx " << eq_idx); + OPM_DEFLOG_THROW(Opm::NumericalIssue, "nan or inf value for residal get for well " << name() + << " segment " << seg << " eq_idx " << eq_idx, deferred_logger); } if (residual > residuals[eq_idx]) { @@ -3252,7 +3253,7 @@ namespace Opm { const double control_residual = std::abs(resWell_[0][numWellEq - 1]); if (std::isnan(control_residual) || std::isinf(control_residual)) { - OPM_THROW(Opm::NumericalIssue, "nan or inf value for control residal get for well " << name()); + OPM_DEFLOG_THROW(Opm::NumericalIssue, "nan or inf value for control residal get for well " << name(), deferred_logger); } residuals[numWellEq] = control_residual; }