Inetrnalize segment type in proper enum
This commit is contained in:
parent
f80160e6c0
commit
e2b58cecda
@ -21,6 +21,7 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp>
|
||||
namespace Opm {
|
||||
namespace RestartIO {
|
||||
|
||||
@ -30,7 +31,7 @@ struct RstSegment {
|
||||
int segment;
|
||||
int outlet_segment;
|
||||
int branch;
|
||||
int segment_type;
|
||||
Segment::SegmentType segment_type;
|
||||
int icd_scaling_mode;
|
||||
int icd_open_flag;
|
||||
|
||||
|
@ -36,6 +36,7 @@ namespace Opm {
|
||||
enum class SegmentType {
|
||||
REGULAR,
|
||||
SICD,
|
||||
AICD, // Not really supported - just included to complete the enum
|
||||
VALVE,
|
||||
};
|
||||
|
||||
@ -64,6 +65,8 @@ namespace Opm {
|
||||
bool dataReady() const;
|
||||
|
||||
SegmentType segmentType() const;
|
||||
int ecl_type_id() const;
|
||||
|
||||
|
||||
void setVolume(const double volume_in);
|
||||
void setDepthAndLength(const double depth_in, const double length_in);
|
||||
@ -72,6 +75,7 @@ namespace Opm {
|
||||
void addInletSegment(const int segment_number);
|
||||
|
||||
static double invalidValue();
|
||||
static SegmentType type_from_int(int ecl_id);
|
||||
|
||||
bool operator==( const Segment& ) const;
|
||||
bool operator!=( const Segment& ) const;
|
||||
|
@ -22,14 +22,29 @@
|
||||
|
||||
namespace VI = ::Opm::RestartIO::Helpers::VectorItems;
|
||||
|
||||
|
||||
|
||||
namespace Opm {
|
||||
|
||||
namespace {
|
||||
|
||||
template <typename T>
|
||||
T from_ecl(int ecl_value);
|
||||
|
||||
template <>
|
||||
Segment::SegmentType from_ecl(int int_type) {
|
||||
return Segment::type_from_int(int_type);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace RestartIO {
|
||||
|
||||
RstSegment::RstSegment(const int * iseg, const double * rseg) :
|
||||
segment(iseg[VI::ISeg::SegNo]),
|
||||
outlet_segment(iseg[VI::ISeg::OutSeg]),
|
||||
branch(iseg[VI::ISeg::BranchNo]),
|
||||
segment_type(iseg[VI::ISeg::SegmentType]),
|
||||
segment_type(from_ecl<Segment::SegmentType>(iseg[VI::ISeg::SegmentType])),
|
||||
icd_scaling_mode(iseg[VI::ISeg::ICDScalingMode]),
|
||||
icd_open_flag(iseg[VI::ISeg::ICDOpenShutFlag]),
|
||||
dist_outlet(rseg[VI::RSeg::DistOutlet]),
|
||||
|
@ -233,4 +233,35 @@ static constexpr double invalid_value = -1.e100;
|
||||
return m_valve;
|
||||
}
|
||||
|
||||
int Segment::ecl_type_id() const {
|
||||
switch (this->m_segment_type) {
|
||||
case SegmentType::REGULAR:
|
||||
return -1;
|
||||
case SegmentType::SICD:
|
||||
return -7;
|
||||
case SegmentType::AICD:
|
||||
return -8;
|
||||
case SegmentType::VALVE:
|
||||
return -5;
|
||||
default:
|
||||
throw std::invalid_argument("Unhanedled segment type");
|
||||
}
|
||||
}
|
||||
|
||||
Segment::SegmentType Segment::type_from_int(int ecl_id) {
|
||||
switch(ecl_id) {
|
||||
case -1:
|
||||
return SegmentType::REGULAR;
|
||||
case -7:
|
||||
return SegmentType::SICD;
|
||||
case -8:
|
||||
return SegmentType::AICD;
|
||||
case -5:
|
||||
return SegmentType::VALVE;
|
||||
default:
|
||||
throw std::invalid_argument("Unhanedled segment type");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user