mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1052 3D info box: Added Flow Diag results statistics etc.
This commit is contained in:
parent
51e8cae11b
commit
5f6468898b
@ -45,6 +45,8 @@
|
|||||||
#include "RimView.h"
|
#include "RimView.h"
|
||||||
|
|
||||||
#include "RiuViewer.h"
|
#include "RiuViewer.h"
|
||||||
|
#include "RigFlowDiagResults.h"
|
||||||
|
#include "RigFlowDiagVisibleCellsStatCalc.h"
|
||||||
|
|
||||||
CAF_PDM_SOURCE_INIT(Rim3dOverlayInfoConfig, "View3dOverlayInfoConfig");
|
CAF_PDM_SOURCE_INIT(Rim3dOverlayInfoConfig, "View3dOverlayInfoConfig");
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -182,6 +184,31 @@ caf::PdmFieldHandle* Rim3dOverlayInfoConfig::objectToggleField()
|
|||||||
return &active;
|
return &active;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void Rim3dOverlayInfoConfig::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
|
||||||
|
{
|
||||||
|
caf::PdmUiGroup* visGroup = uiOrdering.addNewGroup("Visibility");
|
||||||
|
|
||||||
|
visGroup->add(&showAnimProgress);
|
||||||
|
visGroup->add(&showCaseInfo);
|
||||||
|
visGroup->add(&showResultInfo);
|
||||||
|
visGroup->add(&showHistogram);
|
||||||
|
|
||||||
|
caf::PdmUiGroup* statGroup = uiOrdering.addNewGroup("Statistics Options");
|
||||||
|
RimEclipseView * eclipseView = dynamic_cast<RimEclipseView*>(m_viewDef.p());
|
||||||
|
|
||||||
|
if ( !eclipseView || eclipseView->cellResult()->resultType() != RimDefines::FLOW_DIAGNOSTICS ) //
|
||||||
|
{
|
||||||
|
statGroup->add(&m_statisticsTimeRange);
|
||||||
|
}
|
||||||
|
statGroup->add(&m_statisticsCellRange);
|
||||||
|
|
||||||
|
uiOrdering.setForgetRemainingFields(true);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -260,6 +287,36 @@ void Rim3dOverlayInfoConfig::updateEclipse3DInfo(RimEclipseView * eclipseView)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (eclipseView->cellResult()->resultType() == RimDefines::FLOW_DIAGNOSTICS)
|
||||||
|
{
|
||||||
|
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, &min, &max);
|
||||||
|
fldResults->p10p90ScalarValues(resAddr, currentTimeStep, &p10, &p90);
|
||||||
|
fldResults->meanScalarValue(resAddr, currentTimeStep, &mean);
|
||||||
|
fldResults->sumScalarValue(resAddr, currentTimeStep, &sum);
|
||||||
|
histogram = &(fldResults->scalarValuesHistogram(resAddr, currentTimeStep));
|
||||||
|
}
|
||||||
|
else if (m_statisticsCellRange == VISIBLE_CELLS )
|
||||||
|
{
|
||||||
|
updateVisCellStatsIfNeeded();
|
||||||
|
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,8 +367,15 @@ void Rim3dOverlayInfoConfig::updateEclipse3DInfo(RimEclipseView * eclipseView)
|
|||||||
if (isResultsInfoRelevant)
|
if (isResultsInfoRelevant)
|
||||||
{
|
{
|
||||||
QString propName = eclipseView->cellResult()->resultVariable();
|
QString propName = eclipseView->cellResult()->resultVariable();
|
||||||
|
QString timeRangeText = m_statisticsTimeRange().uiText();
|
||||||
|
if ( eclipseView->cellResult()->resultType() == RimDefines::FLOW_DIAGNOSTICS )
|
||||||
|
{
|
||||||
|
timeRangeText = caf::AppEnum<StatisticsTimeRangeType>::uiText(CURRENT_TIMESTEP);
|
||||||
|
propName = QString::fromStdString( eclipseView->cellResult()->flowDiagResAddress().uiText());
|
||||||
|
}
|
||||||
|
|
||||||
infoText += QString("<b>Cell Property:</b> %1 ").arg(propName);
|
infoText += QString("<b>Cell Property:</b> %1 ").arg(propName);
|
||||||
infoText += QString("<br><b>Statistics:</b> ") + m_statisticsTimeRange().uiText() + " and " + m_statisticsCellRange().uiText();
|
infoText += QString("<br><b>Statistics:</b> ") + timeRangeText + " and " + m_statisticsCellRange().uiText();
|
||||||
infoText += QString("<table border=0 cellspacing=5 >"
|
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>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>"
|
"<tr> <td>%1</td> <td> %2</td> <td> %3</td> <td> %4</td> <td> %5</td> <td> %6</td> </tr>"
|
||||||
@ -550,10 +614,22 @@ void Rim3dOverlayInfoConfig::updateVisCellStatsIfNeeded()
|
|||||||
}
|
}
|
||||||
else if (eclipseView)
|
else if (eclipseView)
|
||||||
{
|
{
|
||||||
size_t scalarIndex = eclipseView->cellResult()->scalarResultIndex();
|
if ( eclipseView->cellResult()->resultType() == RimDefines::FLOW_DIAGNOSTICS )
|
||||||
calc = new RigEclipseNativeVisibleCellsStatCalc(eclipseView->currentGridCellResults()->cellResults(),
|
{
|
||||||
scalarIndex,
|
RigFlowDiagResultAddress resAddr = eclipseView->cellResult()->flowDiagResAddress();
|
||||||
|
RigFlowDiagResults* fldResults = eclipseView->cellResult()->flowDiagSolution()->flowDiagResults();
|
||||||
|
calc = new RigFlowDiagVisibleCellsStatCalc(fldResults,
|
||||||
|
resAddr,
|
||||||
eclipseView->currentTotalCellVisibility().p());
|
eclipseView->currentTotalCellVisibility().p());
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t scalarIndex = eclipseView->cellResult()->scalarResultIndex();
|
||||||
|
calc = new RigEclipseNativeVisibleCellsStatCalc(eclipseView->currentGridCellResults()->cellResults(),
|
||||||
|
scalarIndex,
|
||||||
|
eclipseView->currentTotalCellVisibility().p());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_visibleCellStatistics = new RigStatisticsDataCache(calc.p());
|
m_visibleCellStatistics = new RigStatisticsDataCache(calc.p());
|
||||||
|
@ -65,6 +65,9 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
||||||
virtual caf::PdmFieldHandle* objectToggleField();
|
virtual caf::PdmFieldHandle* objectToggleField();
|
||||||
|
|
||||||
|
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void updateEclipse3DInfo(RimEclipseView * reservoirView);
|
void updateEclipse3DInfo(RimEclipseView * reservoirView);
|
||||||
|
@ -66,6 +66,7 @@ ${CEE_CURRENT_LIST_DIR}RigCombTransResultAccessor.cpp
|
|||||||
${CEE_CURRENT_LIST_DIR}RigCombMultResultAccessor.cpp
|
${CEE_CURRENT_LIST_DIR}RigCombMultResultAccessor.cpp
|
||||||
${CEE_CURRENT_LIST_DIR}RigResultModifierFactory.cpp
|
${CEE_CURRENT_LIST_DIR}RigResultModifierFactory.cpp
|
||||||
${CEE_CURRENT_LIST_DIR}RigFormationNames.cpp
|
${CEE_CURRENT_LIST_DIR}RigFormationNames.cpp
|
||||||
|
${CEE_CURRENT_LIST_DIR}RigFlowDiagResultAddress.cpp
|
||||||
${CEE_CURRENT_LIST_DIR}RigFlowDiagResults.cpp
|
${CEE_CURRENT_LIST_DIR}RigFlowDiagResults.cpp
|
||||||
${CEE_CURRENT_LIST_DIR}RigFlowDiagResultFrames.cpp
|
${CEE_CURRENT_LIST_DIR}RigFlowDiagResultFrames.cpp
|
||||||
${CEE_CURRENT_LIST_DIR}RigFlowDiagSolverInterface.cpp
|
${CEE_CURRENT_LIST_DIR}RigFlowDiagSolverInterface.cpp
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright (C) 2017- Statoil ASA
|
||||||
|
//
|
||||||
|
// ResInsight is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
//
|
||||||
|
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
|
||||||
|
// for more details.
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "RigFlowDiagResultAddress.h"
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
bool RigFlowDiagResultAddress::isNativeResult() const
|
||||||
|
{
|
||||||
|
return (((variableName == RIG_FLD_TOF_RESNAME) || (variableName == RIG_FLD_CELL_FRACTION_RESNAME)) && selectedTracerNames.size() <= 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::string RigFlowDiagResultAddress::uiText()
|
||||||
|
{
|
||||||
|
std::string uiVarname = variableName;
|
||||||
|
|
||||||
|
std::string uitext = uiVarname;
|
||||||
|
uitext += "(";
|
||||||
|
for (const std::string& tracerName : selectedTracerNames)
|
||||||
|
{
|
||||||
|
uitext += " " + tracerName;
|
||||||
|
}
|
||||||
|
uitext += ")";
|
||||||
|
return uitext;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -38,8 +38,9 @@ public:
|
|||||||
selectedTracerNames.insert(tracerName);
|
selectedTracerNames.insert(tracerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isNativeResult() const { return ( ( (variableName == RIG_FLD_TOF_RESNAME) || (variableName == RIG_FLD_CELL_FRACTION_RESNAME) ) && selectedTracerNames.size() <= 1); }
|
bool isNativeResult() const;
|
||||||
|
|
||||||
|
std::string uiText();
|
||||||
std::string variableName;
|
std::string variableName;
|
||||||
std::set<std::string> selectedTracerNames;
|
std::set<std::string> selectedTracerNames;
|
||||||
|
|
||||||
|
@ -201,6 +201,9 @@ std::vector<double>* RigFlowDiagResults::calculateDerivedResult(const RigFlowDia
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Test to remove all averaging
|
||||||
|
// if (injectorTOFs.size()) averageTof = (*injectorTOFs[0]);
|
||||||
|
|
||||||
return &averageTof;
|
return &averageTof;
|
||||||
}
|
}
|
||||||
else if (resVarAddr.variableName == RIG_FLD_CELL_FRACTION_RESNAME)
|
else if (resVarAddr.variableName == RIG_FLD_CELL_FRACTION_RESNAME)
|
||||||
|
Loading…
Reference in New Issue
Block a user