mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#7556 Ensemble Fracture Statistics: report formation dip statistics.
This commit is contained in:
parent
d6b8db47b8
commit
329b8e114f
@ -117,6 +117,12 @@ RimEnsembleFractureStatistics::RimEnsembleFractureStatistics()
|
||||
m_filePathsTable.uiCapability()->setUiReadOnly( true );
|
||||
m_filePathsTable.xmlCapability()->disableIO();
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_formationDipStatistics, "FormationDipStatistics", "Formation Dip Statistics", "", "", "" );
|
||||
m_formationDipStatistics.uiCapability()->setUiEditorTypeName( caf::PdmUiTextEditor::uiEditorTypeName() );
|
||||
m_formationDipStatistics.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
|
||||
m_formationDipStatistics.uiCapability()->setUiReadOnly( true );
|
||||
m_formationDipStatistics.xmlCapability()->disableIO();
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_meshAlignmentType, "MeshAlignmentType", "Mesh Alignment", "", "", "" );
|
||||
CAF_PDM_InitFieldNoDefault( &m_meshType, "MeshType", "Mesh Type", "", "", "" );
|
||||
|
||||
@ -222,6 +228,15 @@ void RimEnsembleFractureStatistics::defineEditorAttribute( const caf::PdmFieldHa
|
||||
attrib->singleSelectionMode = false;
|
||||
}
|
||||
}
|
||||
else if ( field == &m_formationDipStatistics )
|
||||
{
|
||||
auto myAttr = dynamic_cast<caf::PdmUiTextEditorAttribute*>( attribute );
|
||||
if ( myAttr )
|
||||
{
|
||||
myAttr->wrapMode = caf::PdmUiTextEditorAttribute::NoWrap;
|
||||
myAttr->textMode = caf::PdmUiTextEditorAttribute::HTML;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -246,6 +261,7 @@ void RimEnsembleFractureStatistics::defineUiOrdering( QString uiConfigName, caf:
|
||||
{
|
||||
uiOrdering.add( nameField() );
|
||||
uiOrdering.add( &m_filePathsTable );
|
||||
uiOrdering.add( &m_formationDipStatistics );
|
||||
uiOrdering.add( &m_meshAlignmentType );
|
||||
uiOrdering.add( &m_meshType );
|
||||
uiOrdering.add( &m_numSamplesX );
|
||||
@ -275,6 +291,13 @@ void RimEnsembleFractureStatistics::defineUiOrdering( QString uiConfigName, caf:
|
||||
void RimEnsembleFractureStatistics::loadAndUpdateData()
|
||||
{
|
||||
m_filePathsTable = generateFilePathsTable();
|
||||
|
||||
auto unitSystem = RiaDefines::EclipseUnitSystem::UNITS_METRIC;
|
||||
|
||||
std::vector<cvf::ref<RigStimPlanFractureDefinition>> stimPlanFractureDefinitions =
|
||||
readFractureDefinitions( m_filePaths.v(), unitSystem );
|
||||
|
||||
m_formationDipStatistics = generateFormationDipStatisticsString( stimPlanFractureDefinitions );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -1069,3 +1092,42 @@ void RimEnsembleFractureStatistics::generateStatisticsGrids(
|
||||
if ( calculateP90 )
|
||||
clearCells( statisticsGrids[RimEnsembleFractureStatistics::StatisticsType::P90], occurrenceGrid, numGrids, 0.9 );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RimEnsembleFractureStatistics::generateFormationDipStatisticsString(
|
||||
const std::vector<cvf::ref<RigStimPlanFractureDefinition>> stimPlanFractureDefinitions )
|
||||
{
|
||||
std::vector<double> formationDips;
|
||||
for ( auto def : stimPlanFractureDefinitions )
|
||||
{
|
||||
formationDips.push_back( def->formationDip() );
|
||||
}
|
||||
|
||||
double min;
|
||||
double max;
|
||||
double sum;
|
||||
double range;
|
||||
double mean;
|
||||
double dev;
|
||||
RigStatisticsMath::calculateBasicStatistics( formationDips, &min, &max, &sum, &range, &mean, &dev );
|
||||
|
||||
double p10;
|
||||
double p50;
|
||||
double p90;
|
||||
RigStatisticsMath::calculateStatisticsCurves( formationDips, &p10, &p50, &p90, &mean );
|
||||
|
||||
auto appendTextIfValidValue = []( QString& body, const QString& title, double value ) {
|
||||
if ( !std::isinf( value ) ) body += QString( "%1: %2<br>" ).arg( title ).arg( value );
|
||||
};
|
||||
|
||||
QString text = "Formation Dip:<br>";
|
||||
appendTextIfValidValue( text, "Mean", mean );
|
||||
appendTextIfValidValue( text, "Minimum", min );
|
||||
appendTextIfValidValue( text, "Maximum", max );
|
||||
appendTextIfValidValue( text, "P10", p10 );
|
||||
appendTextIfValidValue( text, "P50", p50 );
|
||||
appendTextIfValidValue( text, "P90", p90 );
|
||||
return text;
|
||||
}
|
||||
|
@ -187,8 +187,12 @@ protected:
|
||||
|
||||
static double linearSampling( double minValue, double maxValue, int numSamples, std::vector<double>& samples );
|
||||
|
||||
static QString generateFormationDipStatisticsString(
|
||||
const std::vector<cvf::ref<RigStimPlanFractureDefinition>> stimPlanFractureDefinitions );
|
||||
|
||||
caf::PdmField<std::vector<caf::FilePath>> m_filePaths;
|
||||
caf::PdmField<QString> m_filePathsTable;
|
||||
caf::PdmField<QString> m_formationDipStatistics;
|
||||
caf::PdmField<bool> m_computeStatistics;
|
||||
caf::PdmField<int> m_numSamplesX;
|
||||
caf::PdmField<int> m_numSamplesY;
|
||||
|
Loading…
Reference in New Issue
Block a user