diff --git a/ApplicationCode/Application/RiaFractureModelDefines.cpp b/ApplicationCode/Application/RiaFractureModelDefines.cpp index a576c401cc..1e73d7c278 100644 --- a/ApplicationCode/Application/RiaFractureModelDefines.cpp +++ b/ApplicationCode/Application/RiaFractureModelDefines.cpp @@ -23,6 +23,7 @@ namespace caf template <> void AppEnum::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::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 diff --git a/ApplicationCode/Application/RiaFractureModelDefines.h b/ApplicationCode/Application/RiaFractureModelDefines.h index 9affc3bb3b..fee543822d 100644 --- a/ApplicationCode/Application/RiaFractureModelDefines.h +++ b/ApplicationCode/Application/RiaFractureModelDefines.h @@ -26,6 +26,7 @@ namespace RiaDefines { enum class CurveProperty { + UNDEFINED, FACIES, LAYERS, POROSITY, diff --git a/ApplicationCode/Commands/CompletionCommands/RicNewFractureModelPlotFeature.cpp b/ApplicationCode/Commands/CompletionCommands/RicNewFractureModelPlotFeature.cpp index acab55a785..a017a77eda 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicNewFractureModelPlotFeature.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicNewFractureModelPlotFeature.cpp @@ -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", diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureModel.cpp b/ApplicationCode/ProjectDataModel/Completions/RimFractureModel.cpp index d90b32a283..fcbb70d19a 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureModel.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureModel.cpp @@ -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; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureModel.h b/ApplicationCode/ProjectDataModel/Completions/RimFractureModel.h index 8d86c3b65b..aae5c7a3c5 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureModel.h +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureModel.h @@ -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; diff --git a/ApplicationCode/ProjectDataModel/RimFractureModelCurve.cpp b/ApplicationCode/ProjectDataModel/RimFractureModelCurve.cpp index 7e8620d608..2ae54a6a0b 100644 --- a/ApplicationCode/ProjectDataModel/RimFractureModelCurve.cpp +++ b/ApplicationCode/ProjectDataModel/RimFractureModelCurve.cpp @@ -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::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 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(); diff --git a/ApplicationCode/ProjectDataModel/RimFractureModelCurve.h b/ApplicationCode/ProjectDataModel/RimFractureModelCurve.h index 83167091f2..01e557fc21 100644 --- a/ApplicationCode/ProjectDataModel/RimFractureModelCurve.h +++ b/ApplicationCode/ProjectDataModel/RimFractureModelCurve.h @@ -46,7 +46,8 @@ public: enum class MissingValueStrategy { DEFAULT_VALUE, - LINEAR_INTERPOLATION + LINEAR_INTERPOLATION, + OTHER_CURVE_PROPERTY }; RimFractureModelCurve(); diff --git a/ApplicationCode/ProjectDataModel/RimFractureModelPlot.cpp b/ApplicationCode/ProjectDataModel/RimFractureModelPlot.cpp index 959372cd2f..8a8e3ecf8a 100644 --- a/ApplicationCode/ProjectDataModel/RimFractureModelPlot.cpp +++ b/ApplicationCode/ProjectDataModel/RimFractureModelPlot.cpp @@ -93,25 +93,29 @@ void RimFractureModelPlot::applyDataSource() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimFractureModelPlot::getPorosityValues( std::vector& values ) const +void RimFractureModelPlot::getCurvePropertyValues( RiaDefines::CurveProperty curveProperty, std::vector& values ) const { - RimWellLogExtractionCurve* curve = findCurveByProperty( RiaDefines::CurveProperty::POROSITY ); + RimWellLogExtractionCurve* curve = findCurveByProperty( curveProperty ); if ( curve ) { values = curve->curveData()->xValues(); } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFractureModelPlot::getPorosityValues( std::vector& values ) const +{ + getCurvePropertyValues( RiaDefines::CurveProperty::POROSITY, values ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimFractureModelPlot::getFaciesValues( std::vector& values ) const { - RimWellLogExtractionCurve* curve = findCurveByProperty( RiaDefines::CurveProperty::FACIES ); - if ( curve ) - { - values = curve->curveData()->xValues(); - } + getCurvePropertyValues( RiaDefines::CurveProperty::FACIES, values ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimFractureModelPlot.h b/ApplicationCode/ProjectDataModel/RimFractureModelPlot.h index 7c60dd9058..70e8f79842 100644 --- a/ApplicationCode/ProjectDataModel/RimFractureModelPlot.h +++ b/ApplicationCode/ProjectDataModel/RimFractureModelPlot.h @@ -60,6 +60,7 @@ public: void getPorosityValues( std::vector& values ) const; void getFaciesValues( std::vector& values ) const; + void getCurvePropertyValues( RiaDefines::CurveProperty curveProperty, std::vector& values ) const; std::vector calculateTrueVerticalDepth() const; std::vector calculatePorosity() const;