#6833: Set eclipse case and time step in fracture model.

This commit is contained in:
Kristian Bendiksen
2020-10-23 15:29:02 +02:00
parent 5bc5f5ddb7
commit a9930e5fe0
13 changed files with 128 additions and 66 deletions

View File

@@ -67,10 +67,12 @@ CAF_CMD_SOURCE_INIT( RicNewFractureModelPlotFeature, "RicNewFractureModelPlotFea
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimFractureModelPlot*
RicNewFractureModelPlotFeature::createPlot( RimEclipseCase* eclipseCase, RimFractureModel* fractureModel, int timeStep )
RimFractureModelPlot* RicNewFractureModelPlotFeature::createPlot( RimFractureModel* fractureModel )
{
RimEclipseCase* eclipseCase = fractureModel->eclipseCase();
int timeStep = fractureModel->timeStep();
caf::ProgressInfo progInfo( 100, "Creating Fracture Model Plot" );
RimFractureModelPlot* plot = createFractureModelPlot( true, "Fracture Model" );
@@ -193,16 +195,7 @@ void RicNewFractureModelPlotFeature::onActionTriggered( bool isChecked )
RimFractureModel* fractureModel = caf::SelectionManager::instance()->selectedItemAncestorOfType<RimFractureModel>();
if ( !fractureModel ) return;
Rim3dView* view = RiaApplication::instance()->activeReservoirView();
if ( !view ) return;
RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>( view );
if ( !eclipseView ) return;
RimEclipseCase* eclipseCase = eclipseView->eclipseCase();
if ( !eclipseCase ) return;
createPlot( eclipseCase, fractureModel, view->currentTimeStep() );
createPlot( fractureModel );
}
//--------------------------------------------------------------------------------------------------

View File

@@ -39,7 +39,7 @@ class RicNewFractureModelPlotFeature : public caf::CmdFeature
CAF_CMD_HEADER_INIT;
public:
static RimFractureModelPlot* createPlot( RimEclipseCase* eclipseCase, RimFractureModel* fractureModel, int timeStep );
static RimFractureModelPlot* createPlot( RimFractureModel* fractureModel );
protected:
// Overrides

View File

@@ -22,6 +22,7 @@
#include "RicFractureNameGenerator.h"
#include "RimEclipseView.h"
#include "RimFractureModel.h"
#include "RimFractureModelCollection.h"
#include "RimModeledWellPath.h"
@@ -48,6 +49,8 @@ CAF_CMD_SOURCE_INIT( RicNewFractureModelFeature, "RicNewFractureModelFeature" );
//--------------------------------------------------------------------------------------------------
RimFractureModel* RicNewFractureModelFeature::addFractureModel( RimWellPath* wellPath,
RimWellPathCollection* wellPathCollection,
RimEclipseCase* eclipseCase,
int timeStep,
double measuredDepth )
{
CVF_ASSERT( wellPath );
@@ -64,6 +67,9 @@ RimFractureModel* RicNewFractureModelFeature::addFractureModel( RimWellPath*
RimFractureModel* fractureModel = new RimFractureModel();
fractureModelCollection->addFractureModel( fractureModel );
fractureModel->setEclipseCase( eclipseCase );
fractureModel->setTimeStep( timeStep );
QString fractureModelName = RicFractureNameGenerator::nameForNewFractureModel();
fractureModel->setName( fractureModelName );
@@ -106,7 +112,16 @@ void RicNewFractureModelFeature::onActionTriggered( bool isChecked )
RimWellPathCollection* wellPathCollection = nullptr;
fractureColl->firstAncestorOrThisOfTypeAsserted( wellPathCollection );
RicNewFractureModelFeature::addFractureModel( wellPath, wellPathCollection );
RimEclipseView* activeView = dynamic_cast<RimEclipseView*>( RiaApplication::instance()->activeGridView() );
RimEclipseCase* eclipseCase = nullptr;
int timeStep = 0;
if ( activeView )
{
eclipseCase = activeView->eclipseCase();
timeStep = activeView->currentTimeStep();
}
RicNewFractureModelFeature::addFractureModel( wellPath, wellPathCollection, eclipseCase, timeStep );
}
//--------------------------------------------------------------------------------------------------

View File

@@ -24,6 +24,7 @@ class RimFractureModel;
class RimFractureModelCollection;
class RimWellPath;
class RimWellPathCollection;
class RimEclipseCase;
//==================================================================================================
///
@@ -33,8 +34,11 @@ class RicNewFractureModelFeature : public caf::CmdFeature
CAF_CMD_HEADER_INIT;
public:
static RimFractureModel*
addFractureModel( RimWellPath* wellPath, RimWellPathCollection* wellPathCollection, double measuredDepth = -1.0 );
static RimFractureModel* addFractureModel( RimWellPath* wellPath,
RimWellPathCollection* wellPathCollection,
RimEclipseCase* eclipseCase = nullptr,
int timeStep = 0,
double measuredDepth = -1.0 );
protected:
void onActionTriggered( bool isChecked ) override;

View File

@@ -18,8 +18,11 @@
#include "RicNewWellPathFractureModelAtPosFeature.h"
#include "RiaApplication.h"
#include "RicNewFractureModelFeature.h"
#include "RimEclipseView.h"
#include "RimTools.h"
#include "RimWellPath.h"
#include "RimWellPathCollection.h"
@@ -47,7 +50,20 @@ void RicNewWellPathFractureModelAtPosFeature::onActionTriggered( bool isChecked
RimWellPathCollection* wellPathCollection = RimTools::wellPathCollection();
if ( !wellPathCollection ) return;
RicNewFractureModelFeature::addFractureModel( wellPath, wellPathCollection, wellPathItem->m_measuredDepth );
RimEclipseView* activeView = dynamic_cast<RimEclipseView*>( RiaApplication::instance()->activeGridView() );
RimEclipseCase* eclipseCase = nullptr;
int timeStep = 0;
if ( activeView )
{
eclipseCase = activeView->eclipseCase();
timeStep = activeView->currentTimeStep();
}
RicNewFractureModelFeature::addFractureModel( wellPath,
wellPathCollection,
eclipseCase,
timeStep,
wellPathItem->m_measuredDepth );
}
//--------------------------------------------------------------------------------------------------

View File

@@ -56,10 +56,7 @@ well_path = project.well_path_by_name("B-2 H")
print("well path:", well_path)
fracture_model_collection = project.descendants(rips.FractureModelCollection)[0]
# Create fracture model at a give measured depth
measured_depth = 3200.0
fracture_model = fracture_model_collection.new_fracture_model(well_path=well_path, measured_depth=measured_depth, fracture_model_template=fracture_model_template)
# Find a case
cases = resinsight.project.cases()
case = cases[0]
@@ -67,9 +64,17 @@ case = cases[0]
time_steps = case.time_steps()
time_step = time_steps[len(time_steps) - 1]
# Create fracture model at a give measured depth
measured_depth = 3200.0
fracture_model = fracture_model_collection.new_fracture_model(eclipse_case=case,
time_step=time_step,
well_path=well_path,
measured_depth=measured_depth,
fracture_model_template=fracture_model_template)
# Create a fracture mode plot
fracture_model_plot_collection = project.descendants(rips.FractureModelPlotCollection)[0]
fracture_model_plot = fracture_model_plot_collection.new_fracture_model_plot(eclipse_case=case, fracture_model=fracture_model, time_step=time_step)
fracture_model_plot = fracture_model_plot_collection.new_fracture_model_plot(fracture_model=fracture_model)
export_folder = tempfile.gettempdir()

View File

@@ -44,6 +44,7 @@
#include "RimFaciesProperties.h"
#include "RimFaultInView.h"
#include "RimFaultInViewCollection.h"
#include "RimFracture.h"
#include "RimFractureModelCalculator.h"
#include "RimFractureModelPlot.h"
#include "RimFractureModelTemplate.h"
@@ -136,6 +137,7 @@ RimFractureModel::RimFractureModel()
m_editFractureModelTemplate.uiCapability()->setUiEditorTypeName( caf::PdmUiToolButtonEditor::uiEditorTypeName() );
m_editFractureModelTemplate.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
CAF_PDM_InitScriptableFieldNoDefault( &m_eclipseCase, "EclipseCase", "Case", "", "", "" );
CAF_PDM_InitScriptableField( &m_timeStep, "TimeStep", 0, "Time Step", "", "", "" );
CAF_PDM_InitScriptableField( &m_MD, "MeasuredDepth", 0.0, "Measured Depth", "", "", "" );
@@ -290,12 +292,22 @@ void RimFractureModel::fieldChangedByUi( const caf::PdmFieldHandle* changedField
if ( changedField == &m_MD || changedField == &m_extractionType || changedField == &m_boundingBoxVertical ||
changedField == &m_boundingBoxHorizontal || changedField == &m_fractureOrientation ||
changedField == &m_autoComputeBarrier || changedField == &m_azimuthAngle ||
changedField == &m_showOnlyBarrierFault )
changedField == &m_showOnlyBarrierFault || changedField == &m_eclipseCase )
{
updateThicknessDirection();
updateBarrierProperties();
}
if ( changedField == &m_eclipseCase )
{
// Set a valid default time step
const int timeStepCount = m_eclipseCase->timeStepStrings().size();
if ( timeStepCount > 0 )
{
m_timeStep = timeStepCount - 1;
}
}
if ( changedField == &m_showAllFaults )
{
m_showAllFaults = false;
@@ -323,6 +335,11 @@ void RimFractureModel::fieldChangedByUi( const caf::PdmFieldHandle* changedField
m_thermalExpansionCoeffientDefault.uiCapability()->setUiReadOnly( !m_useDetailedFluidLoss );
}
if ( changedField == &m_fractureModelTemplate )
{
setFractureModelTemplate( m_fractureModelTemplate() );
}
if ( changedField == &m_editFractureModelTemplate )
{
m_editFractureModelTemplate = false;
@@ -331,13 +348,10 @@ void RimFractureModel::fieldChangedByUi( const caf::PdmFieldHandle* changedField
Riu3DMainWindowTools::selectAsCurrentItem( m_fractureModelTemplate() );
}
}
if ( changedField == &m_fractureModelTemplate )
else
{
setFractureModelTemplate( m_fractureModelTemplate() );
updateViewsAndPlots();
}
updateViewsAndPlots();
}
//--------------------------------------------------------------------------------------------------
@@ -363,6 +377,14 @@ QList<caf::PdmOptionItemInfo> RimFractureModel::calculateValueOptions( const caf
}
}
}
else if ( fieldNeedingOptions == &m_eclipseCase )
{
RimTools::eclipseCaseOptionItems( &options );
}
else if ( fieldNeedingOptions == &m_timeStep )
{
RimTools::timeStepsForCase( m_eclipseCase(), &options );
}
return options;
}
@@ -810,6 +832,7 @@ void RimFractureModel::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderin
uiOrdering.add( &m_fractureModelTemplate, {true, 2, 1} );
uiOrdering.add( &m_editFractureModelTemplate, {false, 1, 0} );
uiOrdering.add( &m_eclipseCase );
uiOrdering.add( &m_timeStep );
uiOrdering.add( &m_MD );
uiOrdering.add( &m_extractionType );
@@ -1342,6 +1365,14 @@ int RimFractureModel::timeStep() const
return m_timeStep;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFractureModel::setTimeStep( int timeStep )
{
m_timeStep = timeStep;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -1369,25 +1400,29 @@ double RimFractureModel::referenceTemperatureDepth() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseCase* RimFractureModel::getEclipseCase()
RimEclipseCase* RimFractureModel::eclipseCase() const
{
// Find an eclipse case
RimProject* proj = RimProject::current();
if ( proj->eclipseCases().empty() ) return nullptr;
return proj->eclipseCases()[0];
return m_eclipseCase;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RigEclipseCaseData* RimFractureModel::getEclipseCaseData()
void RimFractureModel::setEclipseCase( RimEclipseCase* eclipseCase )
{
m_eclipseCase = eclipseCase;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RigEclipseCaseData* RimFractureModel::getEclipseCaseData() const
{
// Find an eclipse case
RimEclipseCase* eclipseCase = getEclipseCase();
if ( !eclipseCase ) return nullptr;
RimEclipseCase* eclCase = eclipseCase();
if ( !eclCase ) return nullptr;
return eclipseCase->eclipseCaseData();
return eclCase->eclipseCaseData();
}
//--------------------------------------------------------------------------------------------------
@@ -1543,17 +1578,6 @@ std::shared_ptr<RimFractureModelCalculator> RimFractureModel::calculator() const
return m_calculator;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseCase* RimFractureModel::eclipseCase() const
{
RimProject* proj = RimProject::current();
if ( proj->eclipseCases().empty() ) return nullptr;
return proj->eclipseCases()[0];
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -83,7 +83,11 @@ public:
void setMD( double md );
int timeStep() const;
int timeStep() const;
void setTimeStep( int timeStep );
RimEclipseCase* eclipseCase() const;
void setEclipseCase( RimEclipseCase* eclipseCase );
cvf::Vec3d anchorPosition() const;
cvf::Vec3d thicknessDirection() const;
@@ -163,7 +167,6 @@ public:
RimFractureModel::MissingValueStrategy missingValueStrategy( RiaDefines::CurveProperty curveProperty ) const;
RimFractureModel::BurdenStrategy burdenStrategy( RiaDefines::CurveProperty curveProperty ) const;
RimEclipseCase* eclipseCase() const;
RiaDefines::ResultCatType eclipseResultCategory( RiaDefines::CurveProperty curveProperty ) const;
QString eclipseResultVariable( RiaDefines::CurveProperty curveProperty ) const;
@@ -191,8 +194,7 @@ private:
static QString vecToString( const cvf::Vec3d& vec );
void updateThicknessDirectionWellPathName();
static RigEclipseCaseData* getEclipseCaseData();
static RimEclipseCase* getEclipseCase();
RigEclipseCaseData* getEclipseCaseData() const;
void updateBarrierProperties();
void addBarrierAnnotation( const cvf::Vec3d& startPosition, const cvf::Vec3d& endPosition, const QString& barrierText );
@@ -218,6 +220,7 @@ private:
protected:
caf::PdmField<double> m_MD;
caf::PdmPtrField<RimEclipseCase*> m_eclipseCase;
caf::PdmField<int> m_timeStep;
caf::PdmField<caf::AppEnum<ExtractionType>> m_extractionType;
caf::PdmField<cvf::Vec3d> m_anchorPosition;

View File

@@ -118,6 +118,8 @@ void RimFractureModelCalculator::calculateLayers( std::vector<std::pair<double,
depths,
rkbDiff );
if ( layerValues.size() != depths.size() ) return;
size_t startIndex = 0;
for ( size_t i = 0; i < depths.size(); i++ )
{

View File

@@ -21,6 +21,7 @@
#include "FractureCommands/RicNewFractureModelFeature.h"
#include "RimEclipseCase.h"
#include "RimFractureModel.h"
#include "RimFractureModelCollection.h"
#include "RimFractureModelTemplate.h"
@@ -41,6 +42,8 @@ RimcFractureModelCollection_newFractureModel::RimcFractureModelCollection_newFra
: caf::PdmObjectMethod( self )
{
CAF_PDM_InitObject( "Create Fracture Model", "", "", "Create a new Fracture Model" );
CAF_PDM_InitScriptableFieldNoDefault( &m_eclipseCase, "EclipseCase", "", "", "", "Eclipse Case" );
CAF_PDM_InitScriptableFieldNoDefault( &m_timeStep, "TimeStep", "", "", "", "Time Step" );
CAF_PDM_InitScriptableFieldNoDefault( &m_wellPath, "WellPath", "", "", "", "Well Path" );
CAF_PDM_InitScriptableFieldNoDefault( &m_md, "MeasuredDepth", "", "", "", "Measured Depth" );
CAF_PDM_InitScriptableFieldNoDefault( &m_fractureModelTemplate, "FractureModelTemplate", "", "", "", "Fracture Model Template" );
@@ -53,12 +56,13 @@ caf::PdmObjectHandle* RimcFractureModelCollection_newFractureModel::execute()
{
RimFractureModel* newFractureModel = nullptr;
RimFractureModelCollection* fractureModelCollection = self<RimFractureModelCollection>();
if ( m_wellPath )
if ( m_wellPath && m_eclipseCase )
{
RimWellPathCollection* wellPathCollection = nullptr;
fractureModelCollection->firstAncestorOrThisOfTypeAsserted( wellPathCollection );
newFractureModel = RicNewFractureModelFeature::addFractureModel( m_wellPath, wellPathCollection );
newFractureModel =
RicNewFractureModelFeature::addFractureModel( m_wellPath, wellPathCollection, m_eclipseCase, m_timeStep );
}
if ( newFractureModel )

View File

@@ -31,6 +31,7 @@
class RimFractureModelCollection;
class RimFractureModelTemplate;
class RimWellPath;
class RimEclipseCase;
//==================================================================================================
///
@@ -47,7 +48,9 @@ public:
std::unique_ptr<PdmObjectHandle> defaultResult() const override;
private:
caf::PdmPtrField<RimWellPath*> m_wellPath;
caf::PdmField<double> m_md;
caf::PdmPtrField<RimEclipseCase*> m_eclipseCase;
caf::PdmField<int> m_timeStep;
caf::PdmPtrField<RimWellPath*> m_wellPath;
caf::PdmField<double> m_md;
caf::PdmPtrField<RimFractureModelTemplate*> m_fractureModelTemplate;
};

View File

@@ -39,9 +39,7 @@ RimcFractureModelPlotCollection_newFractureModelPlot::RimcFractureModelPlotColle
: caf::PdmObjectMethod( self )
{
CAF_PDM_InitObject( "Create Fracture Model", "", "", "Create a new Fracture Model" );
CAF_PDM_InitScriptableFieldNoDefault( &m_eclipseCase, "EclipseCase", "", "", "", "Eclipse Case" );
CAF_PDM_InitScriptableFieldNoDefault( &m_fractureModel, "FractureModel", "", "", "", "Fracture Model" );
CAF_PDM_InitScriptableFieldNoDefault( &m_timeStep, "TimeStep", "", "", "", "Time Step" );
}
//--------------------------------------------------------------------------------------------------
@@ -52,9 +50,9 @@ caf::PdmObjectHandle* RimcFractureModelPlotCollection_newFractureModelPlot::exec
RimFractureModelPlot* newFractureModelPlot = nullptr;
RimFractureModelPlotCollection* fractureModelPlotCollection = self<RimFractureModelPlotCollection>();
if ( m_eclipseCase && m_fractureModel && fractureModelPlotCollection )
if ( m_fractureModel && fractureModelPlotCollection )
{
newFractureModelPlot = RicNewFractureModelPlotFeature::createPlot( m_eclipseCase, m_fractureModel, m_timeStep );
newFractureModelPlot = RicNewFractureModelPlotFeature::createPlot( m_fractureModel );
}
return newFractureModelPlot;

View File

@@ -26,10 +26,7 @@
#include "cafPdmPtrArrayField.h"
#include "cafPdmPtrField.h"
class RimFractureModelPlotCollection;
class RimWellPath;
class RimFractureModel;
class RimEclipseCase;
//==================================================================================================
///
@@ -46,7 +43,5 @@ public:
std::unique_ptr<PdmObjectHandle> defaultResult() const override;
private:
caf::PdmPtrField<RimEclipseCase*> m_eclipseCase;
caf::PdmPtrField<RimFractureModel*> m_fractureModel;
caf::PdmField<int> m_timeStep;
};