diff --git a/ApplicationCode/ProjectDataModel/Rim3dOverlayInfoConfig.cpp b/ApplicationCode/ProjectDataModel/Rim3dOverlayInfoConfig.cpp
index cd99f7713b..5b27e78160 100644
--- a/ApplicationCode/ProjectDataModel/Rim3dOverlayInfoConfig.cpp
+++ b/ApplicationCode/ProjectDataModel/Rim3dOverlayInfoConfig.cpp
@@ -99,7 +99,7 @@ void Rim3dOverlayInfoConfig::update3DInfo()
QString infoText = QString(
"
-- %1 -- "
- "Cell count: Total: %2 Active: %3
"
+ "Cell count. Total: %2 Active: %3
"
"Main Grid I,J,K: %4, %5, %6
").arg(caseName, totCellCount, activeCellCount, iSize, jSize, kSize);
if (m_reservoirView->animationMode() && m_reservoirView->cellResult()->hasResult())
@@ -108,11 +108,14 @@ void Rim3dOverlayInfoConfig::update3DInfo()
double min, max;
double p10, p90;
+ double mean;
size_t scalarIndex = m_reservoirView->cellResult()->gridScalarIndex();
m_reservoirView->gridCellResults()->minMaxCellScalarValues(scalarIndex, min, max);
m_reservoirView->gridCellResults()->p10p90CellScalarValues(scalarIndex, p10, p90);
+ m_reservoirView->gridCellResults()->meanCellScalarValues(scalarIndex, mean);
- infoText += QString("
Min: %1 P10: %2 P90: %3 Max: %4
").arg(min).arg(p10).arg(p90).arg(max);
+ infoText += QString("Min: %1 P10: %2 Mean: %3 P90: %4 Max: %5
").arg(min).arg(p10).arg(mean).arg(p90).arg(max);
+ //infoText += QString("Min: %1 P10: %2 Mean: %3 \n P90: %4 Max: %5
").arg(min).arg(p10).arg(mean).arg(p90).arg(max);
}
@@ -142,13 +145,16 @@ void Rim3dOverlayInfoConfig::update3DInfo()
{
double min, max;
double p10, p90;
+ double mean;
+
size_t scalarIndex = m_reservoirView->cellResult()->gridScalarIndex();
m_reservoirView->gridCellResults()->minMaxCellScalarValues(scalarIndex, min, max);
m_reservoirView->gridCellResults()->p10p90CellScalarValues(scalarIndex, p10, p90);
+ m_reservoirView->gridCellResults()->meanCellScalarValues(scalarIndex, mean);
m_reservoirView->viewer()->showHistogram(true);
m_reservoirView->viewer()->setHistogram(min, max, m_reservoirView->gridCellResults()->cellScalarValuesHistogram(scalarIndex));
- m_reservoirView->viewer()->setHistogramPercentiles(p10, p90);
+ m_reservoirView->viewer()->setHistogramPercentiles(p10, p90, mean);
}
}
}
diff --git a/ApplicationCode/ReservoirDataModel/RigReservoirCellResults.cpp b/ApplicationCode/ReservoirDataModel/RigReservoirCellResults.cpp
index c82a69e5b4..c3bb40f89d 100644
--- a/ApplicationCode/ReservoirDataModel/RigReservoirCellResults.cpp
+++ b/ApplicationCode/ReservoirDataModel/RigReservoirCellResults.cpp
@@ -172,6 +172,42 @@ void RigReservoirCellResults::p10p90CellScalarValues(size_t scalarResultIndex, d
p90 = m_p10p90[scalarResultIndex].second;
}
+//--------------------------------------------------------------------------------------------------
+///
+//--------------------------------------------------------------------------------------------------
+void RigReservoirCellResults::meanCellScalarValues(size_t scalarResultIndex, double& meanValue)
+{
+ CVF_ASSERT(scalarResultIndex < resultCount());
+
+ // Extend array and cache vars
+
+ if (scalarResultIndex >= m_meanValues.size() )
+ {
+ m_meanValues.resize(scalarResultIndex+1, HUGE_VAL);
+ }
+
+ if (m_meanValues[scalarResultIndex] != HUGE_VAL)
+ {
+ meanValue = m_meanValues[scalarResultIndex];
+ return;
+ }
+
+ double valueSum = 0.0;
+ size_t count = 0;
+ for (size_t tIdx = 0; tIdx < timeStepCount(scalarResultIndex); tIdx++)
+ {
+ std::vector& values = m_cellScalarResults[scalarResultIndex][tIdx];
+ for (size_t cIdx = 0; cIdx < values.size(); ++cIdx)
+ {
+ valueSum += values[cIdx];
+ }
+ count += values.size();
+ }
+
+ m_meanValues[scalarResultIndex] = valueSum/count;
+ meanValue = m_meanValues[scalarResultIndex];
+}
+
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
diff --git a/ApplicationCode/ReservoirDataModel/RigReservoirCellResults.h b/ApplicationCode/ReservoirDataModel/RigReservoirCellResults.h
index 5101f4f417..38e7076d08 100644
--- a/ApplicationCode/ReservoirDataModel/RigReservoirCellResults.h
+++ b/ApplicationCode/ReservoirDataModel/RigReservoirCellResults.h
@@ -42,6 +42,7 @@ public:
void minMaxCellScalarValues(size_t scalarResultIndex, size_t timeStepIndex, double& min, double& max);
const std::vector& cellScalarValuesHistogram(size_t scalarResultIndex);
void p10p90CellScalarValues(size_t scalarResultIndex, double& p10, double& p90);
+ void meanCellScalarValues(size_t scalarResultIndex, double& meanValue);
// Access meta-information about the results
size_t resultCount() const;
@@ -76,6 +77,7 @@ private:
std::vector< std::pair > m_maxMinValues; ///< Max min values for each Result index
std::vector< std::vector > m_histograms; ///< Histogram for each Result Index
std::vector< std::pair > m_p10p90; ///< P10 and p90 values for each Result Index
+ std::vector< double > m_meanValues; ///< Mean value for each Result Index
std::vector< std::vector< std::pair > > m_maxMinValuesPrTs; ///< Max min values for each timestep and Result index
diff --git a/ApplicationCode/UserInterface/RIViewer.cpp b/ApplicationCode/UserInterface/RIViewer.cpp
index b24054efd0..7a69ce87a1 100644
--- a/ApplicationCode/UserInterface/RIViewer.cpp
+++ b/ApplicationCode/UserInterface/RIViewer.cpp
@@ -481,9 +481,10 @@ void RIViewer::setHistogram(double min, double max, const std::vector& h
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
-void RIViewer::setHistogramPercentiles(double pmin, double pmax)
+void RIViewer::setHistogramPercentiles(double pmin, double pmax, double mean)
{
m_histogramWidget->setPercentiles(pmin, pmax);
+ m_histogramWidget->setMean(mean);
}
//--------------------------------------------------------------------------------------------------
diff --git a/ApplicationCode/UserInterface/RIViewer.h b/ApplicationCode/UserInterface/RIViewer.h
index f3551332c1..6b11bbe430 100644
--- a/ApplicationCode/UserInterface/RIViewer.h
+++ b/ApplicationCode/UserInterface/RIViewer.h
@@ -60,7 +60,7 @@ public:
void setInfoText(QString text);
void showHistogram(bool enable);
void setHistogram(double min, double max, const std::vector& histogram);
- void setHistogramPercentiles(double pmin, double pmax);
+ void setHistogramPercentiles(double pmin, double pmax, double mean);
void showAnimationProgress(bool enable);
diff --git a/ApplicationCode/UserInterface/RiuSimpleHistogramWidget.cpp b/ApplicationCode/UserInterface/RiuSimpleHistogramWidget.cpp
index 2495f94ab4..f5384166de 100644
--- a/ApplicationCode/UserInterface/RiuSimpleHistogramWidget.cpp
+++ b/ApplicationCode/UserInterface/RiuSimpleHistogramWidget.cpp
@@ -10,6 +10,8 @@ QWidget(parent, f)
{
m_minPercentile = HUGE_VAL;
m_maxPercentile = HUGE_VAL;
+ m_mean = HUGE_VAL;
+
}
//--------------------------------------------------------------------------------------------------
@@ -78,6 +80,14 @@ void RiuSimpleHistogramWidget::draw(QPainter *painter,int x, int y, int width, i
painter->setPen(QColor(255, 0, 0, 200));
painter->drawLine(xpos, y+1, xpos, y + height -1);
}
+
+ // Vertical lines for percentiles
+ if (m_mean != HUGE_VAL)
+ {
+ int xpos = xPosFromDomainValue(m_mean);
+ painter->setPen(QColor(0, 0, 255, 200));
+ painter->drawLine(xpos, y+1, xpos, y + height -1);
+ }
}
//--------------------------------------------------------------------------------------------------
diff --git a/ApplicationCode/UserInterface/RiuSimpleHistogramWidget.h b/ApplicationCode/UserInterface/RiuSimpleHistogramWidget.h
index d3b0e1b24b..5ced51fa8e 100644
--- a/ApplicationCode/UserInterface/RiuSimpleHistogramWidget.h
+++ b/ApplicationCode/UserInterface/RiuSimpleHistogramWidget.h
@@ -11,6 +11,7 @@ public:
void setHistogramData(double min, double max, const std::vector& histogram);
void setPercentiles(double pmin, double pmax) {m_minPercentile = pmin; m_maxPercentile = pmax;}
+ void setMean(double mean) {m_mean = mean;}
protected:
virtual void paintEvent(QPaintEvent* event);
@@ -28,6 +29,7 @@ private:
double m_min;
double m_minPercentile;
double m_maxPercentile;
+ double m_mean;
size_t m_maxHistogramCount;
double m_width;