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)
, linSys_(*this)
, 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_pressure_diffs_(baseif_.numPerfs(), 0.0)
{

View File

@ -60,9 +60,10 @@ namespace Opm
template<class FluidSystem, class Indices>
MultisegmentWellSegments<FluidSystem,Indices>::
MultisegmentWellSegments(const int numSegments,
const int num_perfs_whole_mswell,
WellInterfaceGeneric<Scalar>& well)
: perforations_(numSegments)
, perforation_depth_diffs_(well.numPerfs(), 0.0)
, perforation_depth_diffs_(num_perfs_whole_mswell, 0.0)
, inlets_(well.wellEcl().getSegments().size())
, depth_diffs_(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
// side
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();
for (std::size_t perf = 0; perf < completion_set.size(); ++perf) {
const Connection& connection = completion_set.get(perf);

View File

@ -49,6 +49,7 @@ class MultisegmentWellSegments
public:
MultisegmentWellSegments(const int numSegments,
const int num_perfs_whole_mswell,
WellInterfaceGeneric<Scalar>& well);
void computeFluidProperties(const EvalWell& temperature,
@ -148,6 +149,9 @@ private:
// depth difference between the segment and the perforation
// or in another way, the depth difference between the perforation and
// 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_;
// the inlet segments for each segment. It is for convenience and efficiency reason