Files
ResInsight/ApplicationCode/ProjectDataModel/RimResultDefinition.cpp
T

212 lines
8.3 KiB
C++
Raw Normal View History

2012-05-18 09:45:23 +02:00
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2011-2012 Statoil ASA, Ceetron AS
//
// 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.
//
/////////////////////////////////////////////////////////////////////////////////
2013-03-22 16:12:00 +01:00
#include "RiaStdInclude.h"
2012-05-18 09:45:23 +02:00
#include "RimResultDefinition.h"
#include "RimReservoirView.h"
2013-03-22 16:40:41 +01:00
#include "RimCase.h"
2013-03-22 16:58:44 +01:00
#include "RigCaseCellResultsData.h"
#include "RigCaseData.h"
2012-05-18 09:45:23 +02:00
#include "RigMainGrid.h"
2012-06-26 16:10:41 +02:00
#include "cafPdmUiListEditor.h"
2012-05-18 09:45:23 +02:00
CAF_PDM_SOURCE_INIT(RimResultDefinition, "ResultDefinition");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimResultDefinition::RimResultDefinition()
: m_gridScalarResultIndex(cvf::UNDEFINED_SIZE_T)
{
CAF_PDM_InitObject("Result Definition", "", "", "");
2013-02-01 14:39:32 +01:00
CAF_PDM_InitFieldNoDefault(&resultType, "ResultType", "Type", "", "", "");
CAF_PDM_InitFieldNoDefault(&porosityModel, "PorosityModelType", "Type", "", "", "");
2012-08-31 19:12:47 +02:00
CAF_PDM_InitField(&resultVariable, "ResultVariable", RimDefines::undefinedResultName(), "Variable", "", "", "" );
2012-06-26 16:10:41 +02:00
resultVariable.setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName());
2012-05-18 09:45:23 +02:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimResultDefinition::~RimResultDefinition()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimResultDefinition::setReservoirView(RimReservoirView* ownerReservoirView)
{
m_reservoirView = ownerReservoirView;
2013-02-05 10:51:32 +01:00
// TODO: This code is executed before reservoir is read, and then porosity model is never set to zero
if (m_reservoirView->eclipseCase() &&
m_reservoirView->eclipseCase()->reservoirData() &&
m_reservoirView->eclipseCase()->reservoirData()->activeCellInfo(RifReaderInterface::FRACTURE_RESULTS) )
2013-02-05 10:51:32 +01:00
{
2013-03-22 09:32:42 +01:00
if (m_reservoirView->eclipseCase()->reservoirData()->activeCellInfo(RifReaderInterface::FRACTURE_RESULTS)->globalActiveCellCount() == 0)
2013-02-05 10:51:32 +01:00
{
porosityModel.setUiHidden(true);
}
}
2012-05-18 09:45:23 +02:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
if (changedField == &resultType)
{
2012-08-31 19:12:47 +02:00
resultVariable = RimDefines::undefinedResultName();
2012-05-18 09:45:23 +02:00
}
loadResult();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> RimResultDefinition::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly)
{
if (fieldNeedingOptions == &resultVariable)
{
if (m_reservoirView && m_reservoirView->currentGridCellResults())
2012-05-18 09:45:23 +02:00
{
QStringList varList = m_reservoirView->currentGridCellResults()->cellResults()->resultNames(resultType());
2012-05-18 09:45:23 +02:00
QList<caf::PdmOptionItemInfo> optionList;
int i;
for (i = 0; i < varList.size(); ++i)
{
optionList.push_back(caf::PdmOptionItemInfo( varList[i], varList[i]));
}
2012-08-31 19:12:47 +02:00
optionList.push_front(caf::PdmOptionItemInfo( RimDefines::undefinedResultName(), RimDefines::undefinedResultName() ));
2012-05-18 09:45:23 +02:00
if (useOptionsOnly) *useOptionsOnly = true;
return optionList;
}
}
return QList<caf::PdmOptionItemInfo>();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RimResultDefinition::gridScalarIndex() const
{
2013-02-01 14:39:32 +01:00
if (m_gridScalarResultIndex == cvf::UNDEFINED_SIZE_T)
2012-05-18 09:45:23 +02:00
{
const RimReservoirCellResultsStorage* gridCellResults = m_reservoirView->currentGridCellResults();
if (gridCellResults) m_gridScalarResultIndex = gridCellResults->cellResults()->findScalarResultIndex(resultType(), resultVariable());
2012-05-18 09:45:23 +02:00
}
return m_gridScalarResultIndex;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimResultDefinition::loadResult()
{
RimReservoirCellResultsStorage* gridCellResults = m_reservoirView->currentGridCellResults();
2012-05-18 09:45:23 +02:00
if (gridCellResults)
{
2012-06-26 16:10:41 +02:00
m_gridScalarResultIndex = gridCellResults->findOrLoadScalarResult(resultType(), resultVariable);
2012-05-18 09:45:23 +02:00
}
else
{
m_gridScalarResultIndex = cvf::UNDEFINED_SIZE_T;
}
}
//--------------------------------------------------------------------------------------------------
2012-06-26 16:10:41 +02:00
/// Returns whether the result requested by the definition is a single frame result
/// The result needs to be loaded before asking
2012-05-18 09:45:23 +02:00
//--------------------------------------------------------------------------------------------------
bool RimResultDefinition::hasStaticResult() const
{
const RimReservoirCellResultsStorage* gridCellResults = m_reservoirView->currentGridCellResults();
if (hasResult() && gridCellResults->cellResults()->timeStepCount(m_gridScalarResultIndex) == 1 )
2012-05-18 09:45:23 +02:00
{
return true;
}
else
{
return false;
}
}
//--------------------------------------------------------------------------------------------------
2012-06-26 16:10:41 +02:00
/// Returns whether the result requested by the definition is loaded or possible to load from the result file
2012-05-18 09:45:23 +02:00
//--------------------------------------------------------------------------------------------------
bool RimResultDefinition::hasResult() const
{
if (m_gridScalarResultIndex != cvf::UNDEFINED_SIZE_T) return true;
if (m_reservoirView->currentGridCellResults() && m_reservoirView->currentGridCellResults()->cellResults())
2012-05-18 09:45:23 +02:00
{
const RigCaseCellResultsData* gridCellResults = m_reservoirView->currentGridCellResults()->cellResults();
2012-06-26 16:10:41 +02:00
m_gridScalarResultIndex = gridCellResults->findScalarResultIndex(resultType(), resultVariable());
2012-05-18 09:45:23 +02:00
return m_gridScalarResultIndex != cvf::UNDEFINED_SIZE_T;
}
return false;
}
//--------------------------------------------------------------------------------------------------
2012-06-26 16:10:41 +02:00
/// Returns whether the result requested by the definition is a multi frame result
/// The result needs to be loaded before asking
2012-05-18 09:45:23 +02:00
//--------------------------------------------------------------------------------------------------
bool RimResultDefinition::hasDynamicResult() const
{
if (hasResult())
{
if (resultType() == RimDefines::DYNAMIC_NATIVE)
{
return true;
}
if (m_reservoirView->currentGridCellResults() && m_reservoirView->currentGridCellResults()->cellResults())
{
const RigCaseCellResultsData* gridCellResults = m_reservoirView->currentGridCellResults()->cellResults();
if (gridCellResults->timeStepCount(m_gridScalarResultIndex) > 1 )
{
return true;
}
}
}
return false;
2012-05-18 09:45:23 +02:00
}
2012-06-26 16:10:41 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimReservoirView* RimResultDefinition::reservoirView()
{
return m_reservoirView;
}