Store all (global) perforations depths and differences in perforation_depth_diffs_ and well.perfDepth()

This commit is contained in:
Lisa Julia Nebel 2024-10-15 15:19:45 +02:00
parent dadfe3a634
commit 8a01b89ec9
3 changed files with 9 additions and 3 deletions

View File

@ -59,7 +59,7 @@ MultisegmentWellEval(WellInterfaceIndices<FluidSystem,Indices>& baseif, const Pa
, baseif_(baseif) , baseif_(baseif)
, linSys_(*this) , linSys_(*this)
, primary_variables_(baseif) , primary_variables_(baseif)
, segments_(this->numberOfSegments(), baseif) , segments_(this->numberOfSegments(), pw_info.communication().sum(baseif.numPerfs()), baseif)
, cell_perforation_depth_diffs_(baseif_.numPerfs(), 0.0) , cell_perforation_depth_diffs_(baseif_.numPerfs(), 0.0)
, cell_perforation_pressure_diffs_(baseif_.numPerfs(), 0.0) , cell_perforation_pressure_diffs_(baseif_.numPerfs(), 0.0)
{ {

View File

@ -60,9 +60,10 @@ namespace Opm
template<class FluidSystem, class Indices> template<class FluidSystem, class Indices>
MultisegmentWellSegments<FluidSystem,Indices>:: MultisegmentWellSegments<FluidSystem,Indices>::
MultisegmentWellSegments(const int numSegments, MultisegmentWellSegments(const int numSegments,
const int num_perfs_whole_mswell,
WellInterfaceGeneric<Scalar>& well) WellInterfaceGeneric<Scalar>& well)
: perforations_(numSegments) : perforations_(numSegments)
, perforation_depth_diffs_(well.numPerfs(), 0.0) , perforation_depth_diffs_(num_perfs_whole_mswell, 0.0)
, inlets_(well.wellEcl().getSegments().size()) , inlets_(well.wellEcl().getSegments().size())
, depth_diffs_(numSegments, 0.0) , depth_diffs_(numSegments, 0.0)
, densities_(numSegments, 0.0) , densities_(numSegments, 0.0)
@ -85,7 +86,8 @@ MultisegmentWellSegments(const int numSegments,
// the current implementation is a temporary solution for now, it should be corrected from the parser // the current implementation is a temporary solution for now, it should be corrected from the parser
// side // side
int i_perf_wells = 0; int i_perf_wells = 0;
well.perfDepth().resize(well_.numPerfs(), 0.); // The perfDepth vector will contain the depths of all perforations across all processes of this well!
well.perfDepth().resize(num_perfs_whole_mswell, 0.0);
const auto& segment_set = well_.wellEcl().getSegments(); const auto& segment_set = well_.wellEcl().getSegments();
for (std::size_t perf = 0; perf < completion_set.size(); ++perf) { for (std::size_t perf = 0; perf < completion_set.size(); ++perf) {
const Connection& connection = completion_set.get(perf); const Connection& connection = completion_set.get(perf);

View File

@ -49,6 +49,7 @@ class MultisegmentWellSegments
public: public:
MultisegmentWellSegments(const int numSegments, MultisegmentWellSegments(const int numSegments,
const int num_perfs_whole_mswell,
WellInterfaceGeneric<Scalar>& well); WellInterfaceGeneric<Scalar>& well);
void computeFluidProperties(const EvalWell& temperature, void computeFluidProperties(const EvalWell& temperature,
@ -148,6 +149,9 @@ private:
// depth difference between the segment and the perforation // depth difference between the segment and the perforation
// or in another way, the depth difference between the perforation and // or in another way, the depth difference between the perforation and
// the segment the perforation belongs to // the segment the perforation belongs to
// This vector contains the depth differences for *all* perforations across all processes
// that this well lies on, its size is well.wellEcl().getConnections().size(),
// also it works with *global* perforation indices!
std::vector<Scalar> perforation_depth_diffs_; std::vector<Scalar> perforation_depth_diffs_;
// the inlet segments for each segment. It is for convenience and efficiency reason // the inlet segments for each segment. It is for convenience and efficiency reason