#6284 Mud Weight Window: add option for non-reservoir pore pressure data.

This commit is contained in:
Kristian Bendiksen 2020-08-10 19:30:41 +02:00
parent e3628906c8
commit e93c4e75f2
4 changed files with 74 additions and 11 deletions

View File

@ -23,6 +23,7 @@
#include "RifElementPropertyReader.h"
#include "RifGeoMechReaderInterface.h"
#include "RimMudWeightWindowParameters.h"
#ifdef USE_ODB_API
#include "RifOdbReader.h"
@ -1707,9 +1708,18 @@ double RigFemPartResultsCollection::shMultiplierMudWeightWindow() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMudWeightWindowParameters::UpperLimitType RigFemPartResultsCollection::upperLimitParameterMudWeightWindow() const
double RigFemPartResultsCollection::hydrostaticMultiplierPPNonRes() const
{
return m_upperLimitParameterMudWeightWindow;
return m_hydrostaticMultiplierPPNonResMudWeightWindow;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMudWeightWindowParameters::NonReservoirPorePressureType
RigFemPartResultsCollection::nonReservoirPorePressureTypeMudWeightWindow() const
{
return m_nonReservoirPorePressureTypeMudWeightWindow;
}
//--------------------------------------------------------------------------------------------------
@ -1720,6 +1730,14 @@ RimMudWeightWindowParameters::LowerLimitType RigFemPartResultsCollection::lowerL
return m_lowerLimitParameterMudWeightWindow;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMudWeightWindowParameters::UpperLimitType RigFemPartResultsCollection::upperLimitParameterMudWeightWindow() const
{
return m_upperLimitParameterMudWeightWindow;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -1737,7 +1755,9 @@ void RigFemPartResultsCollection::setMudWeightWindowParameters(
RimMudWeightWindowParameters::LowerLimitType lowerLimit,
int referenceLayer,
RimMudWeightWindowParameters::FractureGradientCalculationType fgCalculationType,
double shMultiplier )
double shMultiplier,
RimMudWeightWindowParameters::NonReservoirPorePressureType nonReservoirPorePressureType,
double hydrostaticMultiplierPPNonRes )
{
m_airGapMudWeightWindow = airGap;
m_upperLimitParameterMudWeightWindow = upperLimit;
@ -1745,6 +1765,8 @@ void RigFemPartResultsCollection::setMudWeightWindowParameters(
m_referenceLayerMudWeightWindow = referenceLayer;
m_fractureGradientCalculationTypeMudWeightWindow = fgCalculationType;
m_shMultiplierMudWeightWindow = shMultiplier;
m_nonReservoirPorePressureTypeMudWeightWindow = nonReservoirPorePressureType;
m_hydrostaticMultiplierPPNonResMudWeightWindow = hydrostaticMultiplierPPNonRes;
// Invalidate dependent results
for ( auto result : mudWeightWindowResults() )

View File

@ -88,15 +88,21 @@ public:
double getCalculationParameterValue( RimMudWeightWindowParameters::ParameterType ) const;
QString getCalculationParameterAddress( RimMudWeightWindowParameters::ParameterType ) const;
void setMudWeightWindowParameters( double airGap,
RimMudWeightWindowParameters::UpperLimitType upperLimit,
RimMudWeightWindowParameters::LowerLimitType lowerLimit,
int referenceLayer,
RimMudWeightWindowParameters::FractureGradientCalculationType fgCalculationType,
double shMultiplier );
void setMudWeightWindowParameters( double airGap,
RimMudWeightWindowParameters::UpperLimitType upperLimit,
RimMudWeightWindowParameters::LowerLimitType lowerLimit,
int referenceLayer,
RimMudWeightWindowParameters::FractureGradientCalculationType fgCalculationType,
double shMultiplier,
RimMudWeightWindowParameters::NonReservoirPorePressureType nonReservoirPorePressureType,
double hydroStaticMultiplierPPNonRes );
double airGapMudWeightWindow() const;
double shMultiplierMudWeightWindow() const;
double hydrostaticMultiplierPPNonRes() const;
RimMudWeightWindowParameters::NonReservoirPorePressureType nonReservoirPorePressureTypeMudWeightWindow() const;
RimMudWeightWindowParameters::UpperLimitType upperLimitParameterMudWeightWindow() const;
RimMudWeightWindowParameters::LowerLimitType lowerLimitParameterMudWeightWindow() const;
size_t referenceLayerMudWeightWindow() const;
@ -209,6 +215,9 @@ private:
RimMudWeightWindowParameters::LowerLimitType m_lowerLimitParameterMudWeightWindow;
RimMudWeightWindowParameters::FractureGradientCalculationType m_fractureGradientCalculationTypeMudWeightWindow;
RimMudWeightWindowParameters::NonReservoirPorePressureType m_nonReservoirPorePressureTypeMudWeightWindow;
double m_hydrostaticMultiplierPPNonResMudWeightWindow;
std::map<RimMudWeightWindowParameters::ParameterType, QString> parameterAddresses;
std::map<RimMudWeightWindowParameters::ParameterType, double> parameterValues;

View File

@ -89,6 +89,16 @@ void caf::AppEnum<RimMudWeightWindowParameters::FractureGradientCalculationType>
setDefault( RimMudWeightWindowParameters::FractureGradientCalculationType::DERIVED_FROM_K0FG );
}
template <>
void caf::AppEnum<RimMudWeightWindowParameters::NonReservoirPorePressureType>::setUp()
{
addItem( RimMudWeightWindowParameters::NonReservoirPorePressureType::HYDROSTATIC, "PORE_PRESSURE", "Pore Pressure" );
addItem( RimMudWeightWindowParameters::NonReservoirPorePressureType::PER_ELEMENT,
"PER_ELEMENT",
"From element properties" );
setDefault( RimMudWeightWindowParameters::NonReservoirPorePressureType::HYDROSTATIC );
}
} // End namespace caf
//--------------------------------------------------------------------------------------------------
@ -169,6 +179,17 @@ RimMudWeightWindowParameters::RimMudWeightWindowParameters( void )
"",
"" );
caf::AppEnum<NonReservoirPorePressureType> defaultNonReservoirPorePressureType =
RimMudWeightWindowParameters::NonReservoirPorePressureType::HYDROSTATIC;
CAF_PDM_InitField( &m_porePressureNonReservoirSource,
"PorePressureNonReservoirSource",
defaultNonReservoirPorePressureType,
"Non-Reservoir Pore Pressure",
"",
"Data source for Non-Reservoir Pore Pressure",
"" );
CAF_PDM_InitField( &m_userDefinedPPNonReservoir, "UserPPNonReservoir", 1.0, " Multiplier of hydrostatic PP", "", "", "" );
CAF_PDM_InitField( &m_referenceLayer, "ReferenceLayer", -1, "Reference Layer", "", "", "" );
}
@ -363,7 +384,8 @@ void RimMudWeightWindowParameters::fieldChangedByUi( const caf::PdmFieldHandle*
}
else if ( changedField == &m_airGap || changedField == &m_upperLimitType || changedField == &m_lowerLimitType ||
changedField == &m_referenceLayer || changedField == &m_fractureGradientCalculationType ||
changedField == &m_shMultiplier )
changedField == &m_shMultiplier || changedField == &m_porePressureNonReservoirSource ||
changedField == &m_userDefinedPPNonReservoir )
{
RigGeoMechCaseData* rigCaseData = geoMechCase->geoMechData();
if ( rigCaseData && rigCaseData->femPartResults() )
@ -373,7 +395,9 @@ void RimMudWeightWindowParameters::fieldChangedByUi( const caf::PdmFieldHandle*
m_lowerLimitType.value(),
m_referenceLayer,
m_fractureGradientCalculationType.value(),
m_shMultiplier );
m_shMultiplier,
m_porePressureNonReservoirSource.value(),
m_userDefinedPPNonReservoir );
geoMechCase->updateConnectedViews();
}
}

View File

@ -67,6 +67,12 @@ public:
PROPORTIONAL_TO_SH
};
enum class NonReservoirPorePressureType
{
HYDROSTATIC,
PER_ELEMENT
};
RimMudWeightWindowParameters( void );
SourceType wellDeviationType() const;
@ -141,10 +147,12 @@ private:
caf::PdmField<double> m_airGap;
caf::PdmField<double> m_shMultiplier;
caf::PdmField<double> m_userDefinedPPNonReservoir;
caf::PdmField<caf::AppEnum<UpperLimitType>> m_upperLimitType;
caf::PdmField<caf::AppEnum<LowerLimitType>> m_lowerLimitType;
caf::PdmField<caf::AppEnum<FractureGradientCalculationType>> m_fractureGradientCalculationType;
caf::PdmField<caf::AppEnum<NonReservoirPorePressureType>> m_porePressureNonReservoirSource;
caf::PdmField<int> m_referenceLayer;
};