#7595 MSW : Move MSW parameters to well path

Move msw parameters to well path
Make it clear when options are taken from top level well path or well path lateral
Use well path lateral custom values for diameter and roughness
This commit is contained in:
Magne Sjaastad
2021-04-20 15:35:20 +02:00
parent 8e569bc944
commit 4f89e38334
17 changed files with 216 additions and 296 deletions

View File

@@ -36,6 +36,7 @@
#include "RimFishbones.h"
#include "RimFishbonesCollection.h"
#include "RimMswCompletionParameters.h"
#include "RimWellPath.h"
#include "RimWellPathCompletions.h"
@@ -208,7 +209,7 @@ void RicFishbonesTransmissibilityCalculationFeatureImp::findFishboneLateralsWell
// Generate data
const RigEclipseCaseData* caseData = settings.caseToApply()->eclipseCaseData();
auto mswParameters = wellPath->fishbonesCollection()->mswParameters();
auto mswParameters = wellPath->mswCompletionParameters();
RiaDefines::EclipseUnitSystem unitSystem = caseData->unitsType();
RicMswExportInfo exportInfo( wellPath,
@@ -216,8 +217,6 @@ void RicFishbonesTransmissibilityCalculationFeatureImp::findFishboneLateralsWell
wellPath->fishbonesCollection()->startMD(),
mswParameters->lengthAndDepth().text(),
mswParameters->pressureDrop().text() );
exportInfo.setLinerDiameter( mswParameters->linerDiameter( unitSystem ) );
exportInfo.setRoughnessFactor( mswParameters->roughnessFactor( unitSystem ) );
RicWellPathExportMswCompletionsImpl::generateFishbonesMswExportInfoForWell( settings.caseToApply(),
wellPath,

View File

@@ -39,8 +39,6 @@ RicMswExportInfo::RicMswExportInfo( const RimWellPath* wellPath,
const QString& pressureDropText )
: m_unitSystem( unitSystem )
, m_topWellBoreVolume( RicMswExportInfo::defaultDoubleValue() )
, m_linerDiameter( RimMswCompletionParameters::defaultLinerDiameter( unitSystem ) )
, m_roughnessFactor( RimMswCompletionParameters::defaultRoughnessFactor( unitSystem ) )
, m_lengthAndDepthText( lengthAndDepthText )
, m_pressureDropText( pressureDropText )
, m_hasSubGridIntersections( false )
@@ -52,22 +50,6 @@ RicMswExportInfo::RicMswExportInfo( const RimWellPath* wellPath,
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicMswExportInfo::setLinerDiameter( double linerDiameter )
{
m_linerDiameter = linerDiameter;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicMswExportInfo::setRoughnessFactor( double roughnessFactor )
{
m_roughnessFactor = roughnessFactor;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -92,22 +74,6 @@ double RicMswExportInfo::topWellBoreVolume() const
return m_topWellBoreVolume;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
double RicMswExportInfo::linerDiameter() const
{
return m_linerDiameter;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
double RicMswExportInfo::roughnessFactor() const
{
return m_roughnessFactor;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -42,14 +42,10 @@ public:
const QString& lengthAndDepthText,
const QString& pressureDropText );
void setLinerDiameter( double linerDiameter );
void setRoughnessFactor( double roughnessFactor );
void setHasSubGridIntersections( bool subGridIntersections );
RiaDefines::EclipseUnitSystem unitSystem() const;
double topWellBoreVolume() const;
double linerDiameter() const;
double roughnessFactor() const;
QString lengthAndDepthText() const;
QString pressureDropText() const;
bool hasSubGridIntersections() const;
@@ -61,8 +57,6 @@ public:
private:
RiaDefines::EclipseUnitSystem m_unitSystem;
double m_topWellBoreVolume;
double m_linerDiameter;
double m_roughnessFactor;
QString m_lengthAndDepthText;
QString m_pressureDropText;
bool m_hasSubGridIntersections;

View File

@@ -27,6 +27,7 @@
#include "RigWellPath.h"
#include "RimMswCompletionParameters.h"
#include "RimWellPath.h" // TODO: Consider adding wellnameforexport to RicMswExportInfo to avoid these includes
#include "RimWellPathCompletionSettings.h"
@@ -724,6 +725,9 @@ void RicMswTableFormatterTools::writeWelsegsSegment( RicMswSegment*
prevOutTVD = previousSegment->outputTVD();
}
const auto linerDiameter = branch->wellPath()->mswCompletionParameters()->linerDiameter( exportInfo.unitSystem() );
const auto roughnessFactor = branch->wellPath()->mswCompletionParameters()->roughnessFactor( exportInfo.unitSystem() );
auto outletSegment = previousSegment;
for ( const auto& [subStartMD, subEndMD] : segments )
{
@@ -755,8 +759,8 @@ void RicMswTableFormatterTools::writeWelsegsSegment( RicMswSegment*
formatter.add( 1 );
formatter.add( length );
formatter.add( depth );
formatter.add( exportInfo.linerDiameter() );
formatter.add( exportInfo.roughnessFactor() );
formatter.add( linerDiameter );
formatter.add( roughnessFactor );
formatter.rowCompleted();
( *segmentNumber )++;
outletSegment = segment;
@@ -800,6 +804,9 @@ void RicMswTableFormatterTools::writeValveWelsegsSegment( const RicMswSegment*
auto wellPathGeometry = valve->wellPath()->wellPathGeometry();
CVF_ASSERT( wellPathGeometry );
const auto linerDiameter = valve->wellPath()->mswCompletionParameters()->linerDiameter( exportInfo.unitSystem() );
const auto roughnessFactor = valve->wellPath()->mswCompletionParameters()->roughnessFactor( exportInfo.unitSystem() );
for ( const auto& [subStartMD, subEndMD] : splitSegments )
{
int subSegmentNumber = ( *segmentNumber )++;
@@ -828,8 +835,9 @@ void RicMswTableFormatterTools::writeValveWelsegsSegment( const RicMswSegment*
formatter.add( length );
formatter.add( depth );
formatter.add( exportInfo.linerDiameter() );
formatter.add( exportInfo.roughnessFactor() );
formatter.add( linerDiameter );
formatter.add( roughnessFactor );
formatter.rowCompleted();
}
}

View File

@@ -43,6 +43,7 @@
#include "RimFishbonesCollection.h"
#include "RimFractureTemplate.h"
#include "RimModeledWellPath.h"
#include "RimMswCompletionParameters.h"
#include "RimPerforationCollection.h"
#include "RimPerforationInterval.h"
#include "RimProject.h"
@@ -188,7 +189,7 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForPerforations( Rim
{
RiaDefines::EclipseUnitSystem unitSystem = eclipseCase->eclipseCaseData()->unitsType();
auto mswParameters = wellPath->perforationIntervalCollection()->mswParameters();
auto mswParameters = wellPath->mswCompletionParameters();
if ( !mswParameters ) return;
@@ -203,9 +204,6 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForPerforations( Rim
mswParameters->lengthAndDepth().text(),
mswParameters->pressureDrop().text() );
exportInfo.setLinerDiameter( mswParameters->linerDiameter( unitSystem ) );
exportInfo.setRoughnessFactor( mswParameters->roughnessFactor( unitSystem ) );
if ( generatePerforationsMswExportInfo( eclipseCase,
wellPath,
timeStep,
@@ -251,7 +249,7 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForFractures( RimEcl
return;
}
auto mswParameters = wellPath->fractureCollection()->mswParameters();
auto mswParameters = wellPath->mswCompletionParameters();
if ( !mswParameters ) return;
@@ -266,9 +264,6 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForFractures( RimEcl
mswParameters->lengthAndDepth().text(),
mswParameters->pressureDrop().text() );
exportInfo.setLinerDiameter( mswParameters->linerDiameter( unitSystem ) );
exportInfo.setRoughnessFactor( mswParameters->roughnessFactor( unitSystem ) );
generateFracturesMswExportInfo( eclipseCase,
wellPath,
initialMD,
@@ -283,7 +278,7 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForFractures( RimEcl
RifTextDataTableFormatter formatter( stream );
formatter.setOptionalComment( exportDataSourceAsComment );
double maxSegmentLength = wellPath->fractureCollection()->mswParameters()->maxSegmentLength();
double maxSegmentLength = wellPath->mswCompletionParameters()->maxSegmentLength();
RicMswTableFormatterTools::generateWelsegsTable( formatter, exportInfo, maxSegmentLength, completionSegmentsAfterMainBore );
RicMswTableFormatterTools::generateCompsegTables( formatter, exportInfo );
@@ -309,7 +304,7 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForFishbones( RimEcl
double initialMD = 0.0; // Start measured depth location to export MSW data for. Either based on first intersection
// with active grid, or user defined value.
auto mswParameters = wellPath->fishbonesCollection()->mswParameters();
auto mswParameters = wellPath->mswCompletionParameters();
auto cellIntersections = generateCellSegments( eclipseCase, wellPath, mswParameters, &initialMD );
RiaDefines::EclipseUnitSystem unitSystem = eclipseCase->eclipseCaseData()->unitsType();
@@ -319,8 +314,6 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForFishbones( RimEcl
wellPath->fishbonesCollection()->startMD(),
mswParameters->lengthAndDepth().text(),
mswParameters->pressureDrop().text() );
exportInfo.setLinerDiameter( mswParameters->linerDiameter( unitSystem ) );
exportInfo.setRoughnessFactor( mswParameters->roughnessFactor( unitSystem ) );
generateFishbonesMswExportInfo( eclipseCase,
wellPath,
@@ -339,7 +332,7 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForFishbones( RimEcl
RifTextDataTableFormatter formatter( stream );
formatter.setOptionalComment( exportDataSourceAsComment );
double maxSegmentLength = wellPath->fishbonesCollection()->mswParameters()->maxSegmentLength();
double maxSegmentLength = wellPath->mswCompletionParameters()->maxSegmentLength();
RicMswTableFormatterTools::generateWelsegsTable( formatter, exportInfo, maxSegmentLength, completionSegmentsAfterMainBore );
RicMswTableFormatterTools::generateCompsegTables( formatter, exportInfo );
@@ -387,7 +380,7 @@ void RicWellPathExportMswCompletionsImpl::generateFishbonesMswExportInfo(
std::vector<WellPathCellIntersectionInfo> filteredIntersections =
filterIntersections( cellIntersections, initialMD, wellPath->wellPathGeometry(), eclipseCase );
auto mswParameters = wellPath->fishbonesCollection()->mswParameters();
auto mswParameters = wellPath->mswCompletionParameters();
bool foundSubGridIntersections = false;
@@ -527,7 +520,7 @@ void RicWellPathExportMswCompletionsImpl::generateFishbonesMswExportInfo(
for ( auto childWellPath : connectedWellPaths )
{
auto childMswBranch = createChildMswBranch( childWellPath );
auto mswParameters = childWellPath->perforationIntervalCollection()->mswParameters();
auto mswParameters = childWellPath->mswCompletionParameters();
double startOfChildMD = 0.0; // this is currently not used, as the tie-in MD is used
auto childCellIntersections = generateCellSegments( eclipseCase, childWellPath, mswParameters, &startOfChildMD );
@@ -556,7 +549,7 @@ void RicWellPathExportMswCompletionsImpl::generateFishbonesMswExportInfoForWell(
double initialMD = 0.0; // Start measured depth location to export MSW data for. Either based on first intersection
// with active grid, or user defined value.
auto mswParameters = wellPath->fishbonesCollection()->mswParameters();
auto mswParameters = wellPath->mswCompletionParameters();
auto cellIntersections = generateCellSegments( eclipseCase, wellPath, mswParameters, &initialMD );
RiaDefines::EclipseUnitSystem unitSystem = eclipseCase->eclipseCaseData()->unitsType();
@@ -576,7 +569,7 @@ bool RicWellPathExportMswCompletionsImpl::generateFracturesMswExportInfo(
gsl::not_null<RicMswExportInfo*> exportInfo,
gsl::not_null<RicMswBranch*> branch )
{
auto mswParameters = wellPath->fractureCollection()->mswParameters();
auto mswParameters = wellPath->mswCompletionParameters();
auto fractures = wellPath->fractureCollection()->activeFractures();
std::vector<WellPathCellIntersectionInfo> filteredIntersections =
@@ -650,7 +643,7 @@ bool RicWellPathExportMswCompletionsImpl::generateFracturesMswExportInfo(
for ( auto childWellPath : connectedWellPaths )
{
auto childMswBranch = createChildMswBranch( childWellPath );
auto mswParameters = childWellPath->perforationIntervalCollection()->mswParameters();
auto mswParameters = childWellPath->mswCompletionParameters();
double startOfChildMD = 0.0; // this is currently not used, as the tie-in MD is used
auto childCellIntersections = generateCellSegments( eclipseCase, childWellPath, mswParameters, &startOfChildMD );
@@ -747,7 +740,7 @@ bool RicWellPathExportMswCompletionsImpl::generatePerforationsMswExportInfo(
for ( auto childWellPath : connectedWellPaths )
{
auto childMswBranch = createChildMswBranch( childWellPath );
auto mswParameters = childWellPath->perforationIntervalCollection()->mswParameters();
auto mswParameters = childWellPath->mswCompletionParameters();
double startOfChildMD = 0.0; // this is currently not used, as the tie-in MD is used
auto childCellIntersections = generateCellSegments( eclipseCase, childWellPath, mswParameters, &startOfChildMD );
@@ -799,7 +792,7 @@ std::vector<WellPathCellIntersectionInfo>
std::vector<WellPathCellIntersectionInfo> continuousIntersections =
RigWellPathIntersectionTools::buildContinuousIntersections( allIntersections, mainGrid );
if ( mswParameters->referenceMDType() == RimMswCompletionParameters::MANUAL_REFERENCE_MD )
if ( mswParameters->referenceMDType() == RimMswCompletionParameters::ReferenceMDType::MANUAL_REFERENCE_MD )
{
*initialMD = mswParameters->manualReferenceMD();
}

View File

@@ -52,21 +52,7 @@ 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, "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
CAF_PDM_InitField( &m_linerDiameter_OBSOLETE, "LinerDiameter", 0.152, "Liner Inner Diameter", "", "", "" );
CAF_PDM_InitField( &m_roughnessFactor_OBSOLETE, "RoughnessFactor", 1e-05, "Roughness Factor", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_pressureDrop_OBSOLETE, "PressureDrop", "Pressure Drop", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_lengthAndDepth_OBSOLETE, "LengthAndDepth", "Length and Depth", "", "", "" );
m_linerDiameter_OBSOLETE.xmlCapability()->setIOWritable( false );
m_roughnessFactor_OBSOLETE.xmlCapability()->setIOWritable( false );
m_pressureDrop_OBSOLETE.xmlCapability()->setIOWritable( false );
m_lengthAndDepth_OBSOLETE.xmlCapability()->setIOWritable( false );
}
//--------------------------------------------------------------------------------------------------
@@ -120,32 +106,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 );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFishbonesCollection::initAfterRead()
{
if ( m_linerDiameter_OBSOLETE() != m_linerDiameter_OBSOLETE.defaultValue() )
{
m_mswParameters->setLinerDiameter( m_linerDiameter_OBSOLETE() );
}
if ( m_roughnessFactor_OBSOLETE() != m_roughnessFactor_OBSOLETE.defaultValue() )
{
m_mswParameters->setRoughnessFactor( m_roughnessFactor_OBSOLETE() );
}
if ( m_pressureDrop_OBSOLETE() != m_pressureDrop_OBSOLETE.defaultValue() )
{
m_mswParameters->setPressureDrop( m_pressureDrop_OBSOLETE() );
}
if ( m_lengthAndDepth_OBSOLETE() != m_lengthAndDepth_OBSOLETE.defaultValue() )
{
m_mswParameters->setLengthAndDepth( m_lengthAndDepth_OBSOLETE() );
}
uiOrdering.skipRemainingFields( true );
}
//--------------------------------------------------------------------------------------------------
@@ -160,14 +122,6 @@ void RimFishbonesCollection::appendFishbonesSubs( RimFishbones* subs )
subs->recomputeLateralLocations();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const RimMswCompletionParameters* RimFishbonesCollection::mswParameters() const
{
return m_mswParameters();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -19,7 +19,6 @@
#pragma once
#include "RimCheckableNamedObject.h"
#include "RimMswCompletionParameters.h"
#include "RiaDefines.h"
@@ -43,8 +42,7 @@ class RimFishbonesCollection : public RimCheckableNamedObject
public:
RimFishbonesCollection();
void appendFishbonesSubs( RimFishbones* subs );
const RimMswCompletionParameters* mswParameters() const;
void appendFishbonesSubs( RimFishbones* subs );
bool hasFishbones() const;
std::vector<RimFishbones*> activeFishbonesSubs() const;
@@ -60,23 +58,15 @@ public:
protected:
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void initAfterRead() override;
private:
cvf::Color3f nextFishbonesColor() const;
private:
caf::PdmChildArrayField<RimFishbones*> m_fishbones;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
caf::PdmChildArrayField<RimFishbones*> m_fishbones;
caf::PdmField<double> m_startMD;
caf::PdmField<double> m_skinFactor;
caf::PdmField<double> m_mainBoreDiameter;
bool manuallyModifiedStartMD;
caf::PdmField<double> m_linerDiameter_OBSOLETE;
caf::PdmField<double> m_roughnessFactor_OBSOLETE;
caf::PdmField<RimMswCompletionParameters::PressureDropEnum> m_pressureDrop_OBSOLETE;
caf::PdmField<RimMswCompletionParameters::LengthAndDepthEnum> m_lengthAndDepth_OBSOLETE;
};

View File

@@ -15,6 +15,7 @@
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RimMswCompletionParameters.h"
#include "RiaEclipseUnitTools.h"
@@ -30,26 +31,28 @@ namespace caf
template <>
void RimMswCompletionParameters::ReferenceMDEnum::setUp()
{
addItem( RimMswCompletionParameters::AUTO_REFERENCE_MD, "GridIntersectionRefMD", "Grid Entry Point" );
addItem( RimMswCompletionParameters::MANUAL_REFERENCE_MD, "ManualRefMD", "User Defined" );
setDefault( RimMswCompletionParameters::AUTO_REFERENCE_MD );
addItem( RimMswCompletionParameters::ReferenceMDType::AUTO_REFERENCE_MD, "GridIntersectionRefMD", "Grid Entry Point" );
addItem( RimMswCompletionParameters::ReferenceMDType::MANUAL_REFERENCE_MD, "ManualRefMD", "User Defined" );
setDefault( RimMswCompletionParameters::ReferenceMDType::AUTO_REFERENCE_MD );
}
template <>
void RimMswCompletionParameters::PressureDropEnum::setUp()
{
addItem( RimMswCompletionParameters::HYDROSTATIC, "H--", "Hydrostatic" );
addItem( RimMswCompletionParameters::HYDROSTATIC_FRICTION, "HF-", "Hydrostatic + Friction" );
addItem( RimMswCompletionParameters::HYDROSTATIC_FRICTION_ACCELERATION, "HFA", "Hydrostatic + Friction + Acceleration" );
setDefault( RimMswCompletionParameters::HYDROSTATIC_FRICTION );
addItem( RimMswCompletionParameters::PressureDropType::HYDROSTATIC, "H--", "Hydrostatic" );
addItem( RimMswCompletionParameters::PressureDropType::HYDROSTATIC_FRICTION, "HF-", "Hydrostatic + Friction" );
addItem( RimMswCompletionParameters::PressureDropType::HYDROSTATIC_FRICTION_ACCELERATION,
"HFA",
"Hydrostatic + Friction + Acceleration" );
setDefault( RimMswCompletionParameters::PressureDropType::HYDROSTATIC_FRICTION );
}
template <>
void RimMswCompletionParameters::LengthAndDepthEnum::setUp()
{
addItem( RimMswCompletionParameters::INC, "INC", "Incremental" );
addItem( RimMswCompletionParameters::ABS, "ABS", "Absolute" );
setDefault( RimMswCompletionParameters::ABS );
addItem( RimMswCompletionParameters::LengthAndDepthType::INC, "INC", "Incremental" );
addItem( RimMswCompletionParameters::LengthAndDepthType::ABS, "ABS", "Absolute" );
setDefault( RimMswCompletionParameters::LengthAndDepthType::ABS );
}
} // namespace caf
@@ -58,20 +61,14 @@ CAF_PDM_SOURCE_INIT( RimMswCompletionParameters, "RimMswCompletionParameters" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMswCompletionParameters::RimMswCompletionParameters( bool enableReferenceDepth /* = true */ )
: m_enableReferenceDepth( enableReferenceDepth )
RimMswCompletionParameters::RimMswCompletionParameters()
{
CAF_PDM_InitObject( "MSW Completion Parameters", ":/CompletionsSymbol16x16.png", "", "" );
CAF_PDM_InitFieldNoDefault( &m_refMDType, "RefMDType", "Reference MD", "", "", "" );
CAF_PDM_InitField( &m_refMD, "RefMD", 0.0, "", "", "", "" );
if ( !m_enableReferenceDepth )
{
m_refMDType.xmlCapability()->disableIO();
m_refMD.xmlCapability()->disableIO();
}
CAF_PDM_InitField( &m_customValuesForLateral, "CustomValuesForLateral", false, "Custom Values for Lateral", "", "", "" );
CAF_PDM_InitField( &m_linerDiameter,
"LinerDiameter",
std::numeric_limits<double>::infinity(),
@@ -142,7 +139,7 @@ RimMswCompletionParameters::ReferenceMDType RimMswCompletionParameters::referenc
//--------------------------------------------------------------------------------------------------
double RimMswCompletionParameters::manualReferenceMD() const
{
if ( m_refMDType == AUTO_REFERENCE_MD )
if ( m_refMDType == ReferenceMDType::AUTO_REFERENCE_MD )
{
return std::numeric_limits<double>::infinity();
}
@@ -156,17 +153,24 @@ double RimMswCompletionParameters::linerDiameter( RiaDefines::EclipseUnitSystem
{
RimWellPath* wellPath;
firstAncestorOrThisOfTypeAsserted( wellPath );
double diameter = m_linerDiameter();
if ( !wellPath->isTopLevelWellPath() && !m_customValuesForLateral )
{
diameter = wellPath->topLevelWellPath()->mswCompletionParameters()->m_linerDiameter();
}
if ( wellPath->unitSystem() == RiaDefines::EclipseUnitSystem::UNITS_FIELD &&
unitSystem == RiaDefines::EclipseUnitSystem::UNITS_METRIC )
{
return RiaEclipseUnitTools::feetToMeter( m_linerDiameter() );
return RiaEclipseUnitTools::feetToMeter( diameter );
}
else if ( wellPath->unitSystem() == RiaDefines::EclipseUnitSystem::UNITS_METRIC &&
unitSystem == RiaDefines::EclipseUnitSystem::UNITS_FIELD )
{
return RiaEclipseUnitTools::meterToFeet( m_linerDiameter() );
return RiaEclipseUnitTools::meterToFeet( diameter );
}
return m_linerDiameter();
return diameter;
}
//--------------------------------------------------------------------------------------------------
@@ -191,17 +195,25 @@ double RimMswCompletionParameters::roughnessFactor( RiaDefines::EclipseUnitSyste
{
RimWellPath* wellPath;
firstAncestorOrThisOfTypeAsserted( wellPath );
double rFactor = m_roughnessFactor();
if ( !wellPath->isTopLevelWellPath() && !m_customValuesForLateral )
{
rFactor = wellPath->topLevelWellPath()->mswCompletionParameters()->m_roughnessFactor();
}
if ( wellPath->unitSystem() == RiaDefines::EclipseUnitSystem::UNITS_FIELD &&
unitSystem == RiaDefines::EclipseUnitSystem::UNITS_METRIC )
{
return RiaEclipseUnitTools::feetToMeter( m_roughnessFactor() );
return RiaEclipseUnitTools::feetToMeter( rFactor );
}
else if ( wellPath->unitSystem() == RiaDefines::EclipseUnitSystem::UNITS_METRIC &&
unitSystem == RiaDefines::EclipseUnitSystem::UNITS_FIELD )
{
return RiaEclipseUnitTools::meterToFeet( m_roughnessFactor() );
return RiaEclipseUnitTools::meterToFeet( rFactor );
}
return m_roughnessFactor();
return rFactor;
}
//--------------------------------------------------------------------------------------------------
@@ -300,7 +312,7 @@ void RimMswCompletionParameters::fieldChangedByUi( const caf::PdmFieldHandle* ch
{
if ( changedField == &m_refMDType )
{
m_refMD.uiCapability()->setUiHidden( m_refMDType == AUTO_REFERENCE_MD );
m_refMD.uiCapability()->setUiHidden( m_refMDType == ReferenceMDType::AUTO_REFERENCE_MD );
this->updateAllRequiredEditors();
}
@@ -316,38 +328,46 @@ void RimMswCompletionParameters::fieldChangedByUi( const caf::PdmFieldHandle* ch
//--------------------------------------------------------------------------------------------------
void RimMswCompletionParameters::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
RimWellPath* wellPath;
firstAncestorOrThisOfType( wellPath );
if ( wellPath )
{
RimWellPath* wellPath;
firstAncestorOrThisOfType( wellPath );
if ( wellPath )
if ( wellPath->unitSystem() == RiaDefines::EclipseUnitSystem::UNITS_METRIC )
{
if ( wellPath->unitSystem() == RiaDefines::EclipseUnitSystem::UNITS_METRIC )
{
m_linerDiameter.uiCapability()->setUiName( "Liner Inner Diameter [m]" );
m_roughnessFactor.uiCapability()->setUiName( "Roughness Factor [m]" );
}
else if ( wellPath->unitSystem() == RiaDefines::EclipseUnitSystem::UNITS_FIELD )
{
m_linerDiameter.uiCapability()->setUiName( "Liner Inner Diameter [ft]" );
m_roughnessFactor.uiCapability()->setUiName( "Roughness Factor [ft]" );
}
m_linerDiameter.uiCapability()->setUiName( "Liner Inner Diameter [m]" );
m_roughnessFactor.uiCapability()->setUiName( "Roughness Factor [m]" );
}
else if ( wellPath->unitSystem() == RiaDefines::EclipseUnitSystem::UNITS_FIELD )
{
m_linerDiameter.uiCapability()->setUiName( "Liner Inner Diameter [ft]" );
m_roughnessFactor.uiCapability()->setUiName( "Roughness Factor [ft]" );
}
if ( wellPath->isTopLevelWellPath() )
{
uiOrdering.add( &m_refMDType );
uiOrdering.add( &m_refMD );
m_refMD.uiCapability()->setUiHidden( m_refMDType == ReferenceMDType::AUTO_REFERENCE_MD );
uiOrdering.add( &m_linerDiameter );
uiOrdering.add( &m_roughnessFactor );
uiOrdering.add( &m_pressureDrop );
uiOrdering.add( &m_lengthAndDepth );
uiOrdering.add( &m_enforceMaxSegmentLength );
uiOrdering.add( &m_maxSegmentLength );
}
else
{
uiOrdering.add( &m_customValuesForLateral );
uiOrdering.add( &m_linerDiameter );
uiOrdering.add( &m_roughnessFactor );
m_linerDiameter.uiCapability()->setUiReadOnly( !m_customValuesForLateral() );
m_linerDiameter.uiCapability()->setUiReadOnly( !m_customValuesForLateral() );
}
}
if ( m_enableReferenceDepth )
{
uiOrdering.add( &m_refMDType );
uiOrdering.add( &m_refMD );
m_refMD.uiCapability()->setUiHidden( m_refMDType == AUTO_REFERENCE_MD );
}
uiOrdering.add( &m_linerDiameter );
uiOrdering.add( &m_roughnessFactor );
uiOrdering.add( &m_pressureDrop );
uiOrdering.add( &m_lengthAndDepth );
uiOrdering.add( &m_enforceMaxSegmentLength );
uiOrdering.add( &m_maxSegmentLength );
uiOrdering.skipRemainingFields( true );
}
@@ -376,3 +396,21 @@ void RimMswCompletionParameters::setUnitSystemSpecificDefaults()
m_roughnessFactor = defaultRoughnessFactor( wellPath->unitSystem() );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimMswCompletionParameters::updateFromTopLevelWell( const RimMswCompletionParameters* topLevelWellParameters )
{
m_refMDType = topLevelWellParameters->m_refMDType();
m_refMD = topLevelWellParameters->m_refMD();
m_pressureDrop = topLevelWellParameters->m_pressureDrop();
m_enforceMaxSegmentLength = topLevelWellParameters->m_enforceMaxSegmentLength();
m_maxSegmentLength = topLevelWellParameters->m_maxSegmentLength();
// The following parameters can be defined per lateral
/*
m_linerDiameter = rhs.m_linerDiameter();
m_roughnessFactor = rhs.m_roughnessFactor();
*/
}

View File

@@ -28,30 +28,30 @@ class RimMswCompletionParameters : public caf::PdmObject
CAF_PDM_HEADER_INIT;
public:
enum ReferenceMDType
enum class ReferenceMDType
{
AUTO_REFERENCE_MD = 0,
MANUAL_REFERENCE_MD
};
enum PressureDropType
enum class PressureDropType
{
HYDROSTATIC,
HYDROSTATIC_FRICTION,
HYDROSTATIC_FRICTION_ACCELERATION
};
enum LengthAndDepthType
enum class LengthAndDepthType
{
ABS,
INC
};
typedef caf::AppEnum<ReferenceMDType> ReferenceMDEnum;
typedef caf::AppEnum<PressureDropType> PressureDropEnum;
typedef caf::AppEnum<LengthAndDepthType> LengthAndDepthEnum;
using ReferenceMDEnum = caf::AppEnum<ReferenceMDType>;
using PressureDropEnum = caf::AppEnum<PressureDropType>;
using LengthAndDepthEnum = caf::AppEnum<LengthAndDepthType>;
RimMswCompletionParameters( bool enableReferenceDepth = true );
RimMswCompletionParameters();
~RimMswCompletionParameters() override;
bool isDefault() const;
@@ -76,8 +76,11 @@ public:
void setUnitSystemSpecificDefaults();
protected:
void updateFromTopLevelWell( const RimMswCompletionParameters* topLevelWellParameters );
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
protected:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void initAfterRead() override;
@@ -85,6 +88,7 @@ private:
caf::PdmField<ReferenceMDEnum> m_refMDType;
caf::PdmField<double> m_refMD;
caf::PdmField<bool> m_customValuesForLateral;
caf::PdmField<double> m_linerDiameter;
caf::PdmField<double> m_roughnessFactor;
@@ -93,6 +97,4 @@ private:
caf::PdmField<bool> m_enforceMaxSegmentLength;
caf::PdmField<double> m_maxSegmentLength;
bool m_enableReferenceDepth;
};

View File

@@ -23,7 +23,6 @@
#include "Rim3dView.h"
#include "RimEclipseCase.h"
#include "RimMswCompletionParameters.h"
#include "RimNonDarcyPerforationParameters.h"
#include "RimPerforationInterval.h"
#include "RimProject.h"
@@ -34,17 +33,6 @@
#include "Riu3DMainWindowTools.h"
namespace caf
{
template <>
void RimPerforationCollection::ReferenceMDEnum::setUp()
{
addItem( RimPerforationCollection::AUTO_REFERENCE_MD, "GridIntersectionRefMD", "Grid Entry Point" );
addItem( RimPerforationCollection::MANUAL_REFERENCE_MD, "ManualRefMD", "User Defined" );
setDefault( RimPerforationCollection::AUTO_REFERENCE_MD );
}
} // namespace caf
CAF_PDM_SOURCE_INIT( RimPerforationCollection, "PerforationCollection" );
//--------------------------------------------------------------------------------------------------
@@ -60,11 +48,6 @@ RimPerforationCollection::RimPerforationCollection()
CAF_PDM_InitFieldNoDefault( &m_perforations, "Perforations", "Perforations", "", "", "" );
m_perforations.uiCapability()->setUiHidden( 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();
m_nonDarcyParameters.uiCapability()->setUiTreeHidden( true );
@@ -176,21 +159,11 @@ 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->uiOrdering( uiConfigName, *mswGroup );
m_nonDarcyParameters->uiOrdering( uiConfigName, uiOrdering );
uiOrdering.skipRemainingFields( true );
}

View File

@@ -27,7 +27,6 @@
#include "cafPdmObject.h"
class RimPerforationInterval;
class RimMswCompletionParameters;
class RimNonDarcyPerforationParameters;
//==================================================================================================
@@ -40,13 +39,6 @@ class RimPerforationCollection : public RimCheckableNamedObject
CAF_PDM_HEADER_INIT;
public:
enum ReferenceMDType
{
AUTO_REFERENCE_MD = 0,
MANUAL_REFERENCE_MD
};
typedef caf::AppEnum<ReferenceMDType> ReferenceMDEnum;
RimPerforationCollection();
~RimPerforationCollection() override;
@@ -56,8 +48,6 @@ 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;
@@ -67,6 +57,4 @@ private:
private:
caf::PdmChildArrayField<RimPerforationInterval*> m_perforations;
caf::PdmChildField<RimNonDarcyPerforationParameters*> m_nonDarcyParameters;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
};

View File

@@ -20,6 +20,7 @@
#include "RiaStdStringTools.h"
#include "RimMswCompletionParameters.h"
#include "RimWellPath.h"
#include "cafPdmDoubleStringValidator.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiOrdering.h"
@@ -90,6 +91,11 @@ 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;
m_mswParameters.uiCapability()->setUiTreeHidden( true );
m_mswParameters.uiCapability()->setUiTreeChildrenHidden( true );
}
//--------------------------------------------------------------------------------------------------
@@ -254,23 +260,40 @@ QRegExp RimWellPathCompletionSettings::wellNameForExportRegExp()
return rx;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMswCompletionParameters* RimWellPathCompletionSettings::mswCompletionParameters() const
{
return m_mswParameters();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellPathCompletionSettings::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
caf::PdmUiGroup* compExportGroup = uiOrdering.addNewGroup( "Completion Export Parameters" );
compExportGroup->add( &m_wellNameForExport );
compExportGroup->add( &m_wellGroupName );
compExportGroup->add( &m_referenceDepth );
compExportGroup->add( &m_preferredFluidPhase );
compExportGroup->add( &m_drainageRadiusForPI );
compExportGroup->add( &m_gasInflowEquation );
compExportGroup->add( &m_automaticWellShutIn );
compExportGroup->add( &m_allowWellCrossFlow );
compExportGroup->add( &m_wellBoreFluidPVTTable );
compExportGroup->add( &m_hydrostaticDensity );
compExportGroup->add( &m_fluidInPlaceRegion );
RimWellPath* wellPath = nullptr;
this->firstAncestorOrThisOfTypeAsserted( wellPath );
if ( wellPath->isTopLevelWellPath() )
{
caf::PdmUiGroup* compExportGroup = uiOrdering.addNewGroup( "Completion Export Parameters" );
compExportGroup->add( &m_wellNameForExport );
compExportGroup->add( &m_wellGroupName );
compExportGroup->add( &m_referenceDepth );
compExportGroup->add( &m_preferredFluidPhase );
compExportGroup->add( &m_drainageRadiusForPI );
compExportGroup->add( &m_gasInflowEquation );
compExportGroup->add( &m_automaticWellShutIn );
compExportGroup->add( &m_allowWellCrossFlow );
compExportGroup->add( &m_wellBoreFluidPVTTable );
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 );
}
@@ -282,6 +305,8 @@ void RimWellPathCompletionSettings::fieldChangedByUi( const caf::PdmFieldHandle*
const QVariant& oldValue,
const QVariant& newValue )
{
m_mswParameters->fieldChangedByUi( changedField, oldValue, newValue );
if ( changedField == &m_referenceDepth )
{
if ( !RiaStdStringTools::isNumber( m_referenceDepth.v().toStdString(), '.' ) )

View File

@@ -83,6 +83,8 @@ public:
static QRegExp wellNameForExportRegExp();
RimMswCompletionParameters* mswCompletionParameters() const;
protected:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
@@ -108,4 +110,6 @@ private:
caf::PdmField<int> m_wellBoreFluidPVTTable;
caf::PdmField<HydrostaticDensityEnum> m_hydrostaticDensity;
caf::PdmField<int> m_fluidInPlaceRegion;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
};

View File

@@ -38,14 +38,6 @@ RimWellPathFractureCollection::RimWellPathFractureCollection( void )
setName( "Fractures" );
nameField()->uiCapability()->setUiHidden( 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(), "", "", "", "" );
setDeletable( true );
}
@@ -80,14 +72,6 @@ void RimWellPathFractureCollection::deleteFractures()
m_fractures.deleteAllChildObjects();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const RimMswCompletionParameters* RimWellPathFractureCollection::mswParameters() const
{
return m_mswParameters();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -117,17 +101,6 @@ std::vector<RimWellPathFracture*> RimWellPathFractureCollection::activeFractures
return active;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
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 );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -145,22 +118,6 @@ void RimWellPathFractureCollection::fieldChangedByUi( const caf::PdmFieldHandle*
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellPathFractureCollection::initAfterRead()
{
if ( m_refMDType_OBSOLETE() != std::numeric_limits<int>::max() )
{
m_mswParameters->setReferenceMDType( (RimMswCompletionParameters::ReferenceMDType)m_refMDType_OBSOLETE() );
}
if ( m_refMD_OBSOLETE() != std::numeric_limits<double>::infinity() )
{
m_mswParameters->setManualReferenceMD( m_refMD_OBSOLETE() );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -19,7 +19,6 @@
#pragma once
#include "RimCheckableNamedObject.h"
#include "RimMswCompletionParameters.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmChildField.h"
@@ -46,7 +45,6 @@ public:
void addFracture( RimWellPathFracture* fracture );
void deleteFractures();
const RimMswCompletionParameters* mswParameters() const;
std::vector<RimWellPathFracture*> allFractures() const;
std::vector<RimWellPathFracture*> activeFractures() const;
@@ -54,15 +52,8 @@ public:
std::vector<caf::PdmObjectHandle*>& referringObjects ) override;
private:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void initAfterRead() override;
private:
caf::PdmChildArrayField<RimWellPathFracture*> m_fractures;
caf::PdmField<int> m_refMDType_OBSOLETE;
caf::PdmField<double> m_refMD_OBSOLETE;
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
};

View File

@@ -37,6 +37,7 @@
#include "RimFishbones.h"
#include "RimFishbonesCollection.h"
#include "RimMainPlotCollection.h"
#include "RimMswCompletionParameters.h"
#include "RimPerforationCollection.h"
#include "RimProject.h"
#include "RimStimPlanModelCollection.h"
@@ -284,7 +285,7 @@ const RimWellPathCompletions* RimWellPath::completions() const
}
//--------------------------------------------------------------------------------------------------
///
/// Returns top-level completion settings
//--------------------------------------------------------------------------------------------------
const RimWellPathCompletionSettings* RimWellPath::completionSettings() const
{
@@ -294,7 +295,7 @@ const RimWellPathCompletionSettings* RimWellPath::completionSettings() const
}
//--------------------------------------------------------------------------------------------------
///
/// Returns top-level completion settings
//--------------------------------------------------------------------------------------------------
RimWellPathCompletionSettings* RimWellPath::completionSettings()
{
@@ -303,6 +304,40 @@ RimWellPathCompletionSettings* RimWellPath::completionSettings()
return topLevelWellPath()->completionSettings();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimMswCompletionParameters* RimWellPath::mswCompletionParameters()
{
auto params = m_completionSettings->mswCompletionParameters();
if ( !isTopLevelWellPath() )
{
auto topMsw = topLevelWellPath()->mswCompletionParameters();
// Propagate most settings from top level well into lateral parameters
params->updateFromTopLevelWell( topMsw );
}
return params;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const RimMswCompletionParameters* RimWellPath::mswCompletionParameters() const
{
auto params = m_completionSettings->mswCompletionParameters();
if ( !isTopLevelWellPath() )
{
auto topMsw = topLevelWellPath()->mswCompletionParameters();
// Propagate most settings from top level well into lateral parameters
params->updateFromTopLevelWell( topMsw );
}
return params;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -670,9 +705,9 @@ void RimWellPath::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering,
{
uiTreeOrdering.add( &m_wellLogFiles );
if ( completionSettings() && isTopLevelWellPath() && !allCompletionsRecursively().empty() )
if ( m_completionSettings() && !allCompletionsRecursively().empty() )
{
uiTreeOrdering.add( completionSettings() );
uiTreeOrdering.add( m_completionSettings() );
}
if ( m_completions->fishbonesCollection()->hasFishbones() )

View File

@@ -58,6 +58,7 @@ class RimWellPathFractureCollection;
class Rim3dWellLogCurve;
class Rim3dWellLogCurveCollection;
class RimWellPathTieIn;
class RimMswCompletionParameters;
//==================================================================================================
///
@@ -122,6 +123,8 @@ public:
const RimWellPathCompletions* completions() const;
const RimWellPathCompletionSettings* completionSettings() const;
RimWellPathCompletionSettings* completionSettings();
RimMswCompletionParameters* mswCompletionParameters();
const RimMswCompletionParameters* mswCompletionParameters() const;
RimFishbonesCollection* fishbonesCollection();
const RimFishbonesCollection* fishbonesCollection() const;