//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- Rim3dOverlayInfoConfig::HistogramData Rim3dOverlayInfoConfig::histogramData(RimEclipseView* eclipseView) { HistogramData histData; if (eclipseView) { bool isResultsInfoRelevant = eclipseView->hasUserRequestedAnimation() && eclipseView->cellResult()->hasResult(); if (isResultsInfoRelevant) { size_t scalarIndex = eclipseView->cellResult()->scalarResultIndex(); if (scalarIndex != cvf::UNDEFINED_SIZE_T) { if (m_statisticsCellRange == ALL_CELLS) { if (m_statisticsTimeRange == ALL_TIMESTEPS) { eclipseView->currentGridCellResults()->minMaxCellScalarValues(scalarIndex, histData.min, histData.max); eclipseView->currentGridCellResults()->p10p90CellScalarValues(scalarIndex, histData.p10, histData.p90); eclipseView->currentGridCellResults()->meanCellScalarValues(scalarIndex, histData.mean); eclipseView->currentGridCellResults()->sumCellScalarValues(scalarIndex, histData.sum); eclipseView->currentGridCellResults()->mobileVolumeWeightedMean(scalarIndex, histData.weightedMean); histData.histogram = &(eclipseView->currentGridCellResults()->cellScalarValuesHistogram(scalarIndex)); } else if (m_statisticsTimeRange == CURRENT_TIMESTEP) { int currentTimeStep = eclipseView->currentTimeStep(); if (eclipseView->cellResult()->hasStaticResult()) { currentTimeStep = 0; } eclipseView->currentGridCellResults()->minMaxCellScalarValues(scalarIndex, currentTimeStep, histData.min, histData.max); eclipseView->currentGridCellResults()->p10p90CellScalarValues(scalarIndex, currentTimeStep, histData.p10, histData.p90); eclipseView->currentGridCellResults()->meanCellScalarValues(scalarIndex, currentTimeStep, histData.mean); eclipseView->currentGridCellResults()->sumCellScalarValues(scalarIndex, currentTimeStep, histData.sum); eclipseView->currentGridCellResults()->mobileVolumeWeightedMean(scalarIndex, currentTimeStep, histData.weightedMean); histData.histogram = &(eclipseView->currentGridCellResults()->cellScalarValuesHistogram(scalarIndex, currentTimeStep)); } else { CVF_ASSERT(false); } } else if (m_statisticsCellRange == VISIBLE_CELLS) { updateVisCellStatsIfNeeded(); if (m_statisticsTimeRange == ALL_TIMESTEPS) { // TODO: Only valid if we have no dynamic property filter m_visibleCellStatistics->meanCellScalarValues(histData.mean); m_visibleCellStatistics->minMaxCellScalarValues(histData.min, histData.max); m_visibleCellStatistics->p10p90CellScalarValues(histData.p10, histData.p90); m_visibleCellStatistics->sumCellScalarValues(histData.sum); m_visibleCellStatistics->mobileVolumeWeightedMean(histData.weightedMean); histData.histogram = &(m_visibleCellStatistics->cellScalarValuesHistogram()); } else if (m_statisticsTimeRange == CURRENT_TIMESTEP) { int currentTimeStep = eclipseView->currentTimeStep(); if (eclipseView->cellResult()->hasStaticResult()) { currentTimeStep = 0; } m_visibleCellStatistics->meanCellScalarValues(currentTimeStep, histData.mean); m_visibleCellStatistics->minMaxCellScalarValues(currentTimeStep, histData.min, histData.max); m_visibleCellStatistics->p10p90CellScalarValues(currentTimeStep, histData.p10, histData.p90); m_visibleCellStatistics->sumCellScalarValues(currentTimeStep, histData.sum); m_visibleCellStatistics->mobileVolumeWeightedMean(currentTimeStep, histData.weightedMean); histData.histogram = &(m_visibleCellStatistics->cellScalarValuesHistogram(currentTimeStep)); } } } else if (eclipseView->cellResult()->isFlowDiagOrInjectionFlooding()) { if (m_statisticsTimeRange == CURRENT_TIMESTEP || m_statisticsTimeRange == ALL_TIMESTEPS) // All timesteps is ignored { int currentTimeStep = eclipseView->currentTimeStep(); if (m_statisticsCellRange == ALL_CELLS) { RigFlowDiagResults* fldResults = eclipseView->cellResult()->flowDiagSolution()->flowDiagResults(); RigFlowDiagResultAddress resAddr = eclipseView->cellResult()->flowDiagResAddress(); fldResults->minMaxScalarValues(resAddr, currentTimeStep, &histData.min, &histData.max); fldResults->p10p90ScalarValues(resAddr, currentTimeStep, &histData.p10, &histData.p90); fldResults->meanScalarValue(resAddr, currentTimeStep, &histData.mean); fldResults->sumScalarValue(resAddr, currentTimeStep, &histData.sum); fldResults->mobileVolumeWeightedMean(resAddr, currentTimeStep, &histData.weightedMean); histData.histogram = &(fldResults->scalarValuesHistogram(resAddr, currentTimeStep)); } else if (m_statisticsCellRange == VISIBLE_CELLS) { updateVisCellStatsIfNeeded(); m_visibleCellStatistics->meanCellScalarValues(currentTimeStep, histData.mean); m_visibleCellStatistics->minMaxCellScalarValues(currentTimeStep, histData.min, histData.max); m_visibleCellStatistics->p10p90CellScalarValues(currentTimeStep, histData.p10, histData.p90); m_visibleCellStatistics->sumCellScalarValues(currentTimeStep, histData.sum); m_visibleCellStatistics->mobileVolumeWeightedMean(currentTimeStep, histData.weightedMean); histData.histogram = &(m_visibleCellStatistics->cellScalarValuesHistogram(currentTimeStep)); } } } } } return histData; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void Rim3dOverlayInfoConfig::updateEclipse3DInfo(RimEclipseView * eclipseView) { double min = HUGE_VAL, max = HUGE_VAL; double p10 = HUGE_VAL, p90 = HUGE_VAL; double mean = HUGE_VAL; double sum = 0.0; const std::vector<size_t>* histogram = NULL; bool isResultsInfoRelevant = eclipseView->hasUserRequestedAnimation() && eclipseView->cellResult()->hasResult(); if (showHistogram() || showResultInfo()) { if (isResultsInfoRelevant) { size_t scalarIndex = eclipseView->cellResult()->scalarResultIndex(); if (m_statisticsCellRange == ALL_CELLS) { if (m_statisticsTimeRange == ALL_TIMESTEPS) { eclipseView->currentGridCellResults()->cellResults()->minMaxCellScalarValues(scalarIndex, min, max); eclipseView->currentGridCellResults()->cellResults()->p10p90CellScalarValues(scalarIndex, p10, p90); eclipseView->currentGridCellResults()->cellResults()->meanCellScalarValues(scalarIndex, mean); eclipseView->currentGridCellResults()->cellResults()->sumCellScalarValues(scalarIndex, sum); histogram = &(eclipseView->currentGridCellResults()->cellResults()->cellScalarValuesHistogram(scalarIndex)); } else if (m_statisticsTimeRange == CURRENT_TIMESTEP ) { int timeStepIdx = eclipseView->currentTimeStep(); eclipseView->currentGridCellResults()->cellResults()->minMaxCellScalarValues(scalarIndex, timeStepIdx, min, max); eclipseView->currentGridCellResults()->cellResults()->p10p90CellScalarValues(scalarIndex, timeStepIdx, p10, p90); eclipseView->currentGridCellResults()->cellResults()->meanCellScalarValues(scalarIndex, timeStepIdx, mean); eclipseView->currentGridCellResults()->cellResults()->sumCellScalarValues(scalarIndex, timeStepIdx, sum); histogram = &(eclipseView->currentGridCellResults()->cellResults()->cellScalarValuesHistogram(scalarIndex, timeStepIdx)); } else { CVF_ASSERT(false); } } else if ( m_statisticsCellRange == VISIBLE_CELLS) { updateVisCellStatsIfNeeded(); if (m_statisticsTimeRange == ALL_TIMESTEPS) { // TODO: Only valid if we have no dynamic property filter m_visibleCellStatistics->meanCellScalarValues(mean); m_visibleCellStatistics->minMaxCellScalarValues(min, max); m_visibleCellStatistics->p10p90CellScalarValues(p10, p90); m_visibleCellStatistics->sumCellScalarValues(sum); histogram = &(m_visibleCellStatistics->cellScalarValuesHistogram()); } else if (m_statisticsTimeRange == CURRENT_TIMESTEP) { int currentTimeStep = eclipseView->currentTimeStep(); m_visibleCellStatistics->meanCellScalarValues(currentTimeStep, mean); m_visibleCellStatistics->minMaxCellScalarValues(currentTimeStep, min, max); m_visibleCellStatistics->p10p90CellScalarValues(currentTimeStep, p10, p90); m_visibleCellStatistics->sumCellScalarValues(currentTimeStep, sum); histogram = &(m_visibleCellStatistics->cellScalarValuesHistogram(currentTimeStep)); } } } } QString infoText; if (showCaseInfo()) { QString caseName; QString totCellCount; QString activeCellCountText; QString fractureActiveCellCount; QString iSize, jSize, kSize; QString zScale; if (eclipseView->eclipseCase() && eclipseView->eclipseCase()->reservoirData() && eclipseView->eclipseCase()->reservoirData()->mainGrid()) { caseName = eclipseView->eclipseCase()->caseUserDescription(); totCellCount = QString::number(eclipseView->eclipseCase()->reservoirData()->mainGrid()->globalCellArray().size()); size_t mxActCellCount = eclipseView->eclipseCase()->reservoirData()->activeCellInfo(RifReaderInterface::MATRIX_RESULTS)->reservoirActiveCellCount(); size_t frActCellCount = eclipseView->eclipseCase()->reservoirData()->activeCellInfo(RifReaderInterface::FRACTURE_RESULTS)->reservoirActiveCellCount(); if (frActCellCount > 0) activeCellCountText += "Matrix : "; activeCellCountText += QString::number(mxActCellCount); if (frActCellCount > 0) activeCellCountText += " Fracture : " + QString::number(frActCellCount); iSize = QString::number(eclipseView->eclipseCase()->reservoirData()->mainGrid()->cellCountI()); jSize = QString::number(eclipseView->eclipseCase()->reservoirData()->mainGrid()->cellCountJ()); kSize = QString::number(eclipseView->eclipseCase()->reservoirData()->mainGrid()->cellCountK()); zScale = QString::number(eclipseView->scaleZ()); } infoText += QString( "<p><b><center>-- %1 --</center></b><p> " "<b>Cell count. Total:</b> %2 <b>Active:</b> %3 <br>" "<b>Main Grid I,J,K:</b> %4, %5, %6 <b>Z-Scale:</b> %7<br>").arg(caseName, totCellCount, activeCellCountText, iSize, jSize, kSize, zScale); } if (showResultInfo()) { if (eclipseView->cellResult()->isTernarySaturationSelected()) { QString propName = eclipseView->cellResult()->resultVariable(); infoText += QString("<b>Cell Property:</b> %1 ").arg(propName); } if (isResultsInfoRelevant) { QString propName = eclipseView->cellResult()->resultVariable(); infoText += QString("<b>Cell Property:</b> %1 ").arg(propName); infoText += QString("<br><b>Statistics:</b> ") + m_statisticsTimeRange().uiText() + " and " + m_statisticsCellRange().uiText(); infoText += QString("<table border=0 cellspacing=5 >" "<tr> <td>Min</td> <td>P10</td> <td>Mean</td> <td>P90</td> <td>Max</td> <td>Sum</td> </tr>" "<tr> <td>%1</td> <td> %2</td> <td> %3</td> <td> %4</td> <td> %5</td> <td> %6</td> </tr>" "</table>").arg(min).arg(p10).arg(mean).arg(p90).arg(max).arg(sum); if (eclipseView->faultResultSettings()->hasValidCustomResult()) { QString faultMapping; bool isShowingGrid = eclipseView->faultCollection()->isGridVisualizationMode(); if (!isShowingGrid) { if (eclipseView->faultCollection()->faultResult() == RimFaultCollection::FAULT_BACK_FACE_CULLING) { faultMapping = "Cells behind fault"; } else if (eclipseView->faultCollection()->faultResult() == RimFaultCollection::FAULT_FRONT_FACE_CULLING) { faultMapping = "Cells in front of fault"; } else { faultMapping = "Cells in front and behind fault"; } } else { faultMapping = "Cells in front and behind fault"; } infoText += QString("<b>Fault results: </b> %1<br>").arg(faultMapping); infoText += QString("<b>Fault Property:</b> %1 <br>").arg(eclipseView->faultResultSettings()->customFaultResult()->resultVariable()); } } if (eclipseView->hasUserRequestedAnimation() && eclipseView->cellEdgeResult()->hasResult()) { double min, max; QString cellEdgeName = eclipseView->cellEdgeResult()->resultVariable(); eclipseView->cellEdgeResult()->minMaxCellEdgeValues(min, max); infoText += QString("<b>Cell Edge Property:</b> %1 ").arg(cellEdgeName); infoText += QString("<table border=0 cellspacing=5 >" "<tr> <td>Min</td> <td></td> <td></td> <td></td> <td>Max</td> </tr>" "<tr> <td>%1</td> <td></td> <td></td> <td></td> <td> %2</td></tr>" "</table>").arg(min).arg(max); } } if (!infoText.isEmpty()) { eclipseView->viewer()->setInfoText(infoText); } if (showHistogram()) { if (isResultsInfoRelevant) { eclipseView->viewer()->showHistogram(true); eclipseView->viewer()->setHistogram(min, max, *histogram); eclipseView->viewer()->setHistogramPercentiles(p10, p90, mean); } } }