#1102 Possible to select all injectors/all producers

This commit is contained in:
Magne Sjaastad 2017-01-12 11:13:33 +01:00
parent 00db484f0c
commit 597dc46945
2 changed files with 84 additions and 6 deletions

View File

@ -23,23 +23,37 @@
#include "RigActiveCellInfo.h" #include "RigActiveCellInfo.h"
#include "RigCaseCellResultsData.h" #include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h" #include "RigEclipseCaseData.h"
#include "RigFlowDiagResultAddress.h"
#include "RimCellEdgeColors.h" #include "RimCellEdgeColors.h"
#include "RimEclipseCase.h" #include "RimEclipseCase.h"
#include "RimEclipseCellColors.h" #include "RimEclipseCellColors.h"
#include "RimEclipseFaultColors.h" #include "RimEclipseFaultColors.h"
#include "RimEclipsePropertyFilter.h" #include "RimEclipsePropertyFilter.h"
#include "RimEclipseResultCase.h"
#include "RimEclipseView.h" #include "RimEclipseView.h"
#include "RimFlowDiagSolution.h"
#include "RimReservoirCellResultsStorage.h" #include "RimReservoirCellResultsStorage.h"
#include "RimView.h" #include "RimView.h"
#include "RimViewLinker.h" #include "RimViewLinker.h"
#include "RimWellLogCurve.h" #include "RimWellLogCurve.h"
#include "RimFlowDiagSolution.h"
#include "cafPdmUiListEditor.h" #include "cafPdmUiListEditor.h"
#include "RimEclipseResultCase.h"
#include "RigFlowDiagResultAddress.h" namespace caf
{
template<>
void RimEclipseResultDefinition::FlowTracerSelectionEnum::setUp()
{
addItem(RimEclipseResultDefinition::FLOW_TR_INDIVIDUAL, "FLOW_TR_INDIVIDUAL", "Individual");
addItem(RimEclipseResultDefinition::FLOW_TR_INJECTORS, "FLOW_TR_INJECTORS", "All Injectors");
addItem(RimEclipseResultDefinition::FLOW_TR_PRODUCERS, "FLOW_TR_PRODUCERS", "All Producers");
addItem(RimEclipseResultDefinition::FLOW_TR_INJ_AND_PROD, "FLOW_TR_INJ_AND_PROD", "Injectors and Producers");
setDefault(RimEclipseResultDefinition::FLOW_TR_INDIVIDUAL);
}
}
CAF_PDM_SOURCE_INIT(RimEclipseResultDefinition, "ResultDefinition"); CAF_PDM_SOURCE_INIT(RimEclipseResultDefinition, "ResultDefinition");
@ -65,6 +79,8 @@ RimEclipseResultDefinition::RimEclipseResultDefinition()
CAF_PDM_InitFieldNoDefault(&m_selectedTracers, "SelectedTracers", "Tracers", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_selectedTracers, "SelectedTracers", "Tracers", "", "", "");
m_selectedTracers.uiCapability()->setUiHidden(true); m_selectedTracers.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&m_flowTracerSelectionMode, "FlowTracerSelectionMode", "Selection Type", "", "", "");
// Ui only fields // Ui only fields
CAF_PDM_InitFieldNoDefault(&m_resultTypeUiField, "MResultType", "Type", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_resultTypeUiField, "MResultType", "Type", "", "", "");
@ -80,6 +96,7 @@ RimEclipseResultDefinition::RimEclipseResultDefinition()
m_resultVariableUiField.xmlCapability()->setIOWritable(false); m_resultVariableUiField.xmlCapability()->setIOWritable(false);
m_resultVariableUiField.uiCapability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName()); m_resultVariableUiField.uiCapability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName());
CAF_PDM_InitFieldNoDefault(&m_flowSolutionUiField, "MFlowDiagSolution", "Solution", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_flowSolutionUiField, "MFlowDiagSolution", "Solution", "", "", "");
m_flowSolutionUiField.xmlCapability()->setIOReadable(false); m_flowSolutionUiField.xmlCapability()->setIOReadable(false);
m_flowSolutionUiField.xmlCapability()->setIOWritable(false); m_flowSolutionUiField.xmlCapability()->setIOWritable(false);
@ -507,10 +524,50 @@ RigFlowDiagResultAddress RimEclipseResultDefinition::flowDiagResAddress() const
{ {
CVF_ASSERT(m_resultType() == RimDefines::FLOW_DIAGNOSTICS); CVF_ASSERT(m_resultType() == RimDefines::FLOW_DIAGNOSTICS);
RimView* rimView = nullptr;
this->firstAncestorOrThisOfType(rimView);
size_t timeStep = rimView->currentTimeStep();
std::set<std::string> selTracerNames; std::set<std::string> selTracerNames;
for (const QString& tName : m_selectedTracers()) if (m_flowTracerSelectionMode == FLOW_TR_INDIVIDUAL)
{ {
selTracerNames.insert(tName.toStdString()); for (const QString& tName : m_selectedTracers())
{
selTracerNames.insert(tName.toStdString());
}
}
else
{
RimFlowDiagSolution* flowSol = m_flowSolutionUiField();
if (flowSol)
{
std::vector<QString> tracerNames = flowSol->tracerNames();
if (m_flowTracerSelectionMode == FLOW_TR_INJECTORS || m_flowTracerSelectionMode == FLOW_TR_INJ_AND_PROD)
{
for (const QString& tracerName : tracerNames)
{
RimFlowDiagSolution::TracerStatusType status = flowSol->tracerStatusInTimeStep(tracerName, timeStep);
if (status == RimFlowDiagSolution::INJECTOR)
{
selTracerNames.insert(tracerName.toStdString());
}
}
}
if (m_flowTracerSelectionMode == FLOW_TR_PRODUCERS || m_flowTracerSelectionMode == FLOW_TR_INJ_AND_PROD)
{
for (const QString& tracerName : tracerNames)
{
RimFlowDiagSolution::TracerStatusType status = flowSol->tracerStatusInTimeStep(tracerName, timeStep);
if (status == RimFlowDiagSolution::PRODUCER)
{
selTracerNames.insert(tracerName.toStdString());
}
}
}
}
} }
return RigFlowDiagResultAddress(m_resultVariable().toStdString(), selTracerNames); return RigFlowDiagResultAddress(m_resultVariable().toStdString(), selTracerNames);
@ -737,14 +794,22 @@ bool RimEclipseResultDefinition::hasDualPorFractureResult()
void RimEclipseResultDefinition::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) void RimEclipseResultDefinition::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{ {
uiOrdering.add(&m_resultTypeUiField); uiOrdering.add(&m_resultTypeUiField);
if (hasDualPorFractureResult()) if (hasDualPorFractureResult())
{ {
uiOrdering.add(&m_porosityModelUiField); uiOrdering.add(&m_porosityModelUiField);
} }
if ( m_resultTypeUiField() == RimDefines::FLOW_DIAGNOSTICS ) if ( m_resultTypeUiField() == RimDefines::FLOW_DIAGNOSTICS )
{ {
uiOrdering.add(&m_flowSolutionUiField); uiOrdering.add(&m_flowSolutionUiField);
uiOrdering.add(&m_selectedTracersUiField);
uiOrdering.add(&m_flowTracerSelectionMode);
if (m_flowTracerSelectionMode == FLOW_TR_INDIVIDUAL)
{
uiOrdering.add(&m_selectedTracersUiField);
}
if ( m_flowSolution() == nullptr ) if ( m_flowSolution() == nullptr )
{ {

View File

@ -35,6 +35,7 @@ class RimEclipseView;
class RimReservoirCellResultsStorage; class RimReservoirCellResultsStorage;
class RimFlowDiagSolution; class RimFlowDiagSolution;
//================================================================================================== //==================================================================================================
/// ///
/// ///
@ -42,6 +43,17 @@ class RimFlowDiagSolution;
class RimEclipseResultDefinition : public caf::PdmObject class RimEclipseResultDefinition : public caf::PdmObject
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
public:
enum FlowTracerSelectionType
{
FLOW_TR_INDIVIDUAL,
FLOW_TR_INJECTORS,
FLOW_TR_PRODUCERS,
FLOW_TR_INJ_AND_PROD
};
typedef caf::AppEnum<RimEclipseResultDefinition::FlowTracerSelectionType> FlowTracerSelectionEnum;
public: public:
RimEclipseResultDefinition(); RimEclipseResultDefinition();
virtual ~RimEclipseResultDefinition(); virtual ~RimEclipseResultDefinition();
@ -100,6 +112,7 @@ protected:
caf::PdmField< caf::AppEnum< RimDefines::PorosityModelType > > m_porosityModelUiField; caf::PdmField< caf::AppEnum< RimDefines::PorosityModelType > > m_porosityModelUiField;
caf::PdmField<QString> m_resultVariableUiField; caf::PdmField<QString> m_resultVariableUiField;
caf::PdmField< caf::AppEnum< FlowTracerSelectionType > > m_flowTracerSelectionMode;
caf::PdmPtrField<RimFlowDiagSolution*> m_flowSolutionUiField; caf::PdmPtrField<RimFlowDiagSolution*> m_flowSolutionUiField;
caf::PdmField<std::vector<QString> > m_selectedTracersUiField; caf::PdmField<std::vector<QString> > m_selectedTracersUiField;