mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
MSW : Restore MSW settings per completion type
Remove the common MSW settings on well path
This commit is contained in:
@@ -210,7 +210,7 @@ void RicFishbonesTransmissibilityCalculationFeatureImp::findFishboneLateralsWell
|
||||
// Generate data
|
||||
const RigEclipseCaseData* caseData = settings.caseToApply()->eclipseCaseData();
|
||||
|
||||
auto mswParameters = wellPath->completionSettings()->mswParameters();
|
||||
auto mswParameters = wellPath->fishbonesCollection()->mswParameters();
|
||||
RiaDefines::EclipseUnitSystem unitSystem = caseData->unitsType();
|
||||
|
||||
RicMswExportInfo exportInfo( wellPath,
|
||||
|
||||
@@ -189,7 +189,7 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForFractures( RimEcl
|
||||
RifTextDataTableFormatter formatter( stream );
|
||||
formatter.setOptionalComment( exportDataSourceAsComment );
|
||||
|
||||
double maxSegmentLength = wellPath->completionSettings()->mswParameters()->maxSegmentLength();
|
||||
double maxSegmentLength = wellPath->fractureCollection()->mswParameters()->maxSegmentLength();
|
||||
|
||||
generateWelsegsTable( formatter, exportInfo, maxSegmentLength );
|
||||
generateCompsegTables( formatter, exportInfo );
|
||||
@@ -214,10 +214,10 @@ 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 cellIntersections = generateCellSegments( eclipseCase, wellPath, &initialMD );
|
||||
auto mswParameters = wellPath->fishbonesCollection()->mswParameters();
|
||||
auto cellIntersections = generateCellSegments( eclipseCase, wellPath, mswParameters, &initialMD );
|
||||
|
||||
auto mswParameters = wellPath->completionSettings()->mswParameters();
|
||||
RiaDefines::EclipseUnitSystem unitSystem = eclipseCase->eclipseCaseData()->unitsType();
|
||||
RiaDefines::EclipseUnitSystem unitSystem = eclipseCase->eclipseCaseData()->unitsType();
|
||||
|
||||
RicMswExportInfo exportInfo( wellPath,
|
||||
unitSystem,
|
||||
@@ -244,7 +244,7 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForFishbones( RimEcl
|
||||
RifTextDataTableFormatter formatter( stream );
|
||||
formatter.setOptionalComment( exportDataSourceAsComment );
|
||||
|
||||
double maxSegmentLength = wellPath->completionSettings()->mswParameters()->maxSegmentLength();
|
||||
double maxSegmentLength = wellPath->fishbonesCollection()->mswParameters()->maxSegmentLength();
|
||||
|
||||
generateWelsegsTable( formatter, exportInfo, maxSegmentLength );
|
||||
generateCompsegTables( formatter, exportInfo );
|
||||
@@ -262,18 +262,24 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForPerforations( Rim
|
||||
{
|
||||
RiaDefines::EclipseUnitSystem unitSystem = eclipseCase->eclipseCaseData()->unitsType();
|
||||
|
||||
auto mswParameters = wellPath->perforationIntervalCollection()->mswParameters();
|
||||
|
||||
if ( !mswParameters ) return;
|
||||
|
||||
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 cellIntersections = generateCellSegments( eclipseCase, wellPath, &initialMD );
|
||||
auto cellIntersections = generateCellSegments( eclipseCase, wellPath, mswParameters, &initialMD );
|
||||
|
||||
auto mswParameters = wellPath->completionSettings()->mswParameters();
|
||||
RicMswExportInfo exportInfo( wellPath,
|
||||
unitSystem,
|
||||
initialMD,
|
||||
mswParameters->lengthAndDepth().text(),
|
||||
mswParameters->pressureDrop().text() );
|
||||
|
||||
exportInfo.setLinerDiameter( mswParameters->linerDiameter( unitSystem ) );
|
||||
exportInfo.setRoughnessFactor( mswParameters->roughnessFactor( unitSystem ) );
|
||||
|
||||
if ( generatePerforationsMswExportInfo( eclipseCase,
|
||||
wellPath,
|
||||
timeStep,
|
||||
@@ -289,7 +295,7 @@ void RicWellPathExportMswCompletionsImpl::exportWellSegmentsForPerforations( Rim
|
||||
QTextStream stream( exportFile.get() );
|
||||
RifTextDataTableFormatter formatter( stream );
|
||||
|
||||
double maxSegmentLength = wellPath->completionSettings()->mswParameters()->maxSegmentLength();
|
||||
double maxSegmentLength = mswParameters->maxSegmentLength();
|
||||
|
||||
generateWelsegsTable( formatter, exportInfo, maxSegmentLength );
|
||||
generateCompsegTables( formatter, exportInfo );
|
||||
@@ -949,7 +955,7 @@ void RicWellPathExportMswCompletionsImpl::generateFishbonesMswExportInfo(
|
||||
std::vector<WellPathCellIntersectionInfo> filteredIntersections =
|
||||
filterIntersections( cellIntersections, initialMD, wellPath->wellPathGeometry(), caseToApply );
|
||||
|
||||
auto mswParameters = wellPath->completionSettings()->mswParameters();
|
||||
auto mswParameters = wellPath->fishbonesCollection()->mswParameters();
|
||||
|
||||
bool foundSubGridIntersections = false;
|
||||
|
||||
@@ -1034,7 +1040,8 @@ void RicWellPathExportMswCompletionsImpl::generateFishbonesMswExportInfo(
|
||||
auto initialChildTVD = tvdFromMeasuredDepth( wellPathGroup, initialMD );
|
||||
for ( auto childWellPath : wellPathGroup->childWellPaths() )
|
||||
{
|
||||
auto childCellIntersections = generateCellSegments( caseToApply, childWellPath, &initialChildMD );
|
||||
auto childCellIntersections =
|
||||
generateCellSegments( caseToApply, childWellPath, mswParameters, &initialChildMD );
|
||||
auto childBranch =
|
||||
std::make_unique<RicMswBranch>( childWellPath->name(), childWellPath, initialChildMD, initialChildTVD );
|
||||
|
||||
@@ -1106,7 +1113,7 @@ RicMswExportInfo
|
||||
coords,
|
||||
mds );
|
||||
|
||||
auto mswParameters = wellPath->completionSettings()->mswParameters();
|
||||
auto mswParameters = wellPath->fractureCollection()->mswParameters();
|
||||
|
||||
double initialMD = 0.0;
|
||||
if ( mswParameters->referenceMDType() == RimMswCompletionParameters::MANUAL_REFERENCE_MD )
|
||||
@@ -1260,8 +1267,6 @@ bool RicWellPathExportMswCompletionsImpl::generatePerforationsMswExportInfo(
|
||||
std::vector<WellPathCellIntersectionInfo> filteredIntersections =
|
||||
filterIntersections( cellIntersections, initialMD, wellPath->wellPathGeometry(), eclipseCase );
|
||||
|
||||
auto mswParameters = wellPath->completionSettings()->mswParameters();
|
||||
|
||||
bool foundSubGridIntersections = false;
|
||||
|
||||
createWellPathSegments( branch,
|
||||
@@ -1290,42 +1295,52 @@ bool RicWellPathExportMswCompletionsImpl::generatePerforationsMswExportInfo(
|
||||
|
||||
if ( auto wellPathGroup = dynamic_cast<const RimWellPathGroup*>( wellPath ); wellPathGroup != nullptr )
|
||||
{
|
||||
auto initialChildMD = wellPathGroup->uniqueEndMD();
|
||||
auto initialChildTVD = -wellPathGroup->wellPathGeometry()->interpolatedPointAlongWellPath( initialMD ).z();
|
||||
for ( auto childWellPath : wellPathGroup->childWellPaths() )
|
||||
auto mswParameters = wellPath->perforationIntervalCollection()->mswParameters();
|
||||
|
||||
if ( !mswParameters )
|
||||
{
|
||||
auto childCellIntersections = generateCellSegments( eclipseCase, childWellPath, &initialChildMD );
|
||||
auto childBranch =
|
||||
std::make_unique<RicMswBranch>( childWellPath->name(), childWellPath, initialChildMD, initialChildTVD );
|
||||
|
||||
if ( wellPathGroup->outletValve() )
|
||||
RiaLogging::error( "generatePerforationsMswExportInfo: No mswParameters object found, aborting export" );
|
||||
}
|
||||
else
|
||||
{
|
||||
auto initialChildMD = wellPathGroup->uniqueEndMD();
|
||||
auto initialChildTVD = -wellPathGroup->wellPathGeometry()->interpolatedPointAlongWellPath( initialMD ).z();
|
||||
for ( auto childWellPath : wellPathGroup->childWellPaths() )
|
||||
{
|
||||
childBranch = RicMswValve::createExportValve( QString( "%1 valve for %2" )
|
||||
.arg( wellPathGroup->outletValve()->componentLabel() )
|
||||
.arg( childWellPath->name() ),
|
||||
childWellPath,
|
||||
initialChildMD,
|
||||
initialChildTVD,
|
||||
wellPathGroup->outletValve() );
|
||||
auto dummySegment = std::make_unique<
|
||||
RicMswSegment>( QString( "%1 segment" ).arg( wellPathGroup->outletValve()->componentLabel() ),
|
||||
initialChildMD,
|
||||
initialChildMD + 0.1,
|
||||
initialChildTVD,
|
||||
RicWellPathExportMswCompletionsImpl::tvdFromMeasuredDepth( wellPath,
|
||||
initialChildMD + 0.1 ) );
|
||||
childBranch->addSegment( std::move( dummySegment ) );
|
||||
}
|
||||
auto childCellIntersections =
|
||||
generateCellSegments( eclipseCase, childWellPath, mswParameters, &initialChildMD );
|
||||
auto childBranch =
|
||||
std::make_unique<RicMswBranch>( childWellPath->name(), childWellPath, initialChildMD, initialChildTVD );
|
||||
|
||||
if ( generatePerforationsMswExportInfo( eclipseCase,
|
||||
childWellPath,
|
||||
timeStep,
|
||||
initialChildMD,
|
||||
childCellIntersections,
|
||||
exportInfo,
|
||||
childBranch.get() ) )
|
||||
{
|
||||
branch->addChildBranch( std::move( childBranch ) );
|
||||
if ( wellPathGroup->outletValve() )
|
||||
{
|
||||
childBranch = RicMswValve::createExportValve( QString( "%1 valve for %2" )
|
||||
.arg( wellPathGroup->outletValve()->componentLabel() )
|
||||
.arg( childWellPath->name() ),
|
||||
childWellPath,
|
||||
initialChildMD,
|
||||
initialChildTVD,
|
||||
wellPathGroup->outletValve() );
|
||||
auto dummySegment = std::make_unique<
|
||||
RicMswSegment>( QString( "%1 segment" ).arg( wellPathGroup->outletValve()->componentLabel() ),
|
||||
initialChildMD,
|
||||
initialChildMD + 0.1,
|
||||
initialChildTVD,
|
||||
RicWellPathExportMswCompletionsImpl::tvdFromMeasuredDepth( wellPath,
|
||||
initialChildMD + 0.1 ) );
|
||||
childBranch->addSegment( std::move( dummySegment ) );
|
||||
}
|
||||
|
||||
if ( generatePerforationsMswExportInfo( eclipseCase,
|
||||
childWellPath,
|
||||
timeStep,
|
||||
initialChildMD,
|
||||
childCellIntersections,
|
||||
exportInfo,
|
||||
childBranch.get() ) )
|
||||
{
|
||||
branch->addChildBranch( std::move( childBranch ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1336,9 +1351,10 @@ bool RicWellPathExportMswCompletionsImpl::generatePerforationsMswExportInfo(
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<WellPathCellIntersectionInfo>
|
||||
RicWellPathExportMswCompletionsImpl::generateCellSegments( const RimEclipseCase* eclipseCase,
|
||||
const RimWellPath* wellPath,
|
||||
gsl::not_null<double*> initialMD )
|
||||
RicWellPathExportMswCompletionsImpl::generateCellSegments( const RimEclipseCase* eclipseCase,
|
||||
const RimWellPath* wellPath,
|
||||
const RimMswCompletionParameters* mswParameters,
|
||||
gsl::not_null<double*> initialMD )
|
||||
{
|
||||
const RigActiveCellInfo* activeCellInfo =
|
||||
eclipseCase->eclipseCaseData()->activeCellInfo( RiaDefines::PorosityModelType::MATRIX_MODEL );
|
||||
@@ -1360,10 +1376,9 @@ std::vector<WellPathCellIntersectionInfo>
|
||||
std::vector<WellPathCellIntersectionInfo> continuousIntersections =
|
||||
RigWellPathIntersectionTools::buildContinuousIntersections( allIntersections, mainGrid );
|
||||
|
||||
if ( wellPath->completionSettings()->mswParameters()->referenceMDType() ==
|
||||
RimMswCompletionParameters::MANUAL_REFERENCE_MD )
|
||||
if ( mswParameters->referenceMDType() == RimMswCompletionParameters::MANUAL_REFERENCE_MD )
|
||||
{
|
||||
*initialMD = wellPath->completionSettings()->mswParameters()->manualReferenceMD();
|
||||
*initialMD = mswParameters->manualReferenceMD();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1439,7 +1454,8 @@ std::vector<WellPathCellIntersectionInfo>
|
||||
// Skip all intersections before initial measured depth
|
||||
continue;
|
||||
}
|
||||
else if ( ( intersection.startMD - initialMD ) > epsilon )
|
||||
|
||||
if ( ( intersection.startMD - initialMD ) > epsilon )
|
||||
{
|
||||
filteredIntersections.push_back( intersection );
|
||||
}
|
||||
@@ -1731,7 +1747,7 @@ void RicWellPathExportMswCompletionsImpl::assignValveContributionsToSuperICDsOrA
|
||||
const RigActiveCellInfo* activeCellInfo,
|
||||
RiaDefines::EclipseUnitSystem unitSystem )
|
||||
{
|
||||
typedef std::map<RicMswCompletion*, std::vector<const RimWellPathValve*>> ValveContributionMap;
|
||||
using ValveContributionMap = std::map<RicMswCompletion*, std::vector<const RimWellPathValve*>>;
|
||||
|
||||
ValveContributionMap assignedRegularValves;
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ class RimPerforationInterval;
|
||||
class RimWellPath;
|
||||
class RimWellPathValve;
|
||||
class RimWellPathFracture;
|
||||
class RimMswCompletionParameters;
|
||||
class SubSegmentIntersectionInfo;
|
||||
class RigWellPath;
|
||||
|
||||
@@ -115,8 +116,9 @@ private:
|
||||
gsl::not_null<RicMswExportInfo*> exportInfo,
|
||||
gsl::not_null<RicMswBranch*> branch );
|
||||
|
||||
static std::vector<WellPathCellIntersectionInfo> generateCellSegments( const RimEclipseCase* eclipseCase,
|
||||
const RimWellPath* wellPath,
|
||||
static std::vector<WellPathCellIntersectionInfo> generateCellSegments( const RimEclipseCase* eclipseCase,
|
||||
const RimWellPath* wellPath,
|
||||
const RimMswCompletionParameters* mswParameters,
|
||||
gsl::not_null<double*> initialMD );
|
||||
|
||||
static std::vector<WellPathCellIntersectionInfo>
|
||||
|
||||
@@ -57,11 +57,10 @@ RimFishbonesCollection::RimFishbonesCollection()
|
||||
CAF_PDM_InitField( &m_startMD, "StartMD", HUGE_VAL, "Start MD", "", "", "" );
|
||||
CAF_PDM_InitField( &m_mainBoreDiameter, "MainBoreDiameter", 0.216, "Main Bore Diameter", "", "", "" );
|
||||
CAF_PDM_InitField( &m_skinFactor, "MainBoreSkinFactor", 0., "Main Bore Skin Factor [0..1]", "", "", "" );
|
||||
CAF_PDM_InitFieldNoDefault( &m_mswParameters_OBSOLETE, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
|
||||
m_mswParameters_OBSOLETE = new RimMswCompletionParameters( false );
|
||||
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeHidden( true );
|
||||
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeChildrenHidden( true );
|
||||
m_mswParameters_OBSOLETE.xmlCapability()->setIOWritable( false );
|
||||
CAF_PDM_InitFieldNoDefault( &m_mswParameters, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
|
||||
m_mswParameters = new RimMswCompletionParameters( false );
|
||||
m_mswParameters.uiCapability()->setUiTreeHidden( true );
|
||||
m_mswParameters.uiCapability()->setUiTreeChildrenHidden( true );
|
||||
manuallyModifiedStartMD = false;
|
||||
|
||||
// Moved to RimMswCompletionParameters and obsoleted
|
||||
@@ -136,6 +135,8 @@ void RimFishbonesCollection::defineUiOrdering( QString uiConfigName, caf::PdmUiO
|
||||
wellGroup->add( &m_startMD );
|
||||
wellGroup->add( &m_mainBoreDiameter );
|
||||
wellGroup->add( &m_skinFactor );
|
||||
caf::PdmUiGroup* mswGroup = uiOrdering.addNewGroup( "Multi Segment Well Options" );
|
||||
m_mswParameters->uiOrdering( uiConfigName, *mswGroup );
|
||||
uiOrdering.skipRemainingFields( true );
|
||||
}
|
||||
|
||||
@@ -146,19 +147,19 @@ void RimFishbonesCollection::initAfterRead()
|
||||
{
|
||||
if ( m_linerDiameter_OBSOLETE() != m_linerDiameter_OBSOLETE.defaultValue() )
|
||||
{
|
||||
m_mswParameters_OBSOLETE->setLinerDiameter( m_linerDiameter_OBSOLETE() );
|
||||
m_mswParameters->setLinerDiameter( m_linerDiameter_OBSOLETE() );
|
||||
}
|
||||
if ( m_roughnessFactor_OBSOLETE() != m_roughnessFactor_OBSOLETE.defaultValue() )
|
||||
{
|
||||
m_mswParameters_OBSOLETE->setRoughnessFactor( m_roughnessFactor_OBSOLETE() );
|
||||
m_mswParameters->setRoughnessFactor( m_roughnessFactor_OBSOLETE() );
|
||||
}
|
||||
if ( m_pressureDrop_OBSOLETE() != m_pressureDrop_OBSOLETE.defaultValue() )
|
||||
{
|
||||
m_mswParameters_OBSOLETE->setPressureDrop( m_pressureDrop_OBSOLETE() );
|
||||
m_mswParameters->setPressureDrop( m_pressureDrop_OBSOLETE() );
|
||||
}
|
||||
if ( m_lengthAndDepth_OBSOLETE() != m_lengthAndDepth_OBSOLETE.defaultValue() )
|
||||
{
|
||||
m_mswParameters_OBSOLETE->setLengthAndDepth( m_lengthAndDepth_OBSOLETE() );
|
||||
m_mswParameters->setLengthAndDepth( m_lengthAndDepth_OBSOLETE() );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,6 +175,14 @@ void RimFishbonesCollection::appendFishbonesSubs( RimFishbones* subs )
|
||||
subs->recomputeLateralLocations();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RimMswCompletionParameters* RimFishbonesCollection::mswParameters() const
|
||||
{
|
||||
return m_mswParameters();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -46,6 +46,7 @@ public:
|
||||
|
||||
RimImportedFishboneLateralsCollection* wellPathCollection() const;
|
||||
void appendFishbonesSubs( RimFishbones* subs );
|
||||
const RimMswCompletionParameters* mswParameters() const;
|
||||
|
||||
bool hasFishbones() const;
|
||||
std::vector<RimFishbones*> activeFishbonesSubs() const;
|
||||
@@ -69,6 +70,7 @@ private:
|
||||
private:
|
||||
caf::PdmChildArrayField<RimFishbones*> m_fishbones;
|
||||
caf::PdmChildField<RimImportedFishboneLateralsCollection*> m_wellPathCollection;
|
||||
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
|
||||
|
||||
caf::PdmField<double> m_startMD;
|
||||
caf::PdmField<double> m_skinFactor;
|
||||
@@ -80,5 +82,4 @@ private:
|
||||
|
||||
caf::PdmField<RimMswCompletionParameters::PressureDropEnum> m_pressureDrop_OBSOLETE;
|
||||
caf::PdmField<RimMswCompletionParameters::LengthAndDepthEnum> m_lengthAndDepth_OBSOLETE;
|
||||
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters_OBSOLETE;
|
||||
};
|
||||
|
||||
@@ -60,10 +60,10 @@ RimPerforationCollection::RimPerforationCollection()
|
||||
CAF_PDM_InitFieldNoDefault( &m_perforations, "Perforations", "Perforations", "", "", "" );
|
||||
m_perforations.uiCapability()->setUiHidden( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_mswParameters_OBSOLETE, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
|
||||
m_mswParameters_OBSOLETE = new RimMswCompletionParameters;
|
||||
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeHidden( true );
|
||||
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeChildrenHidden( true );
|
||||
CAF_PDM_InitFieldNoDefault( &m_mswParameters, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
|
||||
m_mswParameters = new RimMswCompletionParameters;
|
||||
m_mswParameters.uiCapability()->setUiTreeHidden( true );
|
||||
m_mswParameters.uiCapability()->setUiTreeChildrenHidden( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_nonDarcyParameters, "NonDarcyParameters", "Non-Darcy Parameters", "", "", "" );
|
||||
m_nonDarcyParameters = new RimNonDarcyPerforationParameters();
|
||||
@@ -176,13 +176,21 @@ std::vector<const RimPerforationInterval*> RimPerforationCollection::activePerfo
|
||||
return myActivePerforations;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimMswCompletionParameters* RimPerforationCollection::mswParameters() const
|
||||
{
|
||||
return m_mswParameters();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimPerforationCollection::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
||||
{
|
||||
caf::PdmUiGroup* mswGroup = uiOrdering.addNewGroup( "Multi Segment Well Options" );
|
||||
m_mswParameters_OBSOLETE->uiOrdering( uiConfigName, *mswGroup );
|
||||
m_mswParameters->uiOrdering( uiConfigName, *mswGroup );
|
||||
m_nonDarcyParameters->uiOrdering( uiConfigName, uiOrdering );
|
||||
uiOrdering.skipRemainingFields( true );
|
||||
}
|
||||
|
||||
@@ -56,6 +56,8 @@ public:
|
||||
std::vector<const RimPerforationInterval*> perforations() const;
|
||||
std::vector<const RimPerforationInterval*> activePerforations() const;
|
||||
|
||||
RimMswCompletionParameters* mswParameters() const;
|
||||
|
||||
private:
|
||||
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
||||
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
||||
@@ -66,5 +68,5 @@ private:
|
||||
caf::PdmChildArrayField<RimPerforationInterval*> m_perforations;
|
||||
caf::PdmChildField<RimNonDarcyPerforationParameters*> m_nonDarcyParameters;
|
||||
|
||||
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters_OBSOLETE;
|
||||
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
|
||||
};
|
||||
|
||||
@@ -90,11 +90,6 @@ RimWellPathCompletionSettings::RimWellPathCompletionSettings()
|
||||
CAF_PDM_InitField( &m_wellBoreFluidPVTTable, "WellBoreFluidPVTTable", 0, "Wellbore Fluid PVT table", "", "", "" );
|
||||
CAF_PDM_InitFieldNoDefault( &m_hydrostaticDensity, "HydrostaticDensity", "Hydrostatic Density", "", "", "" );
|
||||
CAF_PDM_InitField( &m_fluidInPlaceRegion, "FluidInPlaceRegion", 0, "Fluid In-Place Region", "", "", "" );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_mswParameters, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
|
||||
m_mswParameters = new RimMswCompletionParameters( false );
|
||||
m_mswParameters.uiCapability()->setUiTreeHidden( true );
|
||||
m_mswParameters.uiCapability()->setUiTreeChildrenHidden( true );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -250,30 +245,6 @@ QString RimWellPathCompletionSettings::fluidInPlaceRegionForExport() const
|
||||
return QString( "%1" ).arg( m_fluidInPlaceRegion() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimWellPathCompletionSettings::setUnitSystemSpecificDefaults()
|
||||
{
|
||||
m_mswParameters->setUnitSystemSpecificDefaults();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RimMswCompletionParameters* RimWellPathCompletionSettings::mswParameters() const
|
||||
{
|
||||
return m_mswParameters();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimMswCompletionParameters* RimWellPathCompletionSettings::mswParameters()
|
||||
{
|
||||
return m_mswParameters();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -301,8 +272,6 @@ void RimWellPathCompletionSettings::defineUiOrdering( QString uiConfigName, caf:
|
||||
compExportGroup->add( &m_hydrostaticDensity );
|
||||
compExportGroup->add( &m_fluidInPlaceRegion );
|
||||
|
||||
caf::PdmUiGroup* mswGroup = uiOrdering.addNewGroup( "Multi Segment Well Options" );
|
||||
m_mswParameters->uiOrdering( uiConfigName, *mswGroup );
|
||||
uiOrdering.skipRemainingFields( true );
|
||||
}
|
||||
|
||||
|
||||
@@ -80,10 +80,6 @@ public:
|
||||
QString wellBoreFluidPVTForExport() const;
|
||||
QString hydrostaticDensityForExport() const;
|
||||
QString fluidInPlaceRegionForExport() const;
|
||||
void setUnitSystemSpecificDefaults();
|
||||
|
||||
const RimMswCompletionParameters* mswParameters() const;
|
||||
RimMswCompletionParameters* mswParameters();
|
||||
|
||||
static QRegExp wellNameForExportRegExp();
|
||||
|
||||
@@ -112,6 +108,4 @@ private:
|
||||
caf::PdmField<int> m_wellBoreFluidPVTTable;
|
||||
caf::PdmField<HydrostaticDensityEnum> m_hydrostaticDensity;
|
||||
caf::PdmField<int> m_fluidInPlaceRegion;
|
||||
|
||||
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
|
||||
};
|
||||
|
||||
@@ -38,10 +38,10 @@ RimWellPathFractureCollection::RimWellPathFractureCollection( void )
|
||||
setName( "Fractures" );
|
||||
nameField()->uiCapability()->setUiHidden( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_mswParameters_OBSOLETE, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
|
||||
m_mswParameters_OBSOLETE = new RimMswCompletionParameters;
|
||||
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeHidden( true );
|
||||
m_mswParameters_OBSOLETE.uiCapability()->setUiTreeChildrenHidden( true );
|
||||
CAF_PDM_InitFieldNoDefault( &m_mswParameters, "MswParameters", "Multi Segment Well Parameters", "", "", "" );
|
||||
m_mswParameters = new RimMswCompletionParameters;
|
||||
m_mswParameters.uiCapability()->setUiTreeHidden( true );
|
||||
m_mswParameters.uiCapability()->setUiTreeChildrenHidden( true );
|
||||
|
||||
CAF_PDM_InitField( &m_refMDType_OBSOLETE, "RefMDType", std::numeric_limits<int>::max(), "Reference MD", "", "", "" );
|
||||
CAF_PDM_InitField( &m_refMD_OBSOLETE, "RefMD", std::numeric_limits<double>::infinity(), "", "", "", "" );
|
||||
@@ -80,6 +80,14 @@ void RimWellPathFractureCollection::deleteFractures()
|
||||
m_fractures.deleteAllChildObjects();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RimMswCompletionParameters* RimWellPathFractureCollection::mswParameters() const
|
||||
{
|
||||
return m_mswParameters();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -114,6 +122,9 @@ std::vector<RimWellPathFracture*> RimWellPathFractureCollection::activeFractures
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimWellPathFractureCollection::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
||||
{
|
||||
caf::PdmUiGroup* mswGroup = uiOrdering.addNewGroup( "Multi Segment Well Options" );
|
||||
m_mswParameters->uiOrdering( uiConfigName, *mswGroup );
|
||||
|
||||
uiOrdering.skipRemainingFields( true );
|
||||
}
|
||||
|
||||
@@ -141,12 +152,12 @@ void RimWellPathFractureCollection::initAfterRead()
|
||||
{
|
||||
if ( m_refMDType_OBSOLETE() != std::numeric_limits<int>::max() )
|
||||
{
|
||||
m_mswParameters_OBSOLETE->setReferenceMDType( (RimMswCompletionParameters::ReferenceMDType)m_refMDType_OBSOLETE() );
|
||||
m_mswParameters->setReferenceMDType( (RimMswCompletionParameters::ReferenceMDType)m_refMDType_OBSOLETE() );
|
||||
}
|
||||
|
||||
if ( m_refMD_OBSOLETE() != std::numeric_limits<double>::infinity() )
|
||||
{
|
||||
m_mswParameters_OBSOLETE->setManualReferenceMD( m_refMD_OBSOLETE() );
|
||||
m_mswParameters->setManualReferenceMD( m_refMD_OBSOLETE() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ public:
|
||||
void addFracture( RimWellPathFracture* fracture );
|
||||
void deleteFractures();
|
||||
|
||||
const RimMswCompletionParameters* mswParameters() const;
|
||||
std::vector<RimWellPathFracture*> allFractures() const;
|
||||
std::vector<RimWellPathFracture*> activeFractures() const;
|
||||
|
||||
@@ -63,5 +64,5 @@ private:
|
||||
caf::PdmField<int> m_refMDType_OBSOLETE;
|
||||
caf::PdmField<double> m_refMD_OBSOLETE;
|
||||
|
||||
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters_OBSOLETE;
|
||||
caf::PdmChildField<RimMswCompletionParameters*> m_mswParameters;
|
||||
};
|
||||
|
||||
@@ -480,22 +480,9 @@ void RimWellPath::initAfterRead()
|
||||
{
|
||||
if ( RimProject::current()->isProjectFileVersionEqualOrOlderThan( "2020.10.1" ) )
|
||||
{
|
||||
if ( isTopLevelWellPath() && m_completionSettings->mswParameters()->isDefault() )
|
||||
if ( m_completionSettings->wellNameForExport().isEmpty() )
|
||||
{
|
||||
std::vector<const RimMswCompletionParameters*> allExistingMswParameters;
|
||||
descendantsOfType( allExistingMswParameters );
|
||||
for ( auto mswParameters : allExistingMswParameters )
|
||||
{
|
||||
if ( !mswParameters->isDefault() )
|
||||
{
|
||||
*( m_completionSettings->mswParameters() ) = *mswParameters;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( m_completionSettings->wellNameForExport().isEmpty() )
|
||||
{
|
||||
m_completionSettings->setWellNameForExport( name() );
|
||||
}
|
||||
m_completionSettings->setWellNameForExport( name() );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -671,12 +658,9 @@ void RimWellPath::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering,
|
||||
{
|
||||
uiTreeOrdering.add( &m_wellLogFiles );
|
||||
|
||||
if ( isTopLevelWellPath() && !allCompletionsRecursively().empty() )
|
||||
if ( completionSettings() && isTopLevelWellPath() && !allCompletionsRecursively().empty() )
|
||||
{
|
||||
if ( completionSettings() )
|
||||
{
|
||||
uiTreeOrdering.add( completionSettings() );
|
||||
}
|
||||
uiTreeOrdering.add( completionSettings() );
|
||||
}
|
||||
|
||||
if ( m_completions->fishbonesCollection()->hasFishbones() )
|
||||
@@ -778,7 +762,13 @@ void RimWellPath::setUnitSystem( RiaDefines::EclipseUnitSystem unitSystem )
|
||||
m_unitSystem = unitSystem;
|
||||
|
||||
m_completions->setUnitSystemSpecificDefaults();
|
||||
m_completionSettings->setUnitSystemSpecificDefaults();
|
||||
|
||||
std::vector<RimMswCompletionParameters*> mswParameters;
|
||||
descendantsOfType( mswParameters );
|
||||
for ( auto mswParams : mswParameters )
|
||||
{
|
||||
mswParams->setUnitSystemSpecificDefaults();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -1042,6 +1032,19 @@ bool RimWellPath::isTopLevelWellPath() const
|
||||
return this == topLevelWellPath();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimWellPath::isMultiLateralWellPath() const
|
||||
{
|
||||
auto top = topLevelWellPath();
|
||||
|
||||
std::vector<RimWellPath*> wells;
|
||||
top->descendantsIncludingThisOfType( wells );
|
||||
|
||||
return wells.size() > 1;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -155,6 +155,7 @@ public:
|
||||
std::vector<caf::PdmObjectHandle*>& referringObjects ) override;
|
||||
|
||||
bool isTopLevelWellPath() const;
|
||||
bool isMultiLateralWellPath() const;
|
||||
RimWellPath* topLevelWellPath() const;
|
||||
void updateAfterAddingToWellPathGroup();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user