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_mudWeightWindowParameters->updateFemPartResults();
|
||||
|
||||
return CASE_OPEN_OK;
|
||||
}
|
||||
|
||||
|
@ -158,6 +158,19 @@ RimMudWeightWindowParameters::RimMudWeightWindowParameters( void )
|
||||
CAF_PDM_InitField( &m_obg0Address, "obg0Address", QString( "" ), "Value", "", "", "" );
|
||||
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_shMultiplier, "SHMultiplier", 1.05, "SH Multplier for FG in Shale", "", "", "" );
|
||||
@ -620,3 +633,74 @@ QList<caf::PdmOptionItemInfo>
|
||||
|
||||
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 "cafPdmObject.h"
|
||||
|
||||
#include <map>
|
||||
|
||||
class RimGeoMechCase;
|
||||
class RigGeoMechCaseData;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
@ -97,6 +100,8 @@ public:
|
||||
|
||||
double airGap() const;
|
||||
|
||||
void updateFemPartResults() const;
|
||||
|
||||
private:
|
||||
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
||||
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
||||
@ -120,6 +125,8 @@ private:
|
||||
caf::PdmField<QString>* addressField,
|
||||
bool typeFieldChanged );
|
||||
|
||||
void updateFemPartsForParameter( ParameterType parameterType, RigGeoMechCaseData* rigCaseData ) const;
|
||||
|
||||
private:
|
||||
caf::PdmField<caf::AppEnum<SourceType>> m_wellDeviationType;
|
||||
caf::PdmField<double> m_wellDeviationFixed;
|
||||
@ -145,6 +152,9 @@ private:
|
||||
caf::PdmField<double> m_obg0Fixed;
|
||||
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_shMultiplier;
|
||||
caf::PdmField<double> m_userDefinedPPNonReservoir;
|
||||
|
Loading…
Reference in New Issue
Block a user