mirror of
https://github.com/OPM/ResInsight.git
synced 2026-09-03 20:53:13 -05:00
#2127 Sim Well Branches : Add branch detection and branc index to RtfCurve
This commit is contained in:
@@ -164,6 +164,17 @@ bool RimWellPlotTools::hasFlowData(RimWellPath* wellPath)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
bool RimWellPlotTools::isWellPath(const QString& wellName)
|
||||||
|
{
|
||||||
|
RimProject* proj = RiaApplication::instance()->project();
|
||||||
|
RimWellPath* wellPath = proj->wellPathByName(wellName);
|
||||||
|
|
||||||
|
return wellPath != nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ public:
|
|||||||
|
|
||||||
// others
|
// others
|
||||||
static bool hasFlowData(const RimWellLogFile* wellLogFile);
|
static bool hasFlowData(const RimWellLogFile* wellLogFile);
|
||||||
|
static bool isWellPath(const QString& wellName);
|
||||||
|
|
||||||
// Both
|
// Both
|
||||||
static std::vector<RimEclipseResultCase*> gridCasesForWell(const QString& simWellName);
|
static std::vector<RimEclipseResultCase*> gridCasesForWell(const QString& simWellName);
|
||||||
|
|||||||
@@ -489,6 +489,7 @@ void RimWellRftPlot::updateCurvesInPlot(const std::set<RiaRftPltCurveDefinition>
|
|||||||
RifEclipseRftAddress address(simWellName, curveDefToAdd.timeStep(), RifEclipseRftAddress::PRESSURE);
|
RifEclipseRftAddress address(simWellName, curveDefToAdd.timeStep(), RifEclipseRftAddress::PRESSURE);
|
||||||
curve->setRftAddress(address);
|
curve->setRftAddress(address);
|
||||||
curve->setZOrder(1);
|
curve->setZOrder(1);
|
||||||
|
curve->setSimWellBranchData(m_branchDetection, m_branchIndex);
|
||||||
|
|
||||||
applyCurveAppearance(curve);
|
applyCurveAppearance(curve);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,14 +23,8 @@
|
|||||||
#include "RiaEclipseUnitTools.h"
|
#include "RiaEclipseUnitTools.h"
|
||||||
#include "RiaSimWellBranchTools.h"
|
#include "RiaSimWellBranchTools.h"
|
||||||
|
|
||||||
#include "RimEclipseResultCase.h"
|
#include "RifEclipseRftAddress.h"
|
||||||
#include "RimMainPlotCollection.h"
|
#include "RifReaderEclipseRft.h"
|
||||||
#include "RimProject.h"
|
|
||||||
#include "RimTools.h"
|
|
||||||
#include "RimWellLogPlot.h"
|
|
||||||
#include "RimWellLogPlotCollection.h"
|
|
||||||
#include "RimWellLogTrack.h"
|
|
||||||
#include "RimWellPath.h"
|
|
||||||
|
|
||||||
#include "RigEclipseCaseData.h"
|
#include "RigEclipseCaseData.h"
|
||||||
#include "RigEclipseWellLogExtractor.h"
|
#include "RigEclipseWellLogExtractor.h"
|
||||||
@@ -39,15 +33,21 @@
|
|||||||
#include "RigWellPath.h"
|
#include "RigWellPath.h"
|
||||||
#include "RigWellPathIntersectionTools.h"
|
#include "RigWellPathIntersectionTools.h"
|
||||||
|
|
||||||
|
#include "RimEclipseResultCase.h"
|
||||||
|
#include "RimMainPlotCollection.h"
|
||||||
|
#include "RimProject.h"
|
||||||
|
#include "RimTools.h"
|
||||||
|
#include "RimWellLogPlot.h"
|
||||||
|
#include "RimWellLogPlotCollection.h"
|
||||||
|
#include "RimWellLogTrack.h"
|
||||||
|
#include "RimWellPath.h"
|
||||||
|
#include "RimWellPlotTools.h"
|
||||||
|
|
||||||
#include "RiuLineSegmentQwtPlotCurve.h"
|
#include "RiuLineSegmentQwtPlotCurve.h"
|
||||||
#include "RiuWellLogTrack.h"
|
#include "RiuWellLogTrack.h"
|
||||||
|
|
||||||
#include "RifEclipseRftAddress.h"
|
|
||||||
#include "RifReaderEclipseRft.h"
|
|
||||||
|
|
||||||
#include "cafPdmObject.h"
|
#include "cafPdmObject.h"
|
||||||
#include "cafVecIjk.h"
|
#include "cafVecIjk.h"
|
||||||
|
|
||||||
#include "cvfAssert.h"
|
#include "cvfAssert.h"
|
||||||
|
|
||||||
#include <qwt_plot.h>
|
#include <qwt_plot.h>
|
||||||
@@ -90,6 +90,9 @@ RimWellLogRftCurve::RimWellLogRftCurve()
|
|||||||
CAF_PDM_InitFieldNoDefault(&m_timeStep, "TimeStep", "Time Step", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_timeStep, "TimeStep", "Time Step", "", "", "");
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_wellName, "WellName", "Well Name", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_wellName, "WellName", "Well Name", "", "", "");
|
||||||
|
CAF_PDM_InitField(&m_branchIndex, "BranchIndex", 0, "Branch Index", "", "", "");
|
||||||
|
CAF_PDM_InitField(&m_branchDetection, "BranchDetection", true, "Branch Detection", "",
|
||||||
|
"Compute branches based on how simulation well cells are organized", "");
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_wellLogChannelName, "WellLogChannelName", "Well Property", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_wellLogChannelName, "WellLogChannelName", "Well Property", "", "", "");
|
||||||
|
|
||||||
@@ -230,6 +233,15 @@ void RimWellLogRftCurve::updateWellChannelNameAndTimeStep()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimWellLogRftCurve::setSimWellBranchData(bool branchDetection, int branchIndex)
|
||||||
|
{
|
||||||
|
m_branchDetection = branchDetection;
|
||||||
|
m_branchIndex = branchIndex;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -341,6 +353,16 @@ void RimWellLogRftCurve::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderi
|
|||||||
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup("Curve Data");
|
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup("Curve Data");
|
||||||
curveDataGroup->add(&m_eclipseResultCase);
|
curveDataGroup->add(&m_eclipseResultCase);
|
||||||
curveDataGroup->add(&m_wellName);
|
curveDataGroup->add(&m_wellName);
|
||||||
|
if (!RimWellPlotTools::isWellPath(m_wellName))
|
||||||
|
{
|
||||||
|
curveDataGroup->add(&m_branchDetection);
|
||||||
|
|
||||||
|
if (RiaSimWellBranchTools::simulationWellBranches(RimWellPlotTools::simWellName(m_wellName), m_branchDetection).size() > 1)
|
||||||
|
{
|
||||||
|
curveDataGroup->add(&m_branchIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
curveDataGroup->add(&m_wellLogChannelName);
|
curveDataGroup->add(&m_wellLogChannelName);
|
||||||
curveDataGroup->add(&m_timeStep);
|
curveDataGroup->add(&m_timeStep);
|
||||||
|
|
||||||
@@ -350,6 +372,8 @@ void RimWellLogRftCurve::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderi
|
|||||||
caf::PdmUiGroup* nameGroup = uiOrdering.addNewGroup("Curve Name");
|
caf::PdmUiGroup* nameGroup = uiOrdering.addNewGroup("Curve Name");
|
||||||
nameGroup->add(&m_showLegend);
|
nameGroup->add(&m_showLegend);
|
||||||
RimPlotCurve::curveNameUiOrdering(*nameGroup);
|
RimPlotCurve::curveNameUiOrdering(*nameGroup);
|
||||||
|
|
||||||
|
uiOrdering.skipRemainingFields();
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -412,6 +436,13 @@ QList<caf::PdmOptionItemInfo> RimWellLogRftCurve::calculateValueOptions(const ca
|
|||||||
|
|
||||||
options.push_back(caf::PdmOptionItemInfo("None", QDateTime()));
|
options.push_back(caf::PdmOptionItemInfo("None", QDateTime()));
|
||||||
}
|
}
|
||||||
|
else if (fieldNeedingOptions == &m_branchIndex)
|
||||||
|
{
|
||||||
|
auto simulationWellBranches =
|
||||||
|
RiaSimWellBranchTools::simulationWellBranches(RimWellPlotTools::simWellName(m_wellName), m_branchDetection);
|
||||||
|
|
||||||
|
options = RiaSimWellBranchTools::valueOptionsForBranchIndexField(simulationWellBranches);
|
||||||
|
}
|
||||||
|
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
@@ -437,6 +468,12 @@ void RimWellLogRftCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedFiel
|
|||||||
updateWellChannelNameAndTimeStep();
|
updateWellChannelNameAndTimeStep();
|
||||||
this->loadDataAndUpdate(true);
|
this->loadDataAndUpdate(true);
|
||||||
}
|
}
|
||||||
|
else if (changedField == &m_branchDetection ||
|
||||||
|
changedField == &m_branchIndex)
|
||||||
|
{
|
||||||
|
updateWellChannelNameAndTimeStep();
|
||||||
|
this->loadDataAndUpdate(true);
|
||||||
|
}
|
||||||
else if (changedField == &m_wellLogChannelName)
|
else if (changedField == &m_wellLogChannelName)
|
||||||
{
|
{
|
||||||
if (m_wellLogChannelName == RifEclipseRftAddress::NONE)
|
if (m_wellLogChannelName == RifEclipseRftAddress::NONE)
|
||||||
@@ -485,10 +522,16 @@ RigEclipseWellLogExtractor* RimWellLogRftCurve::extractor()
|
|||||||
|
|
||||||
if (!eclExtractor)
|
if (!eclExtractor)
|
||||||
{
|
{
|
||||||
std::vector<const RigWellPath*> wellPaths = RiaSimWellBranchTools::simulationWellBranches(m_wellName(), true);
|
QString simWellName = RimWellPlotTools::simWellName(m_wellName);
|
||||||
|
std::vector<const RigWellPath*> wellPaths = RiaSimWellBranchTools::simulationWellBranches(simWellName, m_branchDetection);
|
||||||
if (wellPaths.size() == 0) return nullptr;
|
if (wellPaths.size() == 0) return nullptr;
|
||||||
|
|
||||||
eclExtractor = wellLogCollection->findOrCreateSimWellExtractor(m_wellName(), QString("Find or create sim well extractor"), wellPaths[0], m_eclipseResultCase->eclipseCaseData());
|
auto wellPathBranch = wellPaths[m_branchIndex];
|
||||||
|
|
||||||
|
eclExtractor = wellLogCollection->findOrCreateSimWellExtractor(simWellName,
|
||||||
|
QString("Find or create sim well extractor"),
|
||||||
|
wellPathBranch,
|
||||||
|
m_eclipseResultCase->eclipseCaseData());
|
||||||
m_isUsingPseudoLength = true;
|
m_isUsingPseudoLength = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ public:
|
|||||||
void setDefaultAddress(QString wellName);
|
void setDefaultAddress(QString wellName);
|
||||||
void updateWellChannelNameAndTimeStep();
|
void updateWellChannelNameAndTimeStep();
|
||||||
|
|
||||||
|
void setSimWellBranchData(bool branchDetection, int branchIndex);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Overrides from RimWellLogPlotCurve
|
// Overrides from RimWellLogPlotCurve
|
||||||
virtual QString createCurveAutoName() override;
|
virtual QString createCurveAutoName() override;
|
||||||
@@ -84,12 +86,13 @@ private:
|
|||||||
std::vector<double> measuredDepthValues();
|
std::vector<double> measuredDepthValues();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<size_t, size_t> m_idxInWellPathToIdxInRftFile;
|
caf::PdmPtrField<RimEclipseResultCase*> m_eclipseResultCase;
|
||||||
|
caf::PdmField<QDateTime> m_timeStep;
|
||||||
|
caf::PdmField<QString> m_wellName;
|
||||||
|
caf::PdmField<int> m_branchIndex;
|
||||||
|
caf::PdmField<bool> m_branchDetection;
|
||||||
|
|
||||||
caf::PdmPtrField<RimEclipseResultCase*> m_eclipseResultCase;
|
std::map<size_t, size_t> m_idxInWellPathToIdxInRftFile;
|
||||||
caf::PdmField<QDateTime> m_timeStep;
|
bool m_isUsingPseudoLength;
|
||||||
caf::PdmField<QString> m_wellName;
|
caf::PdmField<caf::AppEnum<RifEclipseRftAddress::RftWellLogChannelType>> m_wellLogChannelName;
|
||||||
caf::PdmField< caf::AppEnum< RifEclipseRftAddress::RftWellLogChannelType > > m_wellLogChannelName;
|
|
||||||
|
|
||||||
bool m_isUsingPseudoLength;
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user