diff --git a/ApplicationCode/Commands/FlowCommands/RicPlotProductionRateFeature.cpp b/ApplicationCode/Commands/FlowCommands/RicPlotProductionRateFeature.cpp index 64654400c7..767f2a841c 100644 --- a/ApplicationCode/Commands/FlowCommands/RicPlotProductionRateFeature.cpp +++ b/ApplicationCode/Commands/FlowCommands/RicPlotProductionRateFeature.cpp @@ -33,7 +33,7 @@ #include "RimProject.h" #include "RimSummaryCaseCollection.h" #include "RimSummaryCurve.h" -#include "RimSummaryCurveFilter.h" +#include "RimSummaryCurveAppearanceCalculator.h" #include "RimSummaryPlot.h" #include "RimSummaryPlotCollection.h" #include "RimView.h" @@ -94,67 +94,85 @@ void RicPlotProductionRateFeature::onActionTriggered(bool isChecked) RimGridSummaryCase* gridSummaryCase = RicPlotProductionRateFeature::gridSummaryCaseForWell(well); if (!gridSummaryCase) continue; - QString curveFilterText = "W*PR:"; QString description = "Well Production Rates : "; - RigSingleWellResultsData* wRes = well->wellResults(); - if (wRes) + if (isInjector(well)) { - RimView* rimView = nullptr; - well->firstAncestorOrThisOfTypeAsserted(rimView); - - int currentTimeStep = rimView->currentTimeStep(); - - if (wRes->hasWellResult(currentTimeStep)) - { - const RigWellResultFrame& wrf = wRes->wellResultFrame(currentTimeStep); - - if ( wrf.m_productionType == RigWellResultFrame::OIL_INJECTOR - || wrf.m_productionType == RigWellResultFrame::GAS_INJECTOR - || wrf.m_productionType == RigWellResultFrame::WATER_INJECTOR) - { - curveFilterText = "W*IR:"; - description = "Well Injection Rates : "; - } - } + description = "Well Injection Rates : "; } - curveFilterText += well->name(); - description += well->name(); - RimSummaryPlot* plot = new RimSummaryPlot(); summaryPlotColl->summaryPlots().push_back(plot); + description += well->name(); plot->setDescription(description); + if (isInjector(well)) { - RimSummaryCurveFilter* newCurveFilter = new RimSummaryCurveFilter(); - plot->addCurveFilter(newCurveFilter); + // Left Axis - newCurveFilter->createCurves(gridSummaryCase, curveFilterText); + RimDefines::PlotAxis plotAxis = RimDefines::PLOT_AXIS_LEFT; + + { + // Water + QString parameterName = "WWIR"; + RimSummaryCurve* curve = RicPlotProductionRateFeature::addSummaryCurve(plot, well, gridSummaryCase, parameterName, plotAxis); + curve->setColor(RimSummaryCurveAppearanceCalculator::cycledBlueColor(0)); + } + + { + // Gas + QString parameterName = "WGIR"; + RimSummaryCurve* curve = RicPlotProductionRateFeature::addSummaryCurve(plot, well, gridSummaryCase, parameterName, plotAxis); + curve->setColor(RimSummaryCurveAppearanceCalculator::cycledRedColor(0)); + } + } + else + { + // Left Axis + + RimDefines::PlotAxis plotAxis = RimDefines::PLOT_AXIS_LEFT; + + { + // Oil + QString parameterName = "WOPR"; + RimSummaryCurve* curve = RicPlotProductionRateFeature::addSummaryCurve(plot, well, gridSummaryCase, parameterName, plotAxis); + curve->setColor(RimSummaryCurveAppearanceCalculator::cycledGreenColor(0)); + } + + { + // Water + QString parameterName = "WWPR"; + RimSummaryCurve* curve = RicPlotProductionRateFeature::addSummaryCurve(plot, well, gridSummaryCase, parameterName, plotAxis); + curve->setColor(RimSummaryCurveAppearanceCalculator::cycledBlueColor(0)); + } + + { + // Gas + QString parameterName = "WGPR"; + RimSummaryCurve* curve = RicPlotProductionRateFeature::addSummaryCurve(plot, well, gridSummaryCase, parameterName, plotAxis); + curve->setColor(RimSummaryCurveAppearanceCalculator::cycledRedColor(0)); + } } + // Right Axis + { - RimSummaryCurve* newCurve = new RimSummaryCurve(); - plot->addCurve(newCurve); + RimDefines::PlotAxis plotAxis = RimDefines::PLOT_AXIS_RIGHT; - newCurve->setSummaryCase(gridSummaryCase); + { + RimSummaryCurve* curve = RicPlotProductionRateFeature::addSummaryCurve(plot, well, gridSummaryCase, "WTHP", plotAxis); + curve->setColor(RimSummaryCurveAppearanceCalculator::cycledNoneRGBBrColor(0)); + //curve->setSymbol(RimPlotCurve::SYMBOL_DIAMOND); + } - RifEclipseSummaryAddress addr( RifEclipseSummaryAddress::SUMMARY_WELL, - "WBHP", - -1, - -1, - "", - well->name().toStdString(), - -1, - "", - -1, - -1, - -1); - - newCurve->setSummaryAddress(addr); - newCurve->setYAxis(RimDefines::PlotAxis::PLOT_AXIS_RIGHT); + { + RimSummaryCurve* curve = RicPlotProductionRateFeature::addSummaryCurve(plot, well, gridSummaryCase, "WBHP", plotAxis); + curve->setColor(RimSummaryCurveAppearanceCalculator::cycledNoneRGBBrColor(1)); + //curve->setSymbol(RimPlotCurve::SYMBOL_DIAMOND); + } + } summaryPlotColl->updateConnectedEditors(); @@ -210,3 +228,66 @@ RimGridSummaryCase* RicPlotProductionRateFeature::gridSummaryCaseForWell(RimEcli return nullptr; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicPlotProductionRateFeature::isInjector(RimEclipseWell* well) +{ + RigSingleWellResultsData* wRes = well->wellResults(); + if (wRes) + { + RimView* rimView = nullptr; + well->firstAncestorOrThisOfTypeAsserted(rimView); + + int currentTimeStep = rimView->currentTimeStep(); + + if (wRes->hasWellResult(currentTimeStep)) + { + const RigWellResultFrame& wrf = wRes->wellResultFrame(currentTimeStep); + + if ( wrf.m_productionType == RigWellResultFrame::OIL_INJECTOR + || wrf.m_productionType == RigWellResultFrame::GAS_INJECTOR + || wrf.m_productionType == RigWellResultFrame::WATER_INJECTOR) + { + return true; + } + } + } + + return false; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryCurve* RicPlotProductionRateFeature::addSummaryCurve( RimSummaryPlot* plot, const RimEclipseWell* well, + RimGridSummaryCase* gridSummaryCase, const QString& vectorName, + RimDefines::PlotAxis plotAxis) +{ + CVF_ASSERT(plot); + CVF_ASSERT(gridSummaryCase); + CVF_ASSERT(well); + + RimSummaryCurve* newCurve = new RimSummaryCurve(); + plot->addCurve(newCurve); + + newCurve->setSummaryCase(gridSummaryCase); + + RifEclipseSummaryAddress addr(RifEclipseSummaryAddress::SUMMARY_WELL, + vectorName.toStdString(), + -1, + -1, + "", + well->name().toStdString(), + -1, + "", + -1, + -1, + -1); + + newCurve->setSummaryAddress(addr); + newCurve->setYAxis(plotAxis); + + return newCurve; +} + diff --git a/ApplicationCode/Commands/FlowCommands/RicPlotProductionRateFeature.h b/ApplicationCode/Commands/FlowCommands/RicPlotProductionRateFeature.h index 6fae301645..f736055b3a 100644 --- a/ApplicationCode/Commands/FlowCommands/RicPlotProductionRateFeature.h +++ b/ApplicationCode/Commands/FlowCommands/RicPlotProductionRateFeature.h @@ -21,9 +21,12 @@ #include "cafCmdFeature.h" #include "RimFlowDiagSolution.h" +#include "RimDefines.h" class RimGridSummaryCase; class RimEclipseWell; +class RimSummaryPlot; +class RimSummaryCurve; //================================================================================================== /// @@ -39,7 +42,11 @@ protected: virtual void setupActionLook( QAction* actionToSetup ) override; private: - static RimGridSummaryCase* gridSummaryCaseForWell(RimEclipseWell* well); + static RimGridSummaryCase* gridSummaryCaseForWell(RimEclipseWell* well); + static bool isInjector(RimEclipseWell* well); + static RimSummaryCurve* addSummaryCurve(RimSummaryPlot* plot, const RimEclipseWell* well, + RimGridSummaryCase* gridSummaryCase, const QString& vectorName, + RimDefines::PlotAxis plotAxis); };