Add support for estimating md from well path as well

This commit is contained in:
Gaute Lindkvist
2019-09-03 16:01:55 +02:00
parent 6c7325b575
commit ea8a43a724
4 changed files with 47 additions and 9 deletions

View File

@@ -56,6 +56,7 @@
#include <qwt_plot.h>
#include <QDebug>
#include <QString>
#include <numeric>
@@ -409,7 +410,7 @@ void RimWellLogRftCurve::onLoadDataAndUpdate(bool updateParentPlot)
if (tvDepthVector.size() != measuredDepthVector.size())
{
measuredDepthVector = interpolatedMeasuredDepthValuesFromObservedData(tvDepthVector);
measuredDepthVector = interpolatedMeasuredDepthValuesFromWellPathOrObservedData(tvDepthVector);
if (measuredDepthVector.size() == tvDepthVector.size())
{
m_derivingMDFromObservedData = true;
@@ -900,23 +901,46 @@ std::vector<double> RimWellLogRftCurve::measuredDepthValues()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<double> RimWellLogRftCurve::interpolatedMeasuredDepthValuesFromObservedData(const std::vector<double>& tvDepthValues)
std::vector<double> RimWellLogRftCurve::interpolatedMeasuredDepthValuesFromWellPathOrObservedData(const std::vector<double>& tvDepthValues)
{
RimProject* proj = RiaApplication::instance()->project();
RimWellPath* wellPath = proj->wellPathByName(m_wellName);
std::vector<double> interpolatedMdValues;
if (m_observedFmuRftData)
if (wellPath)
{
const std::vector<double>& mdValuesOfWellPath = wellPath->wellPathGeometry()->measureDepths();
std::vector<double> tvdValuesOfWellPath = wellPath->wellPathGeometry()->trueVerticalDepths();
qDebug() << "-------------- Well Path: ----------------";
for (size_t i = 0; i < mdValuesOfWellPath.size(); ++i)
{
qDebug() << mdValuesOfWellPath[i] << ", " << tvdValuesOfWellPath[i];
}
qDebug() << "-------------- Interpolated: ----------------";
interpolatedMdValues = RigWellPathGeometryTools::interpolateMdFromTvd(mdValuesOfWellPath, tvdValuesOfWellPath, tvDepthValues);
CVF_ASSERT(interpolatedMdValues.size() == tvDepthValues.size());
for (size_t i = 0; i < mdValuesOfWellPath.size(); ++i)
{
qDebug() << interpolatedMdValues[i] << ", " << tvDepthValues[i];
}
}
else if (m_observedFmuRftData)
{
RifReaderRftInterface* reader = m_observedFmuRftData->rftReader();
if (reader)
{
std::vector<double> tvdValuesOfObbservedData;
std::vector<double> mdValuesOfObbservedData;
std::vector<double> tvdValuesOfObservedData;
std::vector<double> mdValuesOfObservedData;
RifEclipseRftAddress tvdAddress(m_wellName(), m_timeStep, RifEclipseRftAddress::TVD);
RifEclipseRftAddress mdAddress(m_wellName(), m_timeStep, RifEclipseRftAddress::MD);
reader->values(tvdAddress, &tvdValuesOfObbservedData);
reader->values(mdAddress, &mdValuesOfObbservedData);
interpolatedMdValues = RigWellPathGeometryTools::interpolateMdFromTvd(mdValuesOfObbservedData, tvdValuesOfObbservedData, tvDepthValues);
reader->values(tvdAddress, &tvdValuesOfObservedData);
reader->values(mdAddress, &mdValuesOfObservedData);
interpolatedMdValues = RigWellPathGeometryTools::interpolateMdFromTvd(mdValuesOfObservedData, tvdValuesOfObservedData, tvDepthValues);
CVF_ASSERT(interpolatedMdValues.size() == tvDepthValues.size());
}
}

View File

@@ -96,7 +96,7 @@ private:
std::vector<double> xValues();
std::vector<double> tvDepthValues();
std::vector<double> measuredDepthValues();
std::vector<double> interpolatedMeasuredDepthValuesFromObservedData(const std::vector<double>& tvDepthValues);
std::vector<double> interpolatedMeasuredDepthValuesFromWellPathOrObservedData(const std::vector<double>& tvDepthValues);
private:
caf::PdmPtrField<RimEclipseResultCase*> m_eclipseResultCase;

View File

@@ -408,3 +408,16 @@ const std::vector<double>& RigWellPath::measureDepths() const
return m_measuredDepths;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<double> RigWellPath::trueVerticalDepths() const
{
std::vector<double> tvds;
for (const cvf::Vec3d& point : m_wellPathPoints)
{
tvds.push_back(std::fabs(point.z()));
}
return tvds;
}

View File

@@ -42,6 +42,7 @@ public:
const std::vector<cvf::Vec3d>& wellPathPoints() const;
const std::vector<double>& measureDepths() const;
std::vector<double> trueVerticalDepths() const;
RigWellPath();
void setDatumElevation(double value);