#include "RicMultiSegmentWellExportInfo.h" #include "RimMswCompletionParameters.h" #include "RimWellPath.h" #include "RigWellPath.h" #include #include //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RicMswSubSegmentCellIntersection::RicMswSubSegmentCellIntersection(const QString& gridName, size_t globalCellIndex, const cvf::Vec3st& gridLocalCellIJK, const cvf::Vec3d& lengthsInCell) : m_gridName(gridName) , m_globalCellIndex(globalCellIndex) , m_gridLocalCellIJK(gridLocalCellIJK) , m_lengthsInCell(lengthsInCell) { } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const QString& RicMswSubSegmentCellIntersection::gridName() const { return m_gridName; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- size_t RicMswSubSegmentCellIntersection::globalCellIndex() const { return m_globalCellIndex; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- cvf::Vec3st RicMswSubSegmentCellIntersection::gridLocalCellIJK() const { return m_gridLocalCellIJK; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const cvf::Vec3d& RicMswSubSegmentCellIntersection::lengthsInCell() const { return m_lengthsInCell; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RicMswSubSegment::RicMswSubSegment(double startMD, double deltaMD, double startTVD, double deltaTVD) : m_startMD(startMD) , m_deltaMD(deltaMD) , m_startTVD(startTVD) , m_deltaTVD(deltaTVD) , m_segmentNumber(-1) , m_attachedSegmentNumber(-1) { } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSubSegment::startMD() const { return m_startMD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSubSegment::deltaMD() const { return m_deltaMD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSubSegment::startTVD() const { return m_startTVD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSubSegment::deltaTVD() const { return m_deltaTVD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- int RicMswSubSegment::segmentNumber() const { return m_segmentNumber; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- int RicMswSubSegment::attachedSegmentNumber() const { return m_attachedSegmentNumber; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSubSegment::setSegmentNumber(int segmentNumber) { m_segmentNumber = segmentNumber; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSubSegment::setAttachedSegmentNumber(int attachedSegmentNumber) { m_attachedSegmentNumber = attachedSegmentNumber; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSubSegment::addIntersection(const RicMswSubSegmentCellIntersection& intersection) { m_intersections.push_back(intersection); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const std::vector& RicMswSubSegment::intersections() const { return m_intersections; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector& RicMswSubSegment::intersections() { return m_intersections; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RicMswCompletion::RicMswCompletion(RigCompletionData::CompletionType completionType, const QString& label, size_t index /* = cvf::UNDEFINED_SIZE_T */, int branchNumber /*= 0*/) : m_completionType(completionType) , m_label(label) , m_index(index) , m_branchNumber(branchNumber) { } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RigCompletionData::CompletionType RicMswCompletion::completionType() const { return m_completionType; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const QString& RicMswCompletion::label() const { return m_label; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- size_t RicMswCompletion::index() const { return m_index; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- int RicMswCompletion::branchNumber() const { return m_branchNumber; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswCompletion::setBranchNumber(int branchNumber) { m_branchNumber = branchNumber; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswCompletion::addSubSegment(const RicMswSubSegment& subSegment) { m_subSegments.push_back(subSegment); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector& RicMswCompletion::subSegments() { return m_subSegments; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const std::vector& RicMswCompletion::subSegments() const { return m_subSegments; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RicMswSegment::RicMswSegment(const QString& label, double startMD, double endMD, double startTVD, double endTVD, size_t subIndex, int segmentNumber /*= -1*/) : m_label(label) , m_startMD(startMD) , m_endMD(endMD) , m_startTVD(startTVD) , m_endTVD(endTVD) , m_effectiveDiameter(0.15) , m_holeDiameter(RicMswExportInfo::defaultDoubleValue()) , m_openHoleRoughnessFactor(5.0e-5) , m_skinFactor(RicMswExportInfo::defaultDoubleValue()) , m_icdFlowCoefficient(RicMswExportInfo::defaultDoubleValue()) , m_icdArea(RicMswExportInfo::defaultDoubleValue()) , m_subIndex(subIndex) , m_segmentNumber(segmentNumber) { } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QString RicMswSegment::label() const { return m_label; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::startMD() const { return m_startMD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::endMD() const { return m_endMD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::deltaMD() const { return m_endMD - m_startMD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::startTVD() const { return m_startTVD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::endTVD() const { return m_endTVD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::deltaTVD() const { return m_endTVD - m_startTVD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::effectiveDiameter() const { return m_effectiveDiameter; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::holeDiameter() const { return m_holeDiameter; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::openHoleRoughnessFactor() const { return m_openHoleRoughnessFactor; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::skinFactor() const { return m_skinFactor; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::icdFlowCoefficient() const { return m_icdFlowCoefficient; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswSegment::icdArea() const { return m_icdArea; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- size_t RicMswSegment::subIndex() const { return m_subIndex; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- int RicMswSegment::segmentNumber() const { return m_segmentNumber; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const std::vector& RicMswSegment::completions() const { return m_completions; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector& RicMswSegment::completions() { return m_completions; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSegment::setEffectiveDiameter(double effectiveDiameter) { m_effectiveDiameter = effectiveDiameter; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSegment::setHoleDiameter(double holeDiameter) { m_holeDiameter = holeDiameter; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSegment::setOpenHoleRoughnessFactor(double roughnessFactor) { m_openHoleRoughnessFactor = roughnessFactor; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSegment::setSkinFactor(double skinFactor) { m_skinFactor = skinFactor; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSegment::setIcdFlowCoefficient(double icdFlowCoefficient) { m_icdFlowCoefficient = icdFlowCoefficient; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSegment::setIcdArea(double icdArea) { m_icdArea = icdArea; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSegment::setSegmentNumber(int segmentNumber) { m_segmentNumber = segmentNumber; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswSegment::addCompletion(const RicMswCompletion& completion) { m_completions.push_back(completion); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RicMswSegment::operator<(const RicMswSegment& rhs) const { return startMD() < rhs.startMD(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RicMswExportInfo::RicMswExportInfo(const RimWellPath* wellPath, RiaEclipseUnitTools::UnitSystem unitSystem, double initialMD, const QString& lengthAndDepthText, const QString& pressureDropText) : m_wellPath(wellPath) , m_initialMD(initialMD) , m_unitSystem(unitSystem) , m_topWellBoreVolume(RicMswExportInfo::defaultDoubleValue()) , m_linerDiameter(RimMswCompletionParameters::defaultLinerDiameter(unitSystem)) , m_roughnessFactor(RimMswCompletionParameters::defaultRoughnessFactor(unitSystem)) , m_lengthAndDepthText(lengthAndDepthText) , m_pressureDropText(pressureDropText) , m_hasSubGridIntersections(false) { } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswExportInfo::setTopWellBoreVolume(double topWellBoreVolume) { m_topWellBoreVolume = topWellBoreVolume; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswExportInfo::setLinerDiameter(double linerDiameter) { m_linerDiameter = linerDiameter; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswExportInfo::setRoughnessFactor(double roughnessFactor) { m_roughnessFactor = roughnessFactor; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswExportInfo::setHasSubGridIntersections(bool subGridIntersections) { m_hasSubGridIntersections = subGridIntersections; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswExportInfo::addWellSegmentLocation(const RicMswSegment& location) { m_wellSegmentLocations.push_back(location); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicMswExportInfo::sortLocations() { std::sort(m_wellSegmentLocations.begin(), m_wellSegmentLocations.end()); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const RimWellPath* RicMswExportInfo::wellPath() const { return m_wellPath; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswExportInfo::initialMD() const { return m_initialMD; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswExportInfo::initialTVD() const { return -m_wellPath->wellPathGeometry()->interpolatedPointAlongWellPath(m_initialMD).z(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RiaEclipseUnitTools::UnitSystem RicMswExportInfo::unitSystem() const { return m_unitSystem; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswExportInfo::topWellBoreVolume() const { return m_topWellBoreVolume; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswExportInfo::linerDiameter() const { return m_linerDiameter; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswExportInfo::roughnessFactor() const { return m_roughnessFactor; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QString RicMswExportInfo::lengthAndDepthText() const { return m_lengthAndDepthText; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QString RicMswExportInfo::pressureDropText() const { return m_pressureDropText; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RicMswExportInfo::hasSubGridIntersections() const { return m_hasSubGridIntersections; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- double RicMswExportInfo::defaultDoubleValue() { return std::numeric_limits::infinity(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const std::vector& RicMswExportInfo::wellSegmentLocations() const { return m_wellSegmentLocations; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector& RicMswExportInfo::wellSegmentLocations() { return m_wellSegmentLocations; }