20 #ifndef OPM_WELLMULTISEGMENT_HEADER_INCLUDED 21 #define OPM_WELLMULTISEGMENT_HEADER_INCLUDED 24 #include <opm/common/utility/platform_dependent/disable_warnings.h> 25 #include <Eigen/Eigen> 26 #include <Eigen/Sparse> 27 #include <opm/common/utility/platform_dependent/reenable_warnings.h> 29 #include <opm/core/wells.h> 30 #include <opm/core/well_controls.h> 31 #include <opm/core/simulator/WellState.hpp> 32 #include <opm/common/ErrorMacros.hpp> 33 #include <opm/parser/eclipse/EclipseState/Schedule/ScheduleEnums.hpp> 34 #include <opm/parser/eclipse/EclipseState/Schedule/MSW/SegmentSet.hpp> 35 #include <opm/parser/eclipse/EclipseState/Schedule/Well.hpp> 51 typedef Eigen::SparseMatrix<double> Matrix;
60 const std::string&
name()
const;
81 const std::vector<double>&
compFrac()
const;
90 const std::vector<double>&
wellIndex()
const;
93 const std::vector<double>&
perfDepth()
const;
96 const std::vector<int>&
wellCells()
const;
149 void initMultiSegmentWell(
const Well* well,
size_t time_step,
const Wells* wells);
150 void initNonMultiSegmentWell(
const Well* well,
size_t time_step,
const Wells* wells);
151 void updateWellOps();
155 std::string m_well_name_;
158 bool m_is_multi_segment_;
161 enum WellType m_well_type_;
163 int m_number_of_phases_;
165 std::vector<double> m_comp_frac_;
169 struct WellControls *m_well_controls_;
171 WellSegment::CompPressureDropEnum m_comp_pressure_drop_;
173 WellSegment::MultiPhaseModelEnum m_multiphase_model_;
175 int m_number_of_perforations_;
177 int m_number_of_segments_;
179 std::vector<double> m_well_index_;
181 std::vector<double> m_perf_depth_;
183 std::vector<int> m_well_cell_;
185 std::vector<int> m_segment_cell_;
192 std::vector<int> m_outlet_segment_;
194 std::vector<std::vector<int>> m_inlet_segments_;
200 std::vector<double> m_segment_length_;
202 std::vector<double> m_segment_depth_;
204 std::vector<double> m_segment_internal_diameter_;
206 std::vector<double> m_segment_roughness_;
208 std::vector<double> m_segment_cross_area_;
210 std::vector<double> m_segment_volume_;
216 std::vector<std::vector<int>> m_segment_perforations_;
221 typedef std::shared_ptr<WellMultiSegment> WellMultiSegmentPtr;
222 typedef std::shared_ptr<const WellMultiSegment> WellMultiSegmentConstPtr;
227 #endif // OPM_WELLMULTISEGMENT_HEADER_INCLUDE const std::string & name() const
Well name.
Definition: WellMultiSegment.cpp:311
Struct for the well operator matrices.
Definition: WellMultiSegment.hpp:131
const std::vector< double > & segmentRoughness() const
Effective absolute roughness of the tube.
Definition: WellMultiSegment.cpp:387
const std::vector< double > & segmentLength() const
The length of the segment nodes down the wellbore from the reference point.
Definition: WellMultiSegment.cpp:371
const WellOps & wellOps() const
Well operator matrics.
Definition: WellMultiSegment.cpp:399
WellMultiSegment(const Well *well, size_t time_step, const Wells *wells)
Constructor of WellMultiSegment.
Definition: WellMultiSegment.cpp:29
int numberOfPhases() const
Number of phases.
Definition: WellMultiSegment.cpp:343
const std::vector< int > & outletSegment() const
Outlet segments, a segment (except top segment) can only have one outlet segment. ...
Definition: WellMultiSegment.cpp:363
WellType wellType() const
Well type.
Definition: WellMultiSegment.cpp:319
const std::vector< int > & segmentCells() const
Indices of the gird blocks that segments locate at.
Definition: WellMultiSegment.cpp:359
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: AdditionalObjectDeleter.hpp:22
const std::vector< double > & compFrac() const
Component fractions for each well.
Definition: WellMultiSegment.cpp:339
const std::vector< std::vector< int > > & inletSegments() const
Inlet segments. a segment can have more than one inlet segments.
Definition: WellMultiSegment.cpp:367
const std::vector< double > & segmentVolume() const
Volume of segment.
Definition: WellMultiSegment.cpp:391
const std::vector< double > & wellIndex() const
Well productivity index.
Definition: WellMultiSegment.cpp:347
const std::vector< double > & segmentCrossArea() const
Cross-sectional area.
Definition: WellMultiSegment.cpp:383
int numberOfSegments() const
Number of the segments.
Definition: WellMultiSegment.cpp:331
Definition: WellMultiSegment.hpp:47
const std::vector< std::vector< int > > & segmentPerforations() const
Perforations related to each segment.
Definition: WellMultiSegment.cpp:395
const std::vector< double > & segmentDiameter() const
Tubing internal diameter.
Definition: WellMultiSegment.cpp:379
const std::vector< int > & wellCells() const
Indices of the grid blocks that perforations are completed in.
Definition: WellMultiSegment.cpp:355
std::string compPressureDrop() const
Components of the pressure drop invloved.
Definition: WellMultiSegment.cpp:335
const std::vector< double > & perfDepth() const
Depth of the perforations.
Definition: WellMultiSegment.cpp:351
int numberOfPerforations() const
Number of the perforations.
Definition: WellMultiSegment.cpp:327
const std::vector< double > & segmentDepth() const
The depth of the segment nodes.
Definition: WellMultiSegment.cpp:375
bool isMultiSegmented() const
Flag indicating if the well is a multi-segment well.
Definition: WellMultiSegment.cpp:315
const WellControls * wellControls() const
Well control.
Definition: WellMultiSegment.cpp:323