From 4c59df55941ae5c6aa004fa569725e508a78e621 Mon Sep 17 00:00:00 2001 From: Lisa Julia Nebel Date: Tue, 12 Nov 2024 15:16:11 +0100 Subject: [PATCH] Add function sumDistributed to MultisegmentWellEquations This functions sums all contributions of a multisegment well for the diagonal of D and the residual. --- opm/simulators/wells/MultisegmentWellEquations.cpp | 11 +++++++++++ opm/simulators/wells/MultisegmentWellEquations.hpp | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/opm/simulators/wells/MultisegmentWellEquations.cpp b/opm/simulators/wells/MultisegmentWellEquations.cpp index a8ca05a43..d229c7191 100644 --- a/opm/simulators/wells/MultisegmentWellEquations.cpp +++ b/opm/simulators/wells/MultisegmentWellEquations.cpp @@ -37,6 +37,7 @@ #include #include +#include #include #include #include @@ -409,6 +410,16 @@ extractCPRPressureMatrix(PressureMatrix& jacobian, } } +template +void MultisegmentWellEquations:: +sumDistributed(Parallel::Communication comm) +{ + // accumulate resWell_ and duneD_ in parallel to get effects of all perforations (might be distributed) + // we need to do this for all segments in the residual and on the diagonal of D + for (int seg = 0; seg < well_.numberOfSegments(); ++seg) + Opm::wellhelpers::sumDistributedWellEntries(duneD_[seg][seg], resWell_[seg], comm); +} + #define INSTANTIATE(T, numWellEq, numEq) \ template class MultisegmentWellEquations; \ template void MultisegmentWellEquations:: \ diff --git a/opm/simulators/wells/MultisegmentWellEquations.hpp b/opm/simulators/wells/MultisegmentWellEquations.hpp index fbc50469d..ebbe69942 100644 --- a/opm/simulators/wells/MultisegmentWellEquations.hpp +++ b/opm/simulators/wells/MultisegmentWellEquations.hpp @@ -22,6 +22,7 @@ #ifndef OPM_MULTISEGMENTWELL_EQUATIONS_HEADER_INCLUDED #define OPM_MULTISEGMENTWELL_EQUATIONS_HEADER_INCLUDED +#include #include #include #include @@ -121,6 +122,9 @@ public: const int seg_pressure_var_ind, const WellState& well_state) const; + //! \brief Sum with off-process contribution. + void sumDistributed(Parallel::Communication comm); + //! \brief Returns a const reference to the residual. const BVectorWell& residual() const {