#7339 Move dynamic and static case from instance to template.

This commit is contained in:
Kristian Bendiksen 2021-02-10 10:48:56 +01:00
parent b68d3a5336
commit ad0e07a540
4 changed files with 128 additions and 14 deletions

View File

@ -18,7 +18,10 @@
#include "RicNewStimPlanModelTemplateFeature.h"
#include "RiaApplication.h"
#include "RimCompletionTemplateCollection.h"
#include "RimEclipseView.h"
#include "RimOilField.h"
#include "RimProject.h"
#include "RimStimPlanModelTemplate.h"
@ -54,6 +57,16 @@ void RicNewStimPlanModelTemplateFeature::onActionTriggered( bool isChecked )
RimStimPlanModelTemplate* stimPlanModelTemplate = new RimStimPlanModelTemplate;
stimPlanModelTemplate->setName( RicFractureNameGenerator::nameForNewStimPlanModelTemplate() );
RimEclipseView* activeView = dynamic_cast<RimEclipseView*>( RiaApplication::instance()->activeGridView() );
if ( activeView )
{
RimEclipseCase* eclipseCase = eclipseCase = activeView->eclipseCase();
int timeStep = activeView->currentTimeStep();
stimPlanModelTemplate->setDynamicEclipseCase( eclipseCase );
stimPlanModelTemplate->setTimeStep( timeStep );
stimPlanModelTemplate->setStaticEclipseCase( eclipseCase );
}
fracModColl->addStimPlanModelTemplate( stimPlanModelTemplate );
fracModColl->updateConnectedEditors();
Riu3DMainWindowTools::selectAsCurrentItem( stimPlanModelTemplate );

View File

@ -137,9 +137,13 @@ RimStimPlanModel::RimStimPlanModel()
m_editStimPlanModelTemplate.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
CAF_PDM_InitScriptableFieldNoDefault( &m_eclipseCase, "EclipseCase", "Dynamic Case", "", "", "" );
m_eclipseCase.uiCapability()->setUiReadOnly( true );
CAF_PDM_InitScriptableField( &m_timeStep, "TimeStep", 0, "Time Step", "", "", "" );
m_timeStep.uiCapability()->setUiReadOnly( true );
CAF_PDM_InitScriptableFieldNoDefault( &m_staticEclipseCase, "StaticEclipseCase", "Static Case", "", "", "" );
m_staticEclipseCase.uiCapability()->setUiReadOnly( true );
CAF_PDM_InitScriptableField( &m_MD, "MeasuredDepth", 0.0, "Measured Depth", "", "", "" );
m_MD.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() );
@ -1559,9 +1563,11 @@ RimEclipseCase* RimStimPlanModel::eclipseCaseForProperty( RiaDefines::CurvePrope
//--------------------------------------------------------------------------------------------------
void RimStimPlanModel::setEclipseCase( RimEclipseCase* eclipseCase )
{
m_eclipseCase = eclipseCase;
m_staticEclipseCase = eclipseCase;
updateExtractionDepthBoundaries();
if ( m_stimPlanModelTemplate )
{
m_stimPlanModelTemplate->setDynamicEclipseCase( eclipseCase );
m_stimPlanModelTemplate->setStaticEclipseCase( eclipseCase );
}
}
//--------------------------------------------------------------------------------------------------
@ -1663,6 +1669,17 @@ RimStimPlanModelTemplate* RimStimPlanModel::stimPlanModelTemplate() const
//--------------------------------------------------------------------------------------------------
void RimStimPlanModel::stimPlanModelTemplateChanged( const caf::SignalEmitter* emitter )
{
if ( m_stimPlanModelTemplate() )
{
m_eclipseCase = m_stimPlanModelTemplate()->dynamicEclipseCase();
m_timeStep = m_stimPlanModelTemplate()->timeStep();
m_staticEclipseCase = m_stimPlanModelTemplate()->staticEclipseCase();
updateExtractionDepthBoundaries();
updateThicknessDirection();
updateBarrierProperties();
}
updateViewsAndPlots();
}

View File

@ -60,6 +60,11 @@ RimStimPlanModelTemplate::RimStimPlanModelTemplate()
CAF_PDM_InitScriptableField( &m_id, "Id", -1, "ID", "", "", "" );
m_id.uiCapability()->setUiReadOnly( true );
CAF_PDM_InitScriptableFieldNoDefault( &m_dynamicEclipseCase, "DynamicEclipseCase", "Dynamic Case", "", "", "" );
CAF_PDM_InitScriptableField( &m_timeStep, "TimeStep", 0, "Time Step", "", "", "" );
CAF_PDM_InitScriptableFieldNoDefault( &m_staticEclipseCase, "StaticEclipseCase", "Static Case", "", "", "" );
CAF_PDM_InitScriptableField( &m_defaultPorosity,
"DefaultPorosity",
RiaDefines::defaultPorosity(),
@ -178,6 +183,16 @@ void RimStimPlanModelTemplate::fieldChangedByUi( const caf::PdmFieldHandle* chan
const QVariant& oldValue,
const QVariant& newValue )
{
if ( changedField == &m_dynamicEclipseCase )
{
// Set a valid default time step
const int timeStepCount = m_dynamicEclipseCase->timeStepStrings().size();
if ( timeStepCount > 0 )
{
m_timeStep = timeStepCount - 1;
}
}
changed.send();
}
@ -213,6 +228,14 @@ QList<caf::PdmOptionItemInfo>
}
}
}
else if ( fieldNeedingOptions == &m_dynamicEclipseCase || fieldNeedingOptions == &m_staticEclipseCase )
{
RimTools::eclipseCaseOptionItems( &options );
}
else if ( fieldNeedingOptions == &m_timeStep )
{
RimTools::timeStepsForCase( m_dynamicEclipseCase(), &options );
}
return options;
}
@ -224,6 +247,9 @@ void RimStimPlanModelTemplate::defineUiOrdering( QString uiConfigName, caf::PdmU
{
uiOrdering.add( nameField() );
uiOrdering.add( &m_id );
uiOrdering.add( &m_dynamicEclipseCase );
uiOrdering.add( &m_timeStep );
uiOrdering.add( &m_staticEclipseCase );
caf::PdmUiOrdering* defaultsGroup = uiOrdering.addNewGroup( "Defaults" );
defaultsGroup->add( &m_defaultPorosity );
@ -598,7 +624,7 @@ double RimStimPlanModelTemplate::referenceTemperatureDepth() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
double RimStimPlanModelTemplate::computeDefaultStressDepth()
double RimStimPlanModelTemplate::computeDefaultStressDepth() const
{
const double stressDepth = 1000.0;
@ -612,19 +638,15 @@ double RimStimPlanModelTemplate::computeDefaultStressDepth()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseCase* RimStimPlanModelTemplate::getEclipseCase()
RimEclipseCase* RimStimPlanModelTemplate::getEclipseCase() const
{
// Find an eclipse case
RimProject* proj = RimProject::current();
if ( proj->eclipseCases().empty() ) return nullptr;
return proj->eclipseCases()[0];
return m_staticEclipseCase();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RigEclipseCaseData* RimStimPlanModelTemplate::getEclipseCaseData()
RigEclipseCaseData* RimStimPlanModelTemplate::getEclipseCaseData() const
{
// Find an eclipse case
RimEclipseCase* eclipseCase = getEclipseCase();
@ -632,3 +654,54 @@ RigEclipseCaseData* RimStimPlanModelTemplate::getEclipseCaseData()
return eclipseCase->eclipseCaseData();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStimPlanModelTemplate::setDynamicEclipseCase( RimEclipseCase* eclipseCase )
{
m_dynamicEclipseCase = eclipseCase;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStimPlanModelTemplate::setTimeStep( int timeStep )
{
m_timeStep = timeStep;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimStimPlanModelTemplate::setStaticEclipseCase( RimEclipseCase* eclipseCase )
{
m_staticEclipseCase = eclipseCase;
if ( m_nonNetLayers ) m_nonNetLayers->setEclipseCase( eclipseCase );
if ( m_faciesProperties ) m_faciesProperties->setEclipseCase( eclipseCase );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseCase* RimStimPlanModelTemplate::dynamicEclipseCase() const
{
return m_dynamicEclipseCase;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RimStimPlanModelTemplate::timeStep() const
{
return m_timeStep;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseCase* RimStimPlanModelTemplate::staticEclipseCase() const
{
return m_staticEclipseCase;
}

View File

@ -82,6 +82,14 @@ public:
double verticalStressGradient() const;
double stressDepth() const;
void setDynamicEclipseCase( RimEclipseCase* eclipseCase );
void setTimeStep( int timeStep );
void setStaticEclipseCase( RimEclipseCase* eclipseCase );
RimEclipseCase* dynamicEclipseCase() const;
int timeStep() const;
RimEclipseCase* staticEclipseCase() const;
void loadDataAndUpdate();
void setElasticProperties( RimElasticProperties* elasticProperties );
@ -105,16 +113,19 @@ protected:
caf::PdmUiEditorAttribute* attribute ) override;
private:
static RimEclipseCase* getEclipseCase();
static RigEclipseCaseData* getEclipseCaseData();
RimEclipseCase* getEclipseCase() const;
RigEclipseCaseData* getEclipseCaseData() const;
void faciesPropertiesChanged( const caf::SignalEmitter* emitter );
void elasticPropertiesChanged( const caf::SignalEmitter* emitter );
void nonNetLayersChanged( const caf::SignalEmitter* emitter );
static double computeDefaultStressDepth();
double computeDefaultStressDepth() const;
caf::PdmField<int> m_id;
caf::PdmPtrField<RimEclipseCase*> m_dynamicEclipseCase;
caf::PdmField<int> m_timeStep;
caf::PdmPtrField<RimEclipseCase*> m_staticEclipseCase;
caf::PdmField<double> m_defaultPorosity;
caf::PdmField<double> m_defaultPermeability;
caf::PdmField<double> m_verticalStress;