#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

@ -23,6 +23,7 @@ namespace caf
template <>
void AppEnum<RiaDefines::CurveProperty>::setUp()
{
addItem( RiaDefines::CurveProperty::UNDEFINED, "UNDEFINED", "Undefined" );
addItem( RiaDefines::CurveProperty::FACIES, "FACIES", "Facies" );
addItem( RiaDefines::CurveProperty::LAYERS, "LAYERS", "Layers" );
addItem( RiaDefines::CurveProperty::POROSITY, "POROSITY", "Porosity" );
@ -40,6 +41,6 @@ void AppEnum<RiaDefines::CurveProperty>::setUp()
addItem( RiaDefines::CurveProperty::K0, "K0", "k0" );
addItem( RiaDefines::CurveProperty::FLUID_LOSS_COEFFICIENT, "FLUID_LOSS_COEFFICIENT", "Fluid Loss Coefficient" );
addItem( RiaDefines::CurveProperty::SPURT_LOSS, "SPURT_LOSS", "Spurt Loss" );
setDefault( RiaDefines::CurveProperty::FACIES );
setDefault( RiaDefines::CurveProperty::UNDEFINED );
}
}; // namespace caf

View File

@ -26,6 +26,7 @@ namespace RiaDefines
{
enum class CurveProperty
{
UNDEFINED,
FACIES,
LAYERS,
POROSITY,

View File

@ -100,7 +100,7 @@ RimFractureModelPlot*
plots["Pressure"] = {std::make_tuple( "PRESSURE",
RiaDefines::ResultCatType::DYNAMIC_NATIVE,
RimFractureModelCurve::MissingValueStrategy::LINEAR_INTERPOLATION,
RimFractureModelCurve::MissingValueStrategy::OTHER_CURVE_PROPERTY,
false,
RiaDefines::CurveProperty::PRESSURE ),
std::make_tuple( "PRESSURE",

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;