From 5fbf981af812f91085330c346f6f9a1b6917aef9 Mon Sep 17 00:00:00 2001 From: Vegard Kippe Date: Fri, 6 Oct 2023 18:16:28 +0200 Subject: [PATCH] Output of network pressures based on rates at end of time step --- .../wells/BlackoilWellModelGeneric.cpp | 33 +++++++++++++++++-- .../wells/BlackoilWellModelGeneric.hpp | 2 +- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/opm/simulators/wells/BlackoilWellModelGeneric.cpp b/opm/simulators/wells/BlackoilWellModelGeneric.cpp index a49d92804..261425722 100644 --- a/opm/simulators/wells/BlackoilWellModelGeneric.cpp +++ b/opm/simulators/wells/BlackoilWellModelGeneric.cpp @@ -909,11 +909,40 @@ assignGroupValues(const int reportStepIdx, void BlackoilWellModelGeneric:: -assignNodeValues(std::map& nodevalues) const +assignNodeValues(std::map& nodevalues, const int reportStepIdx) const { nodevalues.clear(); + if (reportStepIdx < 0) return; + for (const auto& [node, pressure] : node_pressures_) { nodevalues.emplace(node, data::NodeData{pressure}); + // Assign node values of group to GPR:WELLNAME + const auto& group = schedule().getGroup(node, reportStepIdx); + for (const std::string& wellname : group.wells()) { + nodevalues.emplace(wellname, data::NodeData{pressure}); + } + } + + const auto& network = schedule()[reportStepIdx].network(); + if (!network.active()) return; + + auto converged_pressures = WellGroupHelpers::computeNetworkPressures(network, + this->wellState(), + this->groupState(), + *(vfp_properties_->getProd()), + schedule(), + reportStepIdx); + for (const auto& [node, converged_pressure] : converged_pressures) { + auto it = nodevalues.find(node); + assert(it != nodevalues.end() ); + it->second.converged_pressure = converged_pressure; + // Assign node values of group to GPR:WELLNAME + const auto& group = schedule().getGroup(node, reportStepIdx); + for (const std::string& wellname : group.wells()) { + auto it2 = nodevalues.find(wellname); + assert(it2 != nodevalues.end()); + it2->second.converged_pressure = converged_pressure; + } } } @@ -924,7 +953,7 @@ groupAndNetworkData(const int reportStepIdx) const auto grp_nwrk_values = data::GroupAndNetworkValues{}; this->assignGroupValues(reportStepIdx, grp_nwrk_values.groupData); - this->assignNodeValues(grp_nwrk_values.nodeData); + this->assignNodeValues(grp_nwrk_values.nodeData, reportStepIdx-1); // Schedule state info at previous step return grp_nwrk_values; } diff --git a/opm/simulators/wells/BlackoilWellModelGeneric.hpp b/opm/simulators/wells/BlackoilWellModelGeneric.hpp index 6e84cda00..be5052725 100644 --- a/opm/simulators/wells/BlackoilWellModelGeneric.hpp +++ b/opm/simulators/wells/BlackoilWellModelGeneric.hpp @@ -350,7 +350,7 @@ protected: data::GroupData& gdata) const; void assignGroupValues(const int reportStepIdx, std::map& gvalues) const; - void assignNodeValues(std::map& nodevalues) const; + void assignNodeValues(std::map& nodevalues, const int reportStepIdx) const; void calculateEfficiencyFactors(const int reportStepIdx);