mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
(#399) WellLog extraction from GeoMech cases works.
Needs more testing, and performance must be fixed see (#415)
This commit is contained in:
@@ -133,7 +133,6 @@ void RimWellLogExtractionCurve::updatePlotData()
|
||||
|
||||
std::vector<double> filteredValues;
|
||||
std::vector<double> filteredDepths;
|
||||
bool hasData = false;
|
||||
|
||||
if (eclExtractor.notNull())
|
||||
{
|
||||
@@ -153,32 +152,28 @@ void RimWellLogExtractionCurve::updatePlotData()
|
||||
if (resAcc.notNull())
|
||||
{
|
||||
eclExtractor->curveData(resAcc.p(), &values);
|
||||
hasData = true;
|
||||
}
|
||||
|
||||
// Remove values that are too difficult for Qwt to handle
|
||||
|
||||
filteredValues.reserve(values.size());
|
||||
filteredDepths.reserve(values.size());
|
||||
for (size_t vIdx = 0; vIdx < values.size(); ++vIdx)
|
||||
{
|
||||
if (values[vIdx] == HUGE_VAL || values[vIdx] == -HUGE_VAL || (values[vIdx] != values[vIdx]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
filterPlotValues( depthValues, filteredDepths,
|
||||
values, filteredValues );
|
||||
|
||||
filteredDepths.push_back(depthValues[vIdx]);
|
||||
filteredValues.push_back(values[vIdx]);
|
||||
}
|
||||
}
|
||||
else if (false) // geomExtractor
|
||||
else if (geomExtractor.notNull()) // geomExtractor
|
||||
{
|
||||
// Todo: do geomech log extraction
|
||||
const std::vector<double>& depthValues = geomExtractor->measuredDepth();
|
||||
m_geomResultDefinition->loadResult();
|
||||
std::vector<double> values;
|
||||
geomExtractor->curveData(m_geomResultDefinition->resultAddress() , m_timeStep, &values);
|
||||
|
||||
|
||||
filterPlotValues( depthValues, filteredDepths,
|
||||
values, filteredValues );
|
||||
|
||||
}
|
||||
|
||||
m_plotCurve->setSamples(filteredValues.data(), filteredDepths.data(), (int)filteredValues.size());
|
||||
|
||||
if (hasData)
|
||||
if (filteredValues.size())
|
||||
{
|
||||
RimWellLogPlot* wellLogPlot;
|
||||
firstAnchestorOrThisOfType(wellLogPlot);
|
||||
@@ -319,4 +314,26 @@ void RimWellLogExtractionCurve::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiT
|
||||
uiTreeOrdering.setForgetRemainingFields(true);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimWellLogExtractionCurve::filterPlotValues(const std::vector<double>& depthValues, std::vector<double> &filteredDepths,
|
||||
const std::vector<double> &values, std::vector<double> &filteredValues )
|
||||
{
|
||||
// Remove values that are too difficult for Qwt to handle
|
||||
|
||||
filteredValues.reserve(values.size());
|
||||
filteredDepths.reserve(values.size());
|
||||
for (size_t vIdx = 0; vIdx < values.size(); ++vIdx)
|
||||
{
|
||||
if (values[vIdx] == HUGE_VAL || values[vIdx] == -HUGE_VAL || (values[vIdx] != values[vIdx]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
filteredDepths.push_back(depthValues[vIdx]);
|
||||
filteredValues.push_back(values[vIdx]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -52,6 +52,9 @@ protected:
|
||||
|
||||
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "");
|
||||
|
||||
void filterPlotValues(const std::vector<double>& depthValues, std::vector<double> &filteredDepths,
|
||||
const std::vector<double> &values, std::vector<double> &filteredValues );
|
||||
|
||||
caf::PdmPtrField<RimWellPath*> m_wellPath;
|
||||
caf::PdmPtrField<RimCase*> m_case;
|
||||
caf::PdmChildField<RimEclipseResultDefinition*> m_eclipseResultDefinition;
|
||||
|
||||
@@ -80,24 +80,24 @@ RigEclipseWellLogExtractor* RimWellLogPlotCollection::findOrCreateExtractor(RimW
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RigGeoMechWellLogExtractor* RimWellLogPlotCollection::findOrCreateExtractor(RimWellPath* wellPath, RimGeoMechCase* eclCase)
|
||||
RigGeoMechWellLogExtractor* RimWellLogPlotCollection::findOrCreateExtractor(RimWellPath* wellPath, RimGeoMechCase* geomCase)
|
||||
{
|
||||
if (!(wellPath && eclCase && wellPath->wellPathGeometry() && eclCase->geoMechData()))
|
||||
if (!(wellPath && geomCase && wellPath->wellPathGeometry() && geomCase->geoMechData()))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
RigGeoMechCaseData* eclCaseData = eclCase->geoMechData();
|
||||
RigGeoMechCaseData* geomCaseData = geomCase->geoMechData();
|
||||
RigWellPath* wellPathGeom = wellPath->wellPathGeometry();
|
||||
for (size_t exIdx = 0; exIdx < m_geomExtractors.size(); ++exIdx)
|
||||
{
|
||||
if (m_geomExtractors[exIdx]->caseData() == eclCaseData && m_geomExtractors[exIdx]->wellPathData() == wellPathGeom)
|
||||
if (m_geomExtractors[exIdx]->caseData() == geomCaseData && m_geomExtractors[exIdx]->wellPathData() == wellPathGeom)
|
||||
{
|
||||
return m_geomExtractors[exIdx].p();
|
||||
}
|
||||
}
|
||||
|
||||
cvf::ref<RigGeoMechWellLogExtractor> extractor = new RigGeoMechWellLogExtractor(eclCaseData, wellPathGeom);
|
||||
cvf::ref<RigGeoMechWellLogExtractor> extractor = new RigGeoMechWellLogExtractor(geomCaseData, wellPathGeom);
|
||||
m_geomExtractors.push_back(extractor.p());
|
||||
|
||||
return extractor.p();
|
||||
|
||||
Reference in New Issue
Block a user