mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Add support for estimating md from well path as well
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user