mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#6301 Make sure mud weight window parameters consistent.
The values are now propagated from rim to rig.
This commit is contained in:
parent
6e4bfaf2c3
commit
4049d5ca93
@ -381,6 +381,8 @@ RimGeoMechCase::CaseOpenStatus RimGeoMechCase::openGeoMechCase( std::string* err
|
|||||||
|
|
||||||
m_geoMechCaseData = geoMechCaseData;
|
m_geoMechCaseData = geoMechCaseData;
|
||||||
|
|
||||||
|
m_mudWeightWindowParameters->updateFemPartResults();
|
||||||
|
|
||||||
return CASE_OPEN_OK;
|
return CASE_OPEN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,6 +158,19 @@ RimMudWeightWindowParameters::RimMudWeightWindowParameters( void )
|
|||||||
CAF_PDM_InitField( &m_obg0Address, "obg0Address", QString( "" ), "Value", "", "", "" );
|
CAF_PDM_InitField( &m_obg0Address, "obg0Address", QString( "" ), "Value", "", "", "" );
|
||||||
m_obg0Address.uiCapability()->setUiEditorTypeName( caf::PdmUiListEditor::uiEditorTypeName() );
|
m_obg0Address.uiCapability()->setUiEditorTypeName( caf::PdmUiListEditor::uiEditorTypeName() );
|
||||||
|
|
||||||
|
m_parameterFields[RimMudWeightWindowParameters::ParameterType::WELL_DEVIATION] =
|
||||||
|
std::make_tuple( &m_wellDeviationType, &m_wellDeviationFixed, &m_wellDeviationAddress );
|
||||||
|
m_parameterFields[RimMudWeightWindowParameters::ParameterType::WELL_AZIMUTH] =
|
||||||
|
std::make_tuple( &m_wellAzimuthType, &m_wellAzimuthFixed, &m_wellAzimuthAddress );
|
||||||
|
m_parameterFields[RimMudWeightWindowParameters::ParameterType::UCS] =
|
||||||
|
std::make_tuple( &m_UCSType, &m_UCSFixed, &m_UCSAddress );
|
||||||
|
m_parameterFields[RimMudWeightWindowParameters::ParameterType::POISSONS_RATIO] =
|
||||||
|
std::make_tuple( &m_poissonsRatioType, &m_poissonsRatioFixed, &m_poissonsRatioAddress );
|
||||||
|
m_parameterFields[RimMudWeightWindowParameters::ParameterType::K0_FG] =
|
||||||
|
std::make_tuple( &m_K0_FGType, &m_K0_FGFixed, &m_K0_FGAddress );
|
||||||
|
m_parameterFields[RimMudWeightWindowParameters::ParameterType::OBG0] =
|
||||||
|
std::make_tuple( &m_obg0Type, &m_obg0Fixed, &m_obg0Address );
|
||||||
|
|
||||||
CAF_PDM_InitField( &m_airGap, "AirGap", 0.0, "Air Gap", "", "", "" );
|
CAF_PDM_InitField( &m_airGap, "AirGap", 0.0, "Air Gap", "", "", "" );
|
||||||
|
|
||||||
CAF_PDM_InitField( &m_shMultiplier, "SHMultiplier", 1.05, "SH Multplier for FG in Shale", "", "", "" );
|
CAF_PDM_InitField( &m_shMultiplier, "SHMultiplier", 1.05, "SH Multplier for FG in Shale", "", "", "" );
|
||||||
@ -620,3 +633,74 @@ QList<caf::PdmOptionItemInfo>
|
|||||||
|
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimMudWeightWindowParameters::updateFemPartResults() const
|
||||||
|
{
|
||||||
|
RimGeoMechCase* geoMechCase = nullptr;
|
||||||
|
firstAncestorOrThisOfType( geoMechCase );
|
||||||
|
if ( !geoMechCase )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RigGeoMechCaseData* rigCaseData = geoMechCase->geoMechData();
|
||||||
|
if ( !rigCaseData )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( size_t i = 0; i < caf::AppEnum<ParameterType>::size(); ++i )
|
||||||
|
{
|
||||||
|
updateFemPartsForParameter( caf::AppEnum<ParameterType>::fromIndex( i ), rigCaseData );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure the reference layer is valid
|
||||||
|
int referenceLayer = m_referenceLayer();
|
||||||
|
if ( referenceLayer == -1 )
|
||||||
|
{
|
||||||
|
referenceLayer =
|
||||||
|
(int)rigCaseData->femParts()->part( 0 )->getOrCreateStructGrid()->reservoirIJKBoundingBox().first.z();
|
||||||
|
}
|
||||||
|
|
||||||
|
rigCaseData->femPartResults()->setMudWeightWindowParameters( m_airGap,
|
||||||
|
m_upperLimitType.value(),
|
||||||
|
m_lowerLimitType.value(),
|
||||||
|
referenceLayer,
|
||||||
|
m_fractureGradientCalculationType.value(),
|
||||||
|
m_shMultiplier,
|
||||||
|
m_porePressureNonReservoirSource.value(),
|
||||||
|
m_userDefinedPPNonReservoir,
|
||||||
|
m_porePressureNonReservoirAddress );
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimMudWeightWindowParameters::updateFemPartsForParameter( ParameterType parameterType,
|
||||||
|
RigGeoMechCaseData* rigCaseData ) const
|
||||||
|
{
|
||||||
|
auto it = m_parameterFields.find( parameterType );
|
||||||
|
if ( it == m_parameterFields.end() ) return;
|
||||||
|
|
||||||
|
caf::PdmField<caf::AppEnum<SourceType>>* typeField = std::get<0>( it->second );
|
||||||
|
caf::PdmField<double>* fixedField = std::get<1>( it->second );
|
||||||
|
caf::PdmField<QString>* addressField = std::get<2>( it->second );
|
||||||
|
|
||||||
|
if ( rigCaseData->femPartResults() )
|
||||||
|
{
|
||||||
|
if ( typeField->value() == RimMudWeightWindowParameters::SourceType::FIXED ||
|
||||||
|
typeField->value() == RimMudWeightWindowParameters::SourceType::GRID )
|
||||||
|
{
|
||||||
|
rigCaseData->femPartResults()->setCalculationParameters( parameterType, "", fixedField->value() );
|
||||||
|
}
|
||||||
|
else if ( typeField->value() == RimMudWeightWindowParameters::SourceType::PER_ELEMENT )
|
||||||
|
{
|
||||||
|
rigCaseData->femPartResults()->setCalculationParameters( parameterType,
|
||||||
|
addressField->value(),
|
||||||
|
fixedField->value() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -21,7 +21,10 @@
|
|||||||
#include "cafPdmField.h"
|
#include "cafPdmField.h"
|
||||||
#include "cafPdmObject.h"
|
#include "cafPdmObject.h"
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
class RimGeoMechCase;
|
class RimGeoMechCase;
|
||||||
|
class RigGeoMechCaseData;
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
@ -97,6 +100,8 @@ public:
|
|||||||
|
|
||||||
double airGap() const;
|
double airGap() const;
|
||||||
|
|
||||||
|
void updateFemPartResults() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
||||||
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
||||||
@ -120,6 +125,8 @@ private:
|
|||||||
caf::PdmField<QString>* addressField,
|
caf::PdmField<QString>* addressField,
|
||||||
bool typeFieldChanged );
|
bool typeFieldChanged );
|
||||||
|
|
||||||
|
void updateFemPartsForParameter( ParameterType parameterType, RigGeoMechCaseData* rigCaseData ) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
caf::PdmField<caf::AppEnum<SourceType>> m_wellDeviationType;
|
caf::PdmField<caf::AppEnum<SourceType>> m_wellDeviationType;
|
||||||
caf::PdmField<double> m_wellDeviationFixed;
|
caf::PdmField<double> m_wellDeviationFixed;
|
||||||
@ -145,6 +152,9 @@ private:
|
|||||||
caf::PdmField<double> m_obg0Fixed;
|
caf::PdmField<double> m_obg0Fixed;
|
||||||
caf::PdmField<QString> m_obg0Address;
|
caf::PdmField<QString> m_obg0Address;
|
||||||
|
|
||||||
|
typedef std::tuple<caf::PdmField<caf::AppEnum<SourceType>>*, caf::PdmField<double>*, caf::PdmField<QString>*> ParameterPdmFields;
|
||||||
|
std::map<ParameterType, ParameterPdmFields> m_parameterFields;
|
||||||
|
|
||||||
caf::PdmField<double> m_airGap;
|
caf::PdmField<double> m_airGap;
|
||||||
caf::PdmField<double> m_shMultiplier;
|
caf::PdmField<double> m_shMultiplier;
|
||||||
caf::PdmField<double> m_userDefinedPPNonReservoir;
|
caf::PdmField<double> m_userDefinedPPNonReservoir;
|
||||||
|
Loading…
Reference in New Issue
Block a user