From 857ae931eb592ab7d697fbbfe18e5fc378f3dc35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20H=C3=A6gland?= Date: Fri, 12 Dec 2025 10:33:28 +0100 Subject: [PATCH] Bugfix: groupStateHelper uses wrong WellState When well_state is copied, groupStateHelper should be updated to use that copy --- opm/simulators/wells/WellInterface_impl.hpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/opm/simulators/wells/WellInterface_impl.hpp b/opm/simulators/wells/WellInterface_impl.hpp index 35f810b7d1f..3ba2ba9ec21 100644 --- a/opm/simulators/wells/WellInterface_impl.hpp +++ b/opm/simulators/wells/WellInterface_impl.hpp @@ -2202,9 +2202,11 @@ namespace Opm OPM_TIMEFUNCTION(); WellStateType well_state_copy = well_state; const auto& groupStateHelper = simulator.problem().wellModel().groupStateHelper(); + GroupStateHelperType groupStateHelper_copy = groupStateHelper; + auto well_guard = groupStateHelper_copy.pushWellState(well_state_copy); const double dt = simulator.timeStepSize(); const bool converged = this->solveWellWithBhp( - simulator, dt, bhp, groupStateHelper, well_state_copy, deferred_logger + simulator, dt, bhp, groupStateHelper_copy, well_state_copy, deferred_logger ); bool zero_rates; @@ -2216,9 +2218,9 @@ namespace Opm // For zero rates or unconverged bhp the implicit IPR is problematic. // Use the old approach for now if (zero_rates || !converged) { - return this->computeBhpAtThpLimitProdWithAlq(simulator, groupStateHelper, summary_state, alq_value, deferred_logger, /*iterate_if_no_solution */ false); + return this->computeBhpAtThpLimitProdWithAlq(simulator, groupStateHelper_copy, summary_state, alq_value, deferred_logger, /*iterate_if_no_solution */ false); } - this->updateIPRImplicit(simulator, groupStateHelper, well_state_copy, deferred_logger); + this->updateIPRImplicit(simulator, groupStateHelper_copy, well_state_copy, deferred_logger); this->adaptRatesForVFP(rates); return WellBhpThpCalculator(*this).estimateStableBhp(well_state_copy, this->well_ecl_, rates, this->getRefDensity(), summary_state, alq_value); }