From 003da9f640a0df5b2067328a3da68da774893eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Tue, 21 Mar 2017 15:56:36 +0100 Subject: [PATCH] #1332 Fixed wrong mapping of tracername to index based result value. Resulted in wrong colors for "tracer with max fraction" results, and wrong property filtering. --- .../ReservoirDataModel/RigFlowDiagResults.cpp | 57 ++++++++++++------- .../ReservoirDataModel/RigFlowDiagResults.h | 6 ++ 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/ApplicationCode/ReservoirDataModel/RigFlowDiagResults.cpp b/ApplicationCode/ReservoirDataModel/RigFlowDiagResults.cpp index cf95569709..3bbe7626bb 100644 --- a/ApplicationCode/ReservoirDataModel/RigFlowDiagResults.cpp +++ b/ApplicationCode/ReservoirDataModel/RigFlowDiagResults.cpp @@ -275,19 +275,24 @@ std::vector* RigFlowDiagResults::calculateSumOfFractionsResult(const Rig //-------------------------------------------------------------------------------------------------- std::vector* RigFlowDiagResults::calculateTracerWithMaxFractionResult(const RigFlowDiagResultAddress &resVarAddr, size_t frameIndex) { - std::vector selectedTracerIdxToGlobalTracerIdx; + std::vector< std::pair* > > fractions = findNamedResultsForSelectedTracers(resVarAddr, + frameIndex, + RIG_FLD_CELL_FRACTION_RESNAME, + RimFlowDiagSolution::UNDEFINED); + + std::vector resultTracerIdxToGlobalTracerIdx; { - selectedTracerIdxToGlobalTracerIdx.resize(resVarAddr.selectedTracerNames.size(), -1); + resultTracerIdxToGlobalTracerIdx.resize(fractions.size(), -1); std::vector allTracerNames = m_flowDiagSolution->tracerNames(); int selTracerIdx = 0; - for ( const std::string& tracerName: resVarAddr.selectedTracerNames ) + for ( const auto& trNameFractionPair: fractions ) { for ( size_t globIdx = 0; globIdx < allTracerNames.size(); ++globIdx ) { - if ( allTracerNames[globIdx].toStdString() == tracerName ) + if ( allTracerNames[globIdx].toStdString() == trNameFractionPair.first ) { - selectedTracerIdxToGlobalTracerIdx[selTracerIdx] = static_cast(globIdx); + resultTracerIdxToGlobalTracerIdx[selTracerIdx] = static_cast(globIdx); break; } } @@ -302,10 +307,6 @@ std::vector* RigFlowDiagResults::calculateTracerWithMaxFractionResult(co std::vector& maxFractionTracerIdx = maxFractionTracerIdxFrames->frameData(frameIndex); { - std::vector* > fractions = findResultsForSelectedTracers(resVarAddr, - frameIndex, - RIG_FLD_CELL_FRACTION_RESNAME, - RimFlowDiagSolution::UNDEFINED); maxFractionTracerIdx.resize(activeCellCount, HUGE_VAL); std::vector maxFraction; @@ -313,7 +314,7 @@ std::vector* RigFlowDiagResults::calculateTracerWithMaxFractionResult(co for ( size_t frIdx = 0; frIdx < fractions.size(); ++frIdx ) { - const std::vector * fr = fractions[frIdx]; + const std::vector * fr = fractions[frIdx].second; for ( size_t acIdx = 0 ; acIdx < activeCellCount; ++acIdx ) { @@ -322,20 +323,12 @@ std::vector* RigFlowDiagResults::calculateTracerWithMaxFractionResult(co if ( maxFraction[acIdx] < (*fr)[acIdx] ) { maxFraction[acIdx] = (*fr)[acIdx]; - maxFractionTracerIdx[acIdx] = frIdx; + maxFractionTracerIdx[acIdx] = resultTracerIdxToGlobalTracerIdx[frIdx]; } } } } - for ( size_t acIdx = 0 ; acIdx < activeCellCount; ++acIdx ) - { - if ( maxFractionTracerIdx[acIdx] == HUGE_VAL ) continue; - - double selectedTracerIdx = static_cast(maxFractionTracerIdx[acIdx]); - maxFractionTracerIdx[acIdx] = selectedTracerIdxToGlobalTracerIdx[selectedTracerIdx]; - } - return &maxFractionTracerIdx; } @@ -403,6 +396,32 @@ std::vector* > RigFlowDiagResults::findResultsForSelec } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector< std::pair*> > +RigFlowDiagResults::findNamedResultsForSelectedTracers(const RigFlowDiagResultAddress& resVarAddr, + size_t frameIndex, + const std::string& nativeResultName, + RimFlowDiagSolution::TracerStatusType wantedTracerType) +{ + + std::vector* > > selectedTracersResults; + + for ( const std::string& tracerName: resVarAddr.selectedTracerNames ) + { + RimFlowDiagSolution::TracerStatusType tracerType = m_flowDiagSolution->tracerStatusInTimeStep(QString::fromStdString(tracerName), frameIndex); + + if (tracerType != RimFlowDiagSolution::CLOSED + && ( tracerType == wantedTracerType || wantedTracerType == RimFlowDiagSolution::UNDEFINED) ) + { + selectedTracersResults.push_back(std::make_pair(tracerName, findOrCalculateResult(RigFlowDiagResultAddress(nativeResultName, tracerName), frameIndex))); + } + } + + return selectedTracersResults; +} + //-------------------------------------------------------------------------------------------------- /// diff --git a/ApplicationCode/ReservoirDataModel/RigFlowDiagResults.h b/ApplicationCode/ReservoirDataModel/RigFlowDiagResults.h index 3392729044..25a3662935 100644 --- a/ApplicationCode/ReservoirDataModel/RigFlowDiagResults.h +++ b/ApplicationCode/ReservoirDataModel/RigFlowDiagResults.h @@ -81,6 +81,12 @@ private: size_t frameIndex, const std::string& nativeResultName, RimFlowDiagSolution::TracerStatusType wantedTracerType); + std::vector< std::pair*> > + findNamedResultsForSelectedTracers(const RigFlowDiagResultAddress& resVarAddr, + size_t frameIndex, + const std::string& nativeResultName, + RimFlowDiagSolution::TracerStatusType wantedTracerType); + void calculateSumOfFractionAndFractionMultTOF(size_t activeCellCount, const std::vector *>& injectorFractions, const std::vector *>& injectorTOFs,