diff --git a/ApplicationCode/ReservoirDataModel/RigTofAccumulatedPhaseFractionsCalculator.cpp b/ApplicationCode/ReservoirDataModel/RigTofAccumulatedPhaseFractionsCalculator.cpp index 0c7b72cd02..a5fa6ea58d 100644 --- a/ApplicationCode/ReservoirDataModel/RigTofAccumulatedPhaseFractionsCalculator.cpp +++ b/ApplicationCode/ReservoirDataModel/RigTofAccumulatedPhaseFractionsCalculator.cpp @@ -68,54 +68,24 @@ void RigTofAccumulatedPhaseFractionsCalculator::computeTOFaccumulations() m_timeStep); - sortTofAndCalculateAccPhaseFraction(tofData, fractionData, porvResults, swatResults, soilResults, sgasResults); - - - -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RigTofAccumulatedPhaseFractionsCalculator::sortTofAndCalculateAccPhaseFraction(const std::vector* tofData, - const std::vector* fractionData, - const std::vector* porvResults, - const std::vector* swatResults, - const std::vector* soilResults, - const std::vector* sgasResults) -{ - std::map tofAndIndexMap; - - for (int i = 0; i < tofData->size(); i++) - { - tofAndIndexMap[tofData->at(i)] = i; - } - - - double fractionPorvSum = 0.0; - double fractionPorvPhaseSumSwat = 0.0; - double fractionPorvPhaseSumSoil = 0.0; - double fractionPorvPhaseSumSgas = 0.0; - std::vector accumulatedPhaseFractionSwat; std::vector accumulatedPhaseFractionSoil; std::vector accumulatedPhaseFractionSgas; std::vector tofInIncreasingOrder; - for (auto element : tofAndIndexMap) //todo - check handling of several cells have same tof value - { - int index = element.second; - double tofValue = element.first; - tofInIncreasingOrder.push_back(tofValue); + sortTofAndCalculateAccPhaseFraction(tofData, + fractionData, + porvResults, + swatResults, + soilResults, + sgasResults, + accumulatedPhaseFractionSwat, + accumulatedPhaseFractionSoil, + accumulatedPhaseFractionSgas, + tofInIncreasingOrder); + - fractionPorvSum += fractionData->at(index) * porvResults->at(index); - fractionPorvPhaseSumSwat += fractionData->at(index) * porvResults->at(index) * swatResults->at(index); - fractionPorvPhaseSumSoil += fractionData->at(index) * porvResults->at(index) * soilResults->at(index); - fractionPorvPhaseSumSgas += fractionData->at(index) * porvResults->at(index) * sgasResults->at(index); - accumulatedPhaseFractionSwat.push_back(fractionPorvPhaseSumSwat / fractionPorvSum); - accumulatedPhaseFractionSoil.push_back(fractionPorvPhaseSumSoil / fractionPorvSum); - accumulatedPhaseFractionSgas.push_back(fractionPorvPhaseSumSgas / fractionPorvSum); - } } + diff --git a/ApplicationCode/ReservoirDataModel/RigTofAccumulatedPhaseFractionsCalculator.h b/ApplicationCode/ReservoirDataModel/RigTofAccumulatedPhaseFractionsCalculator.h index e92ead9b29..e98fe0ac26 100644 --- a/ApplicationCode/ReservoirDataModel/RigTofAccumulatedPhaseFractionsCalculator.h +++ b/ApplicationCode/ReservoirDataModel/RigTofAccumulatedPhaseFractionsCalculator.h @@ -45,7 +45,11 @@ public: const std::vector* porvResults, const std::vector* swatResults, const std::vector* soilResults, - const std::vector* sgasResults); + const std::vector* sgasResults, + std::vector& tofInIncreasingOrder, + std::vector& accumulatedPhaseFractionSwat, + std::vector& accumulatedPhaseFractionSoil, + std::vector& accumulatedPhaseFractionSgas); private: RimEclipseCase* m_case; diff --git a/ApplicationCode/UnitTests/RigTofAccumulatedPhaseFractionsCalculator-Test.cpp b/ApplicationCode/UnitTests/RigTofAccumulatedPhaseFractionsCalculator-Test.cpp index 0e3096ddce..f0a6124ce5 100644 --- a/ApplicationCode/UnitTests/RigTofAccumulatedPhaseFractionsCalculator-Test.cpp +++ b/ApplicationCode/UnitTests/RigTofAccumulatedPhaseFractionsCalculator-Test.cpp @@ -19,7 +19,6 @@ #include "RigTofAccumulatedPhaseFractionsCalculator.h" - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -36,9 +35,9 @@ TEST(RigTofAccumulatedPhaseFractionsCalculator, sortTofAndCalculateAccPhaseFract fractionDataVector.push_back(0.02); std::vector porvResultVector; - porvResultVector.push_back(0.002); - porvResultVector.push_back(0.2); - porvResultVector.push_back(0.02); + porvResultVector.push_back(1); + porvResultVector.push_back(1); + porvResultVector.push_back(1.5); std::vector swatResultVector; swatResultVector.push_back(0.1); @@ -55,12 +54,29 @@ TEST(RigTofAccumulatedPhaseFractionsCalculator, sortTofAndCalculateAccPhaseFract sgasResultVector.push_back(0.1); sgasResultVector.push_back(0.3); + + std::vector accumulatedPhaseFractionSwat; + std::vector accumulatedPhaseFractionSoil; + std::vector accumulatedPhaseFractionSgas; + std::vector tofInIncreasingOrder; + RigTofAccumulatedPhaseFractionsCalculator::sortTofAndCalculateAccPhaseFraction(&(tofDataVector), &(fractionDataVector), &(porvResultVector), &(swatResultVector), &(soilResultVector), - &(sgasResultVector)); + &(sgasResultVector), + tofInIncreasingOrder, + accumulatedPhaseFractionSwat, + accumulatedPhaseFractionSoil, + accumulatedPhaseFractionSgas + ); - EXPECT_EQ(1, 1); -} \ No newline at end of file + EXPECT_LT(tofInIncreasingOrder[0], tofInIncreasingOrder[1]); + EXPECT_LT(tofInIncreasingOrder[1], tofInIncreasingOrder[2]); + + EXPECT_DOUBLE_EQ(accumulatedPhaseFractionSwat[0], 0.1000); + EXPECT_DOUBLE_EQ(accumulatedPhaseFractionSoil[1], 0.1125); + EXPECT_LT(accumulatedPhaseFractionSgas[2] - 0.13017, 0.00001); +} +