#8121 Fracture: provide statistics per fracture

This commit is contained in:
Kristian Bendiksen
2021-10-08 08:36:01 +02:00
parent daac5b03e9
commit 36eda01be8
4 changed files with 39 additions and 10 deletions
@@ -1212,15 +1212,8 @@ void RimEnsembleFractureStatistics::generateStatisticsGrids(
QString RimEnsembleFractureStatistics::generateStatisticsTable( QString RimEnsembleFractureStatistics::generateStatisticsTable(
const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& stimPlanFractureDefinitions ) const const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& stimPlanFractureDefinitions ) const
{ {
std::vector<RigEnsembleFractureStatisticsCalculator::PropertyType> propertyTypes = { std::vector<RigEnsembleFractureStatisticsCalculator::PropertyType> propertyTypes =
RigEnsembleFractureStatisticsCalculator::PropertyType::HEIGHT, RigEnsembleFractureStatisticsCalculator::propertyTypes();
RigEnsembleFractureStatisticsCalculator::PropertyType::XF,
RigEnsembleFractureStatisticsCalculator::PropertyType::AREA,
RigEnsembleFractureStatisticsCalculator::PropertyType::PERMEABILITY,
RigEnsembleFractureStatisticsCalculator::PropertyType::WIDTH,
RigEnsembleFractureStatisticsCalculator::PropertyType::KFWF,
RigEnsembleFractureStatisticsCalculator::PropertyType::FORMATION_DIP,
};
QString text; QString text;
text += "<table border=1><thead><tr bgcolor=lightblue>"; text += "<table border=1><thead><tr bgcolor=lightblue>";
@@ -28,6 +28,7 @@
#include "RifStimPlanXmlReader.h" #include "RifStimPlanXmlReader.h"
#include "RigEnsembleFractureStatisticsCalculator.h"
#include "RigFractureGrid.h" #include "RigFractureGrid.h"
#include "RigStimPlanFractureDefinition.h" #include "RigStimPlanFractureDefinition.h"
#include "RigTransmissibilityEquations.h" #include "RigTransmissibilityEquations.h"
@@ -329,6 +330,8 @@ void RimStimPlanFractureTemplate::loadDataAndUpdate()
RimEclipseView* activeView = dynamic_cast<RimEclipseView*>( RiaApplication::instance()->activeReservoirView() ); RimEclipseView* activeView = dynamic_cast<RimEclipseView*>( RiaApplication::instance()->activeReservoirView() );
if ( activeView ) activeView->fractureColors()->loadDataAndUpdate(); if ( activeView ) activeView->fractureColors()->loadDataAndUpdate();
m_propertiesTable = generatePropertiesTable();
updateConnectedEditors(); updateConnectedEditors();
} }
@@ -1189,11 +1192,25 @@ QString RimStimPlanFractureTemplate::generatePropertiesTable() const
if ( !m_stimPlanFractureDefinitionData.isNull() ) if ( !m_stimPlanFractureDefinitionData.isNull() )
{ {
appendTextIfValidValue( body, "Formation Dip", m_stimPlanFractureDefinitionData->formationDip() );
appendTextIfValidValue( body, "Top MD", m_stimPlanFractureDefinitionData->topPerfMd() ); appendTextIfValidValue( body, "Top MD", m_stimPlanFractureDefinitionData->topPerfMd() );
appendTextIfValidValue( body, "Bottom MD", m_stimPlanFractureDefinitionData->bottomPerfMd() ); appendTextIfValidValue( body, "Bottom MD", m_stimPlanFractureDefinitionData->bottomPerfMd() );
appendTextIfValidValue( body, "Top TVD", m_stimPlanFractureDefinitionData->topPerfTvd() ); appendTextIfValidValue( body, "Top TVD", m_stimPlanFractureDefinitionData->topPerfTvd() );
appendTextIfValidValue( body, "Bottom TVD", m_stimPlanFractureDefinitionData->bottomPerfTvd() ); appendTextIfValidValue( body, "Bottom TVD", m_stimPlanFractureDefinitionData->bottomPerfTvd() );
std::vector<cvf::ref<RigStimPlanFractureDefinition>> fractureDefinitions = { m_stimPlanFractureDefinitionData };
std::vector<RigEnsembleFractureStatisticsCalculator::PropertyType> propertyTypes =
RigEnsembleFractureStatisticsCalculator::propertyTypes();
for ( auto propertyType : propertyTypes )
{
std::vector<double> values =
RigEnsembleFractureStatisticsCalculator::calculateProperty( fractureDefinitions, propertyType );
if ( !values.empty() )
{
QString name = caf::AppEnum<RigEnsembleFractureStatisticsCalculator::PropertyType>::uiText( propertyType );
appendTextIfValidValue( body, name, values[0] );
}
}
} }
return body; return body;
@@ -424,3 +424,20 @@ std::vector<cvf::ref<RigStimPlanFractureDefinition>> RigEnsembleFractureStatisti
return filteredFractureDefinitions; return filteredFractureDefinitions;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RigEnsembleFractureStatisticsCalculator::PropertyType> RigEnsembleFractureStatisticsCalculator::propertyTypes()
{
std::vector<RigEnsembleFractureStatisticsCalculator::PropertyType> types = {
RigEnsembleFractureStatisticsCalculator::PropertyType::HEIGHT,
RigEnsembleFractureStatisticsCalculator::PropertyType::XF,
RigEnsembleFractureStatisticsCalculator::PropertyType::AREA,
RigEnsembleFractureStatisticsCalculator::PropertyType::PERMEABILITY,
RigEnsembleFractureStatisticsCalculator::PropertyType::WIDTH,
RigEnsembleFractureStatisticsCalculator::PropertyType::KFWF,
RigEnsembleFractureStatisticsCalculator::PropertyType::FORMATION_DIP,
};
return types;
}
@@ -64,6 +64,8 @@ public:
calculateProperty( const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& fractureDefinitions, calculateProperty( const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& fractureDefinitions,
PropertyType propertyType ); PropertyType propertyType );
static std::vector<RigEnsembleFractureStatisticsCalculator::PropertyType> propertyTypes();
private: private:
static std::vector<double> static std::vector<double>
calculateGridStatistics( const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& fractureDefinitions, calculateGridStatistics( const std::vector<cvf::ref<RigStimPlanFractureDefinition>>& fractureDefinitions,