MSW : Restore MSW settings per completion type

Remove the common MSW settings on well path
This commit is contained in:
Magne Sjaastad
2021-03-10 11:32:42 +01:00
parent 51b72ce7be
commit 2e643edc35
13 changed files with 155 additions and 138 deletions

View File

@@ -57,11 +57,10 @@ RimFishbonesCollection::RimFishbonesCollection()
CAF_PDM_InitField( &m_startMD, "StartMD", HUGE_VAL, "Start MD", "", "", "" );
CAF_PDM_InitField( &m_mainBoreDiameter, "MainBoreDiameter", 0.216, "Main Bore Diameter", "", "", "" );
CAF_PDM_InitField( &m_skinFactor, "MainBoreSkinFactor", 0., "Main Bore Skin Factor [0..1]", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_mswParameters_OBSOLETE, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
m_mswParameters_OBSOLETE = new RimMswCompletionParameters( false );
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeHidden( true );
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeChildrenHidden( true );
m_mswParameters_OBSOLETE.xmlCapability()->setIOWritable( false );
CAF_PDM_InitFieldNoDefault( &m_mswParameters, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
m_mswParameters = new RimMswCompletionParameters( false );
m_mswParameters.uiCapability()->setUiTreeHidden( true );
m_mswParameters.uiCapability()->setUiTreeChildrenHidden( true );
manuallyModifiedStartMD = false;
// Moved to RimMswCompletionParameters and obsoleted
@@ -136,6 +135,8 @@ void RimFishbonesCollection::defineUiOrdering( QString uiConfigName, caf::PdmUiO
wellGroup->add( &m_startMD );
wellGroup->add( &m_mainBoreDiameter );
wellGroup->add( &m_skinFactor );
caf::PdmUiGroup* mswGroup = uiOrdering.addNewGroup( "Multi Segment Well Options" );
m_mswParameters->uiOrdering( uiConfigName, *mswGroup );
uiOrdering.skipRemainingFields( true );
}
@@ -146,19 +147,19 @@ void RimFishbonesCollection::initAfterRead()
{
if ( m_linerDiameter_OBSOLETE() != m_linerDiameter_OBSOLETE.defaultValue() )
{
m_mswParameters_OBSOLETE->setLinerDiameter( m_linerDiameter_OBSOLETE() );
m_mswParameters->setLinerDiameter( m_linerDiameter_OBSOLETE() );
}
if ( m_roughnessFactor_OBSOLETE() != m_roughnessFactor_OBSOLETE.defaultValue() )
{
m_mswParameters_OBSOLETE->setRoughnessFactor( m_roughnessFactor_OBSOLETE() );
m_mswParameters->setRoughnessFactor( m_roughnessFactor_OBSOLETE() );
}
if ( m_pressureDrop_OBSOLETE() != m_pressureDrop_OBSOLETE.defaultValue() )
{
m_mswParameters_OBSOLETE->setPressureDrop( m_pressureDrop_OBSOLETE() );
m_mswParameters->setPressureDrop( m_pressureDrop_OBSOLETE() );
}
if ( m_lengthAndDepth_OBSOLETE() != m_lengthAndDepth_OBSOLETE.defaultValue() )
{
m_mswParameters_OBSOLETE->setLengthAndDepth( m_lengthAndDepth_OBSOLETE() );
m_mswParameters->setLengthAndDepth( m_lengthAndDepth_OBSOLETE() );
}
}
@@ -174,6 +175,14 @@ void RimFishbonesCollection::appendFishbonesSubs( RimFishbones* subs )
subs->recomputeLateralLocations();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const RimMswCompletionParameters* RimFishbonesCollection::mswParameters() const
{
return m_mswParameters();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -46,6 +46,7 @@ public:
RimImportedFishboneLateralsCollection* wellPathCollection() const;
void appendFishbonesSubs( RimFishbones* subs );
const RimMswCompletionParameters* mswParameters() const;
bool hasFishbones() const;
std::vector<RimFishbones*> activeFishbonesSubs() const;
@@ -69,6 +70,7 @@ private:
private:
caf::PdmChildArrayField<RimFishbones*> m_fishbones;
caf::PdmChildField<RimImportedFishboneLateralsCollection*> m_wellPathCollection;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
caf::PdmField<double> m_startMD;
caf::PdmField<double> m_skinFactor;
@@ -80,5 +82,4 @@ private:
caf::PdmField<RimMswCompletionParameters::PressureDropEnum> m_pressureDrop_OBSOLETE;
caf::PdmField<RimMswCompletionParameters::LengthAndDepthEnum> m_lengthAndDepth_OBSOLETE;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters_OBSOLETE;
};

View File

@@ -60,10 +60,10 @@ RimPerforationCollection::RimPerforationCollection()
CAF_PDM_InitFieldNoDefault( &m_perforations, "Perforations", "Perforations", "", "", "" );
m_perforations.uiCapability()->setUiHidden( true );
CAF_PDM_InitFieldNoDefault( &m_mswParameters_OBSOLETE, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
m_mswParameters_OBSOLETE = new RimMswCompletionParameters;
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeHidden( true );
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitFieldNoDefault( &m_mswParameters, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
m_mswParameters = new RimMswCompletionParameters;
m_mswParameters.uiCapability()->setUiTreeHidden( true );
m_mswParameters.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitFieldNoDefault( &m_nonDarcyParameters, "NonDarcyParameters", "Non-Darcy Parameters", "", "", "" );
m_nonDarcyParameters = new RimNonDarcyPerforationParameters();
@@ -176,13 +176,21 @@ std::vector<const RimPerforationInterval*> RimPerforationCollection::activePerfo
return myActivePerforations;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMswCompletionParameters* RimPerforationCollection::mswParameters() const
{
return m_mswParameters();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPerforationCollection::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
caf::PdmUiGroup* mswGroup = uiOrdering.addNewGroup( "Multi Segment Well Options" );
m_mswParameters_OBSOLETE->uiOrdering( uiConfigName, *mswGroup );
m_mswParameters->uiOrdering( uiConfigName, *mswGroup );
m_nonDarcyParameters->uiOrdering( uiConfigName, uiOrdering );
uiOrdering.skipRemainingFields( true );
}

View File

@@ -56,6 +56,8 @@ public:
std::vector<const RimPerforationInterval*> perforations() const;
std::vector<const RimPerforationInterval*> activePerforations() const;
RimMswCompletionParameters* mswParameters() const;
private:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
@@ -66,5 +68,5 @@ private:
caf::PdmChildArrayField<RimPerforationInterval*> m_perforations;
caf::PdmChildField<RimNonDarcyPerforationParameters*> m_nonDarcyParameters;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters_OBSOLETE;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
};

View File

@@ -90,11 +90,6 @@ RimWellPathCompletionSettings::RimWellPathCompletionSettings()
CAF_PDM_InitField( &m_wellBoreFluidPVTTable, "WellBoreFluidPVTTable", 0, "Wellbore Fluid PVT table", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_hydrostaticDensity, "HydrostaticDensity", "Hydrostatic Density", "", "", "" );
CAF_PDM_InitField( &m_fluidInPlaceRegion, "FluidInPlaceRegion", 0, "Fluid In-Place Region", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_mswParameters, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
m_mswParameters = new RimMswCompletionParameters( false );
m_mswParameters.uiCapability()->setUiTreeHidden( true );
m_mswParameters.uiCapability()->setUiTreeChildrenHidden( true );
}
//--------------------------------------------------------------------------------------------------
@@ -250,30 +245,6 @@ QString RimWellPathCompletionSettings::fluidInPlaceRegionForExport() const
return QString( "%1" ).arg( m_fluidInPlaceRegion() );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellPathCompletionSettings::setUnitSystemSpecificDefaults()
{
m_mswParameters->setUnitSystemSpecificDefaults();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const RimMswCompletionParameters* RimWellPathCompletionSettings::mswParameters() const
{
return m_mswParameters();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMswCompletionParameters* RimWellPathCompletionSettings::mswParameters()
{
return m_mswParameters();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -301,8 +272,6 @@ void RimWellPathCompletionSettings::defineUiOrdering( QString uiConfigName, caf:
compExportGroup->add( &m_hydrostaticDensity );
compExportGroup->add( &m_fluidInPlaceRegion );
caf::PdmUiGroup* mswGroup = uiOrdering.addNewGroup( "Multi Segment Well Options" );
m_mswParameters->uiOrdering( uiConfigName, *mswGroup );
uiOrdering.skipRemainingFields( true );
}

View File

@@ -80,10 +80,6 @@ public:
QString wellBoreFluidPVTForExport() const;
QString hydrostaticDensityForExport() const;
QString fluidInPlaceRegionForExport() const;
void setUnitSystemSpecificDefaults();
const RimMswCompletionParameters* mswParameters() const;
RimMswCompletionParameters* mswParameters();
static QRegExp wellNameForExportRegExp();
@@ -112,6 +108,4 @@ private:
caf::PdmField<int> m_wellBoreFluidPVTTable;
caf::PdmField<HydrostaticDensityEnum> m_hydrostaticDensity;
caf::PdmField<int> m_fluidInPlaceRegion;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
};

View File

@@ -38,10 +38,10 @@ RimWellPathFractureCollection::RimWellPathFractureCollection( void )
setName( "Fractures" );
nameField()->uiCapability()->setUiHidden( true );
CAF_PDM_InitFieldNoDefault( &m_mswParameters_OBSOLETE, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
m_mswParameters_OBSOLETE = new RimMswCompletionParameters;
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeHidden( true );
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitFieldNoDefault( &m_mswParameters, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
m_mswParameters = new RimMswCompletionParameters;
m_mswParameters.uiCapability()->setUiTreeHidden( true );
m_mswParameters.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitField( &m_refMDType_OBSOLETE, "RefMDType", std::numeric_limits<int>::max(), "Reference MD", "", "", "" );
CAF_PDM_InitField( &m_refMD_OBSOLETE, "RefMD", std::numeric_limits<double>::infinity(), "", "", "", "" );
@@ -80,6 +80,14 @@ void RimWellPathFractureCollection::deleteFractures()
m_fractures.deleteAllChildObjects();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const RimMswCompletionParameters* RimWellPathFractureCollection::mswParameters() const
{
return m_mswParameters();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -114,6 +122,9 @@ std::vector<RimWellPathFracture*> RimWellPathFractureCollection::activeFractures
//--------------------------------------------------------------------------------------------------
void RimWellPathFractureCollection::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
caf::PdmUiGroup* mswGroup = uiOrdering.addNewGroup( "Multi Segment Well Options" );
m_mswParameters->uiOrdering( uiConfigName, *mswGroup );
uiOrdering.skipRemainingFields( true );
}
@@ -141,12 +152,12 @@ void RimWellPathFractureCollection::initAfterRead()
{
if ( m_refMDType_OBSOLETE() != std::numeric_limits<int>::max() )
{
m_mswParameters_OBSOLETE->setReferenceMDType( (RimMswCompletionParameters::ReferenceMDType)m_refMDType_OBSOLETE() );
m_mswParameters->setReferenceMDType( (RimMswCompletionParameters::ReferenceMDType)m_refMDType_OBSOLETE() );
}
if ( m_refMD_OBSOLETE() != std::numeric_limits<double>::infinity() )
{
m_mswParameters_OBSOLETE->setManualReferenceMD( m_refMD_OBSOLETE() );
m_mswParameters->setManualReferenceMD( m_refMD_OBSOLETE() );
}
}

View File

@@ -46,6 +46,7 @@ public:
void addFracture( RimWellPathFracture* fracture );
void deleteFractures();
const RimMswCompletionParameters* mswParameters() const;
std::vector<RimWellPathFracture*> allFractures() const;
std::vector<RimWellPathFracture*> activeFractures() const;
@@ -63,5 +64,5 @@ private:
caf::PdmField<int> m_refMDType_OBSOLETE;
caf::PdmField<double> m_refMD_OBSOLETE;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters_OBSOLETE;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
};

View File

@@ -480,22 +480,9 @@ void RimWellPath::initAfterRead()
{
if ( RimProject::current()->isProjectFileVersionEqualOrOlderThan( "2020.10.1" ) )
{
if ( isTopLevelWellPath() && m_completionSettings->mswParameters()->isDefault() )
if ( m_completionSettings->wellNameForExport().isEmpty() )
{
std::vector<const RimMswCompletionParameters*> allExistingMswParameters;
descendantsOfType( allExistingMswParameters );
for ( auto mswParameters : allExistingMswParameters )
{
if ( !mswParameters->isDefault() )
{
*( m_completionSettings->mswParameters() ) = *mswParameters;
break;
}
}
if ( m_completionSettings->wellNameForExport().isEmpty() )
{
m_completionSettings->setWellNameForExport( name() );
}
m_completionSettings->setWellNameForExport( name() );
}
}
}
@@ -671,12 +658,9 @@ void RimWellPath::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering,
{
uiTreeOrdering.add( &m_wellLogFiles );
if ( isTopLevelWellPath() && !allCompletionsRecursively().empty() )
if ( completionSettings() && isTopLevelWellPath() && !allCompletionsRecursively().empty() )
{
if ( completionSettings() )
{
uiTreeOrdering.add( completionSettings() );
}
uiTreeOrdering.add( completionSettings() );
}
if ( m_completions->fishbonesCollection()->hasFishbones() )
@@ -778,7 +762,13 @@ void RimWellPath::setUnitSystem( RiaDefines::EclipseUnitSystem unitSystem )
m_unitSystem = unitSystem;
m_completions->setUnitSystemSpecificDefaults();
m_completionSettings->setUnitSystemSpecificDefaults();
std::vector<RimMswCompletionParameters*> mswParameters;
descendantsOfType( mswParameters );
for ( auto mswParams : mswParameters )
{
mswParams->setUnitSystemSpecificDefaults();
}
}
//--------------------------------------------------------------------------------------------------
@@ -1042,6 +1032,19 @@ bool RimWellPath::isTopLevelWellPath() const
return this == topLevelWellPath();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimWellPath::isMultiLateralWellPath() const
{
auto top = topLevelWellPath();
std::vector<RimWellPath*> wells;
top->descendantsIncludingThisOfType( wells );
return wells.size() > 1;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -155,6 +155,7 @@ public:
std::vector<caf::PdmObjectHandle*>& referringObjects ) override;
bool isTopLevelWellPath() const;
bool isMultiLateralWellPath() const;
RimWellPath* topLevelWellPath() const;
void updateAfterAddingToWellPathGroup();