mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#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:
@@ -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,
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@@ -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;
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@@ -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;
|
||||
};
|
||||
|
@@ -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();
|
||||
*/
|
||||
}
|
||||
|
@@ -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;
|
||||
};
|
||||
|
@@ -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 );
|
||||
}
|
||||
|
@@ -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;
|
||||
};
|
||||
|
@@ -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(), '.' ) )
|
||||
|
@@ -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;
|
||||
};
|
||||
|
@@ -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() );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@@ -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;
|
||||
};
|
||||
|
@@ -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() )
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user