#8079 StimPlan Model plot: Add Perforation interval in Fm. track

This commit is contained in:
Kristian Bendiksen 2021-10-15 12:52:25 +02:00
parent cc80f2300b
commit 6b3ad20587
3 changed files with 46 additions and 12 deletions

View File

@ -225,6 +225,9 @@ void RicNewStimPlanModelPlotFeature::createFormationTrack( RimStimPlanModelPlot*
formationTrack->setFormationCase( eclipseCase );
formationTrack->setAnnotationType( RiuPlotAnnotationTool::RegionAnnotationType::FORMATION_ANNOTATIONS );
formationTrack->setXAxisGridVisibility( RimWellLogPlot::AxisGridVisibility::AXIS_GRID_NONE );
formationTrack->setShowWellPathAttributes( true );
formationTrack->setShowBothSidesOfWell( false );
formationTrack->setWellPathAttributesSource( stimPlanModel->thicknessDirectionWellPath() );
formationTrack->setVisibleXRange( 0.0, 0.0 );
formationTrack->setOverburdenHeight( stimPlanModel->overburdenHeight() );
formationTrack->setUnderburdenHeight( stimPlanModel->underburdenHeight() );

View File

@ -47,6 +47,7 @@
#include "RimModeledWellPath.h"
#include "RimNonNetLayers.h"
#include "RimOilField.h"
#include "RimPerforationCollection.h"
#include "RimPolylineTarget.h"
#include "RimPressureTable.h"
#include "RimProject.h"
@ -259,6 +260,8 @@ RimStimPlanModel::RimStimPlanModel()
"",
"" );
CAF_PDM_InitScriptableFieldNoDefault( &m_perforationInterval, "PerforationInterval", "Perforation Interval", "", "", "" );
m_calculator = std::shared_ptr<RimStimPlanModelCalculator>( new RimStimPlanModelCalculator );
m_calculator->setStimPlanModel( this );
@ -336,10 +339,12 @@ void RimStimPlanModel::fieldChangedByUi( const caf::PdmFieldHandle* changedField
changedField == &m_autoComputeBarrier || changedField == &m_azimuthAngle ||
changedField == &m_showOnlyBarrierFault || changedField == &m_eclipseCase ||
changedField == &m_extractionDepthTop || changedField == &m_extractionDepthBottom ||
changedField == &m_extractionOffsetTop || changedField == &m_extractionOffsetBottom )
changedField == &m_extractionOffsetTop || changedField == &m_extractionOffsetBottom ||
changedField == &m_perforationLength )
{
updateThicknessDirection();
updateBarrierProperties();
updatePerforationInterval();
}
if ( changedField == &m_eclipseCase )
@ -796,6 +801,26 @@ RimAnnotationCollectionBase* RimStimPlanModel::annotationCollection()
return oilField ? oilField->annotationCollection() : nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStimPlanModel::updatePerforationInterval()
{
if ( m_thicknessDirectionWellPath )
{
if ( !m_perforationInterval )
{
m_perforationInterval = new RimPerforationInterval;
m_thicknessDirectionWellPath->perforationIntervalCollection()->appendPerforation( m_perforationInterval );
}
double closestMd = m_thicknessDirectionWellPath->wellPathGeometry()->closestMeasuredDepth( m_anchorPosition );
m_perforationInterval->setStartAndEndMD( closestMd - perforationLength(), closestMd + perforationLength() );
m_perforationInterval->updateConnectedEditors();
updateViewsAndPlots();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -943,6 +968,7 @@ void RimStimPlanModel::resetAnchorPositionAndThicknessDirection()
updatePositionFromMeasuredDepth();
updateExtractionDepthBoundaries();
updateThicknessDirection();
updatePerforationInterval();
updateBarrierProperties();
}
@ -1300,6 +1326,7 @@ void RimStimPlanModel::setMD( double md )
updatePositionFromMeasuredDepth();
updateExtractionDepthBoundaries();
updateThicknessDirection();
updatePerforationInterval();
updateBarrierProperties();
}
@ -1312,6 +1339,7 @@ void RimStimPlanModel::setEclipseCaseAndTimeStep( RimEclipseCase* eclipseCase, i
setTimeStep( timeStep );
updateExtractionDepthBoundaries();
updateThicknessDirection();
updatePerforationInterval();
updateBarrierProperties();
updateViewsAndPlots();
updateConnectedEditors();
@ -1517,8 +1545,8 @@ void RimStimPlanModel::stimPlanModelTemplateChanged( const caf::SignalEmitter* e
m_initialPressureEclipseCase = m_stimPlanModelTemplate()->initialPressureEclipseCase();
m_staticEclipseCase = m_stimPlanModelTemplate()->staticEclipseCase();
updateExtractionDepthBoundaries();
updateThicknessDirection();
updatePerforationInterval();
updateBarrierProperties();
}

View File

@ -22,6 +22,7 @@
#include "RimCheckableNamedObject.h"
#include "RimExtractionConfiguration.h"
#include "RimPerforationInterval.h"
#include "RimWellPathComponentInterface.h"
#include "RigWellLogExtractor.h"
@ -203,6 +204,7 @@ private:
void updateThicknessDirection();
void updateDistanceToBarrierAndDip();
void updateThicknessDirectionWellPathName();
void updatePerforationInterval();
RigEclipseCaseData* getEclipseCaseData() const;
@ -253,16 +255,17 @@ protected:
caf::PdmField<double> m_azimuthAngle;
caf::PdmField<double> m_perforationLength;
caf::PdmField<double> m_formationDip;
caf::PdmField<bool> m_autoComputeBarrier;
caf::PdmField<bool> m_hasBarrier;
caf::PdmField<double> m_distanceToBarrier;
caf::PdmField<double> m_barrierDip;
caf::PdmField<int> m_wellPenetrationLayer;
caf::PdmPtrField<RimTextAnnotation*> m_barrierTextAnnotation;
caf::PdmField<QString> m_barrierFaultName;
caf::PdmField<bool> m_showOnlyBarrierFault;
caf::PdmField<bool> m_showAllFaults;
caf::PdmField<double> m_formationDip;
caf::PdmField<bool> m_autoComputeBarrier;
caf::PdmField<bool> m_hasBarrier;
caf::PdmField<double> m_distanceToBarrier;
caf::PdmField<double> m_barrierDip;
caf::PdmField<int> m_wellPenetrationLayer;
caf::PdmPtrField<RimTextAnnotation*> m_barrierTextAnnotation;
caf::PdmField<QString> m_barrierFaultName;
caf::PdmField<bool> m_showOnlyBarrierFault;
caf::PdmField<bool> m_showAllFaults;
caf::PdmPtrField<RimPerforationInterval*> m_perforationInterval;
std::shared_ptr<RimStimPlanModelCalculator> m_calculator;
};