20#ifndef PARALLEL_WBP_CALCULATION_HPP
21#define PARALLEL_WBP_CALCULATION_HPP
23#include <opm/simulators/wells/ParallelPAvgDynamicSourceData.hpp>
25#include <opm/simulators/utils/ParallelCommunication.hpp>
27#include <opm/simulators/wells/PerforationData.hpp>
29#include <opm/input/eclipse/Schedule/Well/PAvgCalculator.hpp>
30#include <opm/input/eclipse/Schedule/Well/PAvgCalculatorCollection.hpp>
39 template<
class Scalar>
class ParallelWellInfo;
71 const Parallel::Communication& gridComm);
117 const std::vector<int>& localConnIdx,
155 const PAvg& controls,
156 const Scalar gravity,
157 const Scalar refDepth);
167 const typename PAvgCalculator<Scalar>::Result&
185 explicit LocalConnSet(
const std::vector<int>& localConnIdx);
195 int localIndex(
const std::size_t connIdx)
const;
206 std::vector<int> localConnIdx_{};
217 operator const ParallelPAvgDynamicSourceData<Scalar>&()
const
219 return *this->srcData_;
225 explicit SourceData(
const Parallel::Communication& comm);
234 SourceData& localIndex(GlobalToLocal localIdx);
242 SourceData& evaluator(Evaluator eval);
252 SourceData& evaluatorFactory(EvaluatorFactory evalFactory);
263 void buildStructure(
const std::vector<std::size_t>& sourceLocations);
274 void collectDynamicValues();
279 const Parallel::Communication& comm()
const
281 return this->comm_.get();
294 getLocalIndex(
const std::vector<std::size_t>& globalIndex)
const;
298 using DataPtr = std::unique_ptr<ParallelPAvgDynamicSourceData<Scalar>>;
301 std::reference_wrapper<const Parallel::Communication> comm_;
304 GlobalToLocal localIdx_{};
313 EvaluatorFactory evalFactory_{};
320 using WellID =
typename std::vector<SourceData>::size_type;
323 std::reference_wrapper<const GridDims> cellIndexMap_;
326 SourceData reservoirSrc_;
330 PAvgCalculatorCollection<Scalar> calculators_{};
333 std::vector<SourceData> wellConnSrc_{};
336 std::vector<LocalConnSet> localConnSet_{};
340 void pruneInactiveWBPCells();
343 void pruneInactiveWBPCellsSerial();
346 void pruneInactiveWBPCellsParallel();
349 void defineReservoirCommunication();
355 void defineWellCommunication(
const std::size_t well);
364 typename PAvgCalculator<Scalar>::Sources
365 makeEvaluationSources(
const WellID well)
const;
std::function< void(int, SourceDataSpan< Scalar >)> Evaluator
Collect source term contributions from local, on-rank, cell.
Definition ParallelPAvgDynamicSourceData.hpp:54
std::function< int(const std::size_t)> GlobalToLocal
Translate globally unique, linearised Cartesian cell indices to local, on-rank, cell indices.
Definition ParallelPAvgDynamicSourceData.hpp:42
Parallel facility for managing the on-rank collection and global distribution of WBPn source values a...
Definition ParallelWBPCalculation.hpp:51
void inferBlockAveragePressures(const std::size_t calcIndex, const PAvg &controls, const Scalar gravity, const Scalar refDepth)
Compute WBPn report values for a single well.
Definition ParallelWBPCalculation.cpp:251
const PAvgCalculator< Scalar >::Result & averagePressures(const std::size_t calcIndex) const
Retrieve results from most recent WBPn value calculation for specified well.
Definition ParallelWBPCalculation.cpp:264
std::size_t createCalculator(const Well &well, const ParallelWellInfo< Scalar > ¶llelWellInfo, const std::vector< int > &localConnIdx, EvaluatorFactory makeWellSourceEvaluator)
Create, or reassign, a WBPn calculation object for a particular well.
Definition ParallelWBPCalculation.cpp:189
ParallelWBPCalculation(const GridDims &cellIndexMap, const Parallel::Communication &gridComm)
Constructor.
Definition ParallelWBPCalculation.cpp:163
void defineCommunication()
Set up communication patterns for both cell and connection level source terms and partial/intermediat...
Definition ParallelWBPCalculation.cpp:224
typename ParallelPAvgDynamicSourceData< Scalar >::GlobalToLocal GlobalToLocal
Callback for inferring the source locations which are active on the current MPI rank.
Definition ParallelWBPCalculation.hpp:55
ParallelWBPCalculation & evalCellSource(Evaluator evalCellSrc)
Assign evaluation function for computing the on-rank, cell level WBPn source terms.
Definition ParallelWBPCalculation.cpp:181
typename ParallelPAvgDynamicSourceData< Scalar >::Evaluator Evaluator
Callback for evaluating WBPn source terms on the current MPI rank.
Definition ParallelWBPCalculation.hpp:58
std::function< Evaluator()> EvaluatorFactory
Callback for constructing a source term evaluation function on the current MPI rank.
Definition ParallelWBPCalculation.hpp:63
ParallelWBPCalculation & localCellIndex(GlobalToLocal localCellIdx)
Assign translation function for inferring the on-rank IDs of the known source locations.
Definition ParallelWBPCalculation.cpp:172
void collectDynamicValues()
Collect all on-rank source term value and distribute those on-rank values to all other MPI ranks.
Definition ParallelWBPCalculation.cpp:240
Class encapsulating some information about parallel wells.
Definition WGState.hpp:31
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilboundaryratevector.hh:37