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 {