#1126 Adding handling of multiple cells with same tof. No test yet.

This commit is contained in:
astridkbjorke
2017-08-10 13:07:17 +02:00
parent 4f2d3c7f5b
commit 35cc413f4d

View File

@@ -105,11 +105,25 @@ void RigTofAccumulatedPhaseFractionsCalculator::sortTofAndCalculateAccPhaseFract
std::vector<double>& accumulatedPhaseFractionSgas) std::vector<double>& accumulatedPhaseFractionSgas)
{ {
std::map<double, int> tofAndIndexMap; std::map<double, std::vector<int> > tofAndIndexMap;
for (int i = 0; i < tofData->size(); i++) for (int i = 0; i < tofData->size(); i++)
{ {
tofAndIndexMap[tofData->at(i)] = i; auto it = tofAndIndexMap.find(tofData->at(i));
if (it == tofAndIndexMap.end())
{
//Key does not exist
std::vector<int> vectorOfIndexes;
vectorOfIndexes.push_back(i);
tofAndIndexMap[tofData->at(i)] = vectorOfIndexes;
}
else
{
//Key does exisit
std::vector<int> vectorOfIndexes = it->second;
vectorOfIndexes.push_back(i);
tofAndIndexMap[tofData->at(i)] = vectorOfIndexes;
}
} }
@@ -118,17 +132,18 @@ void RigTofAccumulatedPhaseFractionsCalculator::sortTofAndCalculateAccPhaseFract
double fractionPorvPhaseSumSoil = 0.0; double fractionPorvPhaseSumSoil = 0.0;
double fractionPorvPhaseSumSgas = 0.0; double fractionPorvPhaseSumSgas = 0.0;
for (auto element : tofAndIndexMap) //todo - check handling of several cells have same tof value for (auto element : tofAndIndexMap)
{ {
int index = element.second;
double tofValue = element.first; double tofValue = element.first;
for (int index : element.second)
{
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);
}
tofInIncreasingOrder.push_back(tofValue); tofInIncreasingOrder.push_back(tofValue);
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); accumulatedPhaseFractionSwat.push_back(fractionPorvPhaseSumSwat / fractionPorvSum);
accumulatedPhaseFractionSoil.push_back(fractionPorvPhaseSumSoil / fractionPorvSum); accumulatedPhaseFractionSoil.push_back(fractionPorvPhaseSumSoil / fractionPorvSum);
accumulatedPhaseFractionSgas.push_back(fractionPorvPhaseSumSgas / fractionPorvSum); accumulatedPhaseFractionSgas.push_back(fractionPorvPhaseSumSgas / fractionPorvSum);