#1714 Adding point at fracture position to the vector of wellPathPoints used in calculation of intersection between fracture and wellpath.

This commit is contained in:
astridkbjorke 2017-08-02 11:13:27 +02:00
parent 7e44fe185e
commit d55c362bf0
8 changed files with 44 additions and 12 deletions

View File

@ -95,6 +95,7 @@ public:
virtual void updateAzimuthBasedOnWellAzimuthAngle() = 0;
virtual double wellAzimuthAtFracturePosition() const = 0;
virtual double fractureMD() const = 0;
protected:
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) override;

View File

@ -46,6 +46,8 @@ public:
double wellAzimuthAtFracturePosition() const override;
double wellDipAtFracturePosition();
double fractureMD() const override { return m_location; }
int branchIndex() const { return m_branchIndex(); }

View File

@ -47,14 +47,6 @@ RimWellPathFracture::RimWellPathFracture(void)
RimWellPathFracture::~RimWellPathFracture()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
double RimWellPathFracture::measuredDepth() const
{
return m_measuredDepth();
}
//--------------------------------------------------------------------------------------------------
///

View File

@ -37,7 +37,7 @@ public:
RimWellPathFracture(void);
virtual ~RimWellPathFracture(void);
double measuredDepth() const;
double fractureMD() const override { return m_measuredDepth; }
void setMeasuredDepth(double mdValue);
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;

View File

@ -229,3 +229,38 @@ std::vector<cvf::Vec3d> RigWellPath::clippedPointSubset(double startMD, double e
return points;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<cvf::Vec3d> RigWellPath::wellPathPointsIncludingFractureIntersection(double fractureIntersectionMD) const
{
std::vector<cvf::Vec3d> points;
if (m_measuredDepths.empty()) return points;
cvf::Vec3d fractureWellPathPpoint = interpolatedPointAlongWellPath(fractureIntersectionMD);
for (size_t i = 0; i < m_measuredDepths.size()-1; i++)
{
if (m_measuredDepths[i] < fractureIntersectionMD)
{
points.push_back(m_wellPathPoints[i]);
if (m_measuredDepths[i + 1] > fractureIntersectionMD)
{
points.push_back(fractureWellPathPpoint);
}
}
else if (m_measuredDepths[i] < fractureIntersectionMD)
{
if (i == 0)
{
points.push_back(fractureWellPathPpoint);
}
points.push_back(m_wellPathPoints[i]);
}
}
points.push_back(m_wellPathPoints.back());
return points;
}

View File

@ -45,6 +45,7 @@ public:
void twoClosestPoints(const cvf::Vec3d& position, cvf::Vec3d* p1, cvf::Vec3d* p2) const;
std::vector<cvf::Vec3d> clippedPointSubset(double startMD, double endMD) const;
std::vector<cvf::Vec3d> wellPathPointsIncludingFractureIntersection(double fractureIntersectionMD) const;
private:
bool m_hasDatumElevation;
double m_datumElevation;

View File

@ -12,11 +12,12 @@
#include "cvfMath.h"
#include <cmath>
#include "RimSimWellFracture.h"
RigWellPathStimplanIntersector::RigWellPathStimplanIntersector(const RigWellPath* wellpathGeom, const RimFracture* rimFracture)
RigWellPathStimplanIntersector::RigWellPathStimplanIntersector(const RigWellPath* wellpathGeom, RimFracture* rimFracture)
{
std::vector<cvf::Vec3d> wellPathPoints = wellpathGeom->m_wellPathPoints;
std::vector<cvf::Vec3d> wellPathPoints = wellpathGeom->wellPathPointsIncludingFractureIntersection(rimFracture->fractureMD());
cvf::Mat4d fractureXf = rimFracture->transformMatrix();
double wellRadius = rimFracture->wellRadius(rimFracture->fractureUnit());
std::vector<cvf::Vec3f> fracturePolygonf ;

View File

@ -38,7 +38,7 @@ public:
int endpointCount;
};
RigWellPathStimplanIntersector(const RigWellPath* wellpathGeom, const RimFracture * rimFracture);
RigWellPathStimplanIntersector(const RigWellPath* wellpathGeom, RimFracture * rimFracture);
const std::map<size_t, WellCellIntersection >& intersections() { return m_stimPlanCellIdxToIntersectionInfoMap; }