#6212 Fracture Model Plot: Add option use data from other curves when missing values

This commit is contained in:
Kristian Bendiksen
2020-07-10 09:18:45 +02:00
parent 7d7840bb5f
commit b8890defa2
9 changed files with 67 additions and 15 deletions

View File

@@ -22,6 +22,7 @@
#include "RiaCompletionTypeCalculationScheduler.h"
#include "RiaEclipseUnitTools.h"
#include "RiaFractureDefines.h"
#include "RiaFractureModelDefines.h"
#include "RiaLogging.h"
#include "Riu3DMainWindowTools.h"
@@ -591,6 +592,19 @@ double RimFractureModel::getDefaultForMissingValue( const QString& keyword ) con
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiaDefines::CurveProperty RimFractureModel::getDefaultPropertyForMissingValues( const QString& keyword ) const
{
if ( keyword == QString( "PRESSURE" ) )
{
return RiaDefines::CurveProperty::INITIAL_PRESSURE;
}
return RiaDefines::CurveProperty::UNDEFINED;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -19,6 +19,7 @@
#pragma once
#include "RiaEclipseUnitTools.h"
#include "RiaFractureModelDefines.h"
#include "RimCheckableNamedObject.h"
#include "RimWellPathComponentInterface.h"
@@ -100,10 +101,11 @@ public:
void setElasticProperties( RimElasticProperties* elasticProperties );
RimElasticProperties* elasticProperties() const;
double getDefaultForMissingOverburdenValue( const QString& keyword ) const;
double getDefaultForMissingUnderburdenValue( const QString& keyword ) const;
double getDefaultForMissingValue( const QString& keyword ) const;
void updateReferringPlots();
RiaDefines::CurveProperty getDefaultPropertyForMissingValues( const QString& keyword ) const;
double getDefaultForMissingOverburdenValue( const QString& keyword ) const;
double getDefaultForMissingUnderburdenValue( const QString& keyword ) const;
double getDefaultForMissingValue( const QString& keyword ) const;
void updateReferringPlots();
protected:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;

View File

@@ -18,6 +18,7 @@
#include "RimFractureModelCurve.h"
#include "RiaFractureModelDefines.h"
#include "RigEclipseCaseData.h"
#include "RigEclipseWellLogExtractor.h"
#include "RigResultAccessorFactory.h"
@@ -61,6 +62,9 @@ void caf::AppEnum<RimFractureModelCurve::MissingValueStrategy>::setUp()
addItem( RimFractureModelCurve::MissingValueStrategy::LINEAR_INTERPOLATION,
"LINEAR_INTERPOLATION",
"Linear interpolation" );
addItem( RimFractureModelCurve::MissingValueStrategy::OTHER_CURVE_PROPERTY,
"OTHER_CURVE_PROPERTY",
"Other Curve Property" );
setDefault( RimFractureModelCurve::MissingValueStrategy::DEFAULT_VALUE );
}
@@ -279,12 +283,36 @@ void RimFractureModelCurve::performDataExtraction( bool* isUsingPseudoLength )
replaceMissingValues( values, defaultValue );
}
}
else
else if ( m_missingValueStrategy() == RimFractureModelCurve::MissingValueStrategy::LINEAR_INTERPOLATION )
{
RiaLogging::info(
QString( "Interpolating missing values for %1" ).arg( m_eclipseResultDefinition()->resultVariable() ) );
RiaInterpolationTools::interpolateMissingValues( measuredDepthValues, values );
}
else
{
// Get the missing data from other curve
RimFractureModelPlot* fractureModelPlot;
firstAncestorOrThisOfType( fractureModelPlot );
if ( !fractureModelPlot )
{
RiaLogging::error( QString( "No replacement data found for fracture model curve." ) );
return;
}
RiaDefines::CurveProperty replacementProperty = m_fractureModel->getDefaultPropertyForMissingValues(
m_eclipseResultDefinition.value()->resultVariable() );
std::vector<double> initialValues;
fractureModelPlot->getCurvePropertyValues( replacementProperty, initialValues );
if ( initialValues.empty() )
{
RiaLogging::error( QString( "Empty replacement data found for fracture model curve." ) );
return;
}
replaceMissingValues( values, initialValues );
}
}
RiaEclipseUnitTools::UnitSystem eclipseUnitsType = eclipseCase->eclipseCaseData()->unitsType();

View File

@@ -46,7 +46,8 @@ public:
enum class MissingValueStrategy
{
DEFAULT_VALUE,
LINEAR_INTERPOLATION
LINEAR_INTERPOLATION,
OTHER_CURVE_PROPERTY
};
RimFractureModelCurve();

View File

@@ -93,25 +93,29 @@ void RimFractureModelPlot::applyDataSource()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFractureModelPlot::getPorosityValues( std::vector<double>& values ) const
void RimFractureModelPlot::getCurvePropertyValues( RiaDefines::CurveProperty curveProperty, std::vector<double>& values ) const
{
RimWellLogExtractionCurve* curve = findCurveByProperty( RiaDefines::CurveProperty::POROSITY );
RimWellLogExtractionCurve* curve = findCurveByProperty( curveProperty );
if ( curve )
{
values = curve->curveData()->xValues();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFractureModelPlot::getPorosityValues( std::vector<double>& values ) const
{
getCurvePropertyValues( RiaDefines::CurveProperty::POROSITY, values );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFractureModelPlot::getFaciesValues( std::vector<double>& values ) const
{
RimWellLogExtractionCurve* curve = findCurveByProperty( RiaDefines::CurveProperty::FACIES );
if ( curve )
{
values = curve->curveData()->xValues();
}
getCurvePropertyValues( RiaDefines::CurveProperty::FACIES, values );
}
//--------------------------------------------------------------------------------------------------

View File

@@ -60,6 +60,7 @@ public:
void getPorosityValues( std::vector<double>& values ) const;
void getFaciesValues( std::vector<double>& values ) const;
void getCurvePropertyValues( RiaDefines::CurveProperty curveProperty, std::vector<double>& values ) const;
std::vector<double> calculateTrueVerticalDepth() const;
std::vector<double> calculatePorosity() const;