mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-04 04:30:51 -06:00
657 lines
25 KiB
C++
657 lines
25 KiB
C++
#include "RicMultiSegmentWellExportInfo.h"
|
|
|
|
#include "RimMswCompletionParameters.h"
|
|
#include "RimWellPath.h"
|
|
|
|
#include "RigWellPath.h"
|
|
|
|
#include <algorithm>
|
|
#include <limits>
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
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<RicMswSubSegmentCellIntersection>& RicMswSubSegment::intersections() const
|
|
{
|
|
return m_intersections;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
std::vector<RicMswSubSegmentCellIntersection>& 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<RicMswSubSegment>& RicMswCompletion::subSegments()
|
|
{
|
|
return m_subSegments;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
const std::vector<RicMswSubSegment>& 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<RicMswCompletion>& RicMswSegment::completions() const
|
|
{
|
|
return m_completions;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
std::vector<RicMswCompletion>& 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);
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
void RicMswSegment::setSourcePdmObject(const caf::PdmObject* object)
|
|
{
|
|
m_sourcePdmObject = const_cast<caf::PdmObject*>(object);
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
const caf::PdmObject* RicMswSegment::sourcePdmObject() const
|
|
{
|
|
return m_sourcePdmObject;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
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<double>::infinity();
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
const std::vector<RicMswSegment>& RicMswExportInfo::wellSegmentLocations() const
|
|
{
|
|
return m_wellSegmentLocations;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
std::vector<RicMswSegment>& RicMswExportInfo::wellSegmentLocations()
|
|
{
|
|
return m_wellSegmentLocations;
|
|
}
|