mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#6212 Fracture Model Plot: Add option use data from other curves when missing values
This commit is contained in:
parent
7d7840bb5f
commit
b8890defa2
@ -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
|
||||
|
@ -26,6 +26,7 @@ namespace RiaDefines
|
||||
{
|
||||
enum class CurveProperty
|
||||
{
|
||||
UNDEFINED,
|
||||
FACIES,
|
||||
LAYERS,
|
||||
POROSITY,
|
||||
|
@ -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",
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -46,7 +46,8 @@ public:
|
||||
enum class MissingValueStrategy
|
||||
{
|
||||
DEFAULT_VALUE,
|
||||
LINEAR_INTERPOLATION
|
||||
LINEAR_INTERPOLATION,
|
||||
OTHER_CURVE_PROPERTY
|
||||
};
|
||||
|
||||
RimFractureModelCurve();
|
||||
|
@ -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 );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user