//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RigCaseCellResultsData::createCombinedTransmissibilityResult() { size_t combinedTransmissibilityIndex = findScalarResultIndex(RimDefines::STATIC_NATIVE, RimDefines::combinedTransmissibilityResultName()); if (combinedTransmissibilityIndex != cvf::UNDEFINED_SIZE_T) return; size_t tranX, tranY, tranZ; if (!findTransmissibilityResults(tranX, tranY, tranZ)) return; m_combinedTransmissibilityResultIndex = addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::combinedTransmissibilityResultName(), false, 0); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const std::vector<size_t>& RigCaseCellResultsData::cellScalarValuesHistogram(size_t scalarResultIndex) { CVF_ASSERT(scalarResultIndex < resultCount()); // Extend array and cache vars if (scalarResultIndex >= m_histograms.size() ) { m_histograms.resize(resultCount()); m_p10p90.resize(resultCount(), std::make_pair(HUGE_VAL, HUGE_VAL)); } if (m_histograms[scalarResultIndex].size()) { return m_histograms[scalarResultIndex]; } double min; double max; size_t nBins = 100; this->minMaxCellScalarValues( scalarResultIndex, min, max ); RigHistogramCalculator histCalc(min, max, nBins, &m_histograms[scalarResultIndex]); if (scalarResultIndex == m_combinedTransmissibilityResultIndex) { size_t tranX, tranY, tranZ; if (findTransmissibilityResults(tranX, tranY, tranZ)) { for (size_t tsIdx = 0; tsIdx < this->timeStepCount(scalarResultIndex); tsIdx++) { histCalc.addData(m_cellScalarResults[tranX][tsIdx]); histCalc.addData(m_cellScalarResults[tranY][tsIdx]); histCalc.addData(m_cellScalarResults[tranZ][tsIdx]); } } } else { for (size_t tsIdx = 0; tsIdx < this->timeStepCount(scalarResultIndex); tsIdx++) { std::vector<double>& values = m_cellScalarResults[scalarResultIndex][tsIdx]; histCalc.addData(values); } } m_p10p90[scalarResultIndex].first = histCalc.calculatePercentil(0.1); m_p10p90[scalarResultIndex].second = histCalc.calculatePercentil(0.9); return m_histograms[scalarResultIndex]; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RigCaseCellResultsData::minMaxCellScalarValues(size_t scalarResultIndex, size_t timeStepIndex, double& min, double& max) { min = HUGE_VAL; max = -HUGE_VAL; CVF_ASSERT(scalarResultIndex < resultCount()); if (timeStepIndex >= m_cellScalarResults[scalarResultIndex].size()) { return; } if (scalarResultIndex >= m_maxMinValuesPrTs.size()) { m_maxMinValuesPrTs.resize(scalarResultIndex+1); } if (timeStepIndex >= m_maxMinValuesPrTs[scalarResultIndex].size()) { m_maxMinValuesPrTs[scalarResultIndex].resize(timeStepIndex+1, std::make_pair(HUGE_VAL, -HUGE_VAL)); } if (m_maxMinValuesPrTs[scalarResultIndex][timeStepIndex].first != HUGE_VAL) { min = m_maxMinValuesPrTs[scalarResultIndex][timeStepIndex].first; max = m_maxMinValuesPrTs[scalarResultIndex][timeStepIndex].second; return; } if (scalarResultIndex == m_combinedTransmissibilityResultIndex) { size_t tranX, tranY, tranZ; if (!findTransmissibilityResults(tranX, tranY, tranZ)) return; double tranMin; double tranMax; minMaxCellScalarValues(tranX, timeStepIndex, tranMin, tranMax); min = CVF_MIN(tranMin, min); max = CVF_MAX(tranMax, max); minMaxCellScalarValues(tranY, timeStepIndex, tranMin, tranMax); min = CVF_MIN(tranMin, min); max = CVF_MAX(tranMax, max); minMaxCellScalarValues(tranZ, timeStepIndex, tranMin, tranMax); min = CVF_MIN(tranMin, min); max = CVF_MAX(tranMax, max); return; } std::vector<double>& values = m_cellScalarResults[scalarResultIndex][timeStepIndex]; size_t i; for (i = 0; i < values.size(); i++) { if (values[i] == HUGE_VAL) { continue; } if (values[i] < min) { min = values[i]; } if (values[i] > max) { max = values[i]; } } m_maxMinValuesPrTs[scalarResultIndex][timeStepIndex].first = min; m_maxMinValuesPrTs[scalarResultIndex][timeStepIndex].second= max; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RigCaseCellResultsData::posNegClosestToZero(size_t scalarResultIndex, size_t timeStepIndex, double& pos, double& neg) { pos = HUGE_VAL; neg = -HUGE_VAL; CVF_ASSERT(scalarResultIndex < resultCount()); if (timeStepIndex >= m_cellScalarResults[scalarResultIndex].size()) { return; } if (scalarResultIndex >= m_posNegClosestToZeroPrTs.size()) { m_posNegClosestToZeroPrTs.resize(scalarResultIndex+1); } if (timeStepIndex >= m_posNegClosestToZeroPrTs[scalarResultIndex].size()) { m_posNegClosestToZeroPrTs[scalarResultIndex].resize(timeStepIndex+1, std::make_pair(HUGE_VAL, -HUGE_VAL)); } if (m_posNegClosestToZeroPrTs[scalarResultIndex][timeStepIndex].first != HUGE_VAL) { pos = m_posNegClosestToZeroPrTs[scalarResultIndex][timeStepIndex].first; neg = m_posNegClosestToZeroPrTs[scalarResultIndex][timeStepIndex].second; return; } if (scalarResultIndex == m_combinedTransmissibilityResultIndex) { size_t tranX, tranY, tranZ; if (findTransmissibilityResults(tranX, tranY, tranZ)) { double traPos, traNeg; posNegClosestToZero(tranX, timeStepIndex, traPos, traNeg); if ( 0 < traPos && traPos < pos ) pos = traPos; if ( neg < traNeg && traNeg < 0 ) neg = traNeg; posNegClosestToZero(tranY, timeStepIndex, traPos, traNeg); if ( 0 < traPos && traPos < pos ) pos = traPos; if ( neg < traNeg && traNeg < 0 ) neg = traNeg; posNegClosestToZero(tranZ, timeStepIndex, traPos, traNeg); if ( 0 < traPos && traPos < pos ) pos = traPos; if ( neg < traNeg && traNeg < 0 ) neg = traNeg; } return; } std::vector<double>& values = m_cellScalarResults[scalarResultIndex][timeStepIndex]; size_t i; for (i = 0; i < values.size(); i++) { if (values[i] == HUGE_VAL) { continue; } if (values[i] < pos && values[i] > 0) { pos = values[i]; } if (values[i] > neg && values[i] < 0) { neg = values[i]; } } m_posNegClosestToZeroPrTs[scalarResultIndex][timeStepIndex].first = pos; m_posNegClosestToZeroPrTs[scalarResultIndex][timeStepIndex].second= neg; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RigCaseCellResultsData::meanCellScalarValues(size_t scalarResultIndex, double& meanValue) { CVF_ASSERT(scalarResultIndex < resultCount()); // Extend array and cache vars if (scalarResultIndex >= m_meanValues.size() ) { m_meanValues.resize(scalarResultIndex+1, HUGE_VAL); } if (m_meanValues[scalarResultIndex] != HUGE_VAL) { meanValue = m_meanValues[scalarResultIndex]; return; } double valueSum = 0.0; size_t count = 0; if (scalarResultIndex == m_combinedTransmissibilityResultIndex) { size_t tranX, tranY, tranZ; if (findTransmissibilityResults(tranX, tranY, tranZ)) { for (size_t tIdx = 0; tIdx < timeStepCount(tranX); tIdx++) { { std::vector<double>& values = m_cellScalarResults[tranX][tIdx]; for (size_t cIdx = 0; cIdx < values.size(); ++cIdx) { valueSum += values[cIdx]; } count += values.size(); } { std::vector<double>& values = m_cellScalarResults[tranY][tIdx]; for (size_t cIdx = 0; cIdx < values.size(); ++cIdx) { valueSum += values[cIdx]; } count += values.size(); } { std::vector<double>& values = m_cellScalarResults[tranZ][tIdx]; for (size_t cIdx = 0; cIdx < values.size(); ++cIdx) { valueSum += values[cIdx]; } count += values.size(); } } } } else { for (size_t tIdx = 0; tIdx < timeStepCount(scalarResultIndex); tIdx++) { std::vector<double>& values = m_cellScalarResults[scalarResultIndex][tIdx]; for (size_t cIdx = 0; cIdx < values.size(); ++cIdx) { valueSum += values[cIdx]; } count += values.size(); } } m_meanValues[scalarResultIndex] = valueSum/count; meanValue = m_meanValues[scalarResultIndex]; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RigCaseCellResultsData::createPlaceholderResultEntries() { // SOIL { size_t soilIndex = findScalarResultIndex(RimDefines::DYNAMIC_NATIVE, "SOIL"); if (soilIndex == cvf::UNDEFINED_SIZE_T) { size_t swatIndex = findScalarResultIndex(RimDefines::DYNAMIC_NATIVE, "SWAT"); size_t sgasIndex = findScalarResultIndex(RimDefines::DYNAMIC_NATIVE, "SGAS"); if (swatIndex != cvf::UNDEFINED_SIZE_T || sgasIndex != cvf::UNDEFINED_SIZE_T) { soilIndex = addEmptyScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL", false); this->setMustBeCalculated(soilIndex); } } } // TRANSXYZ { size_t tranX, tranY, tranZ; if (findTransmissibilityResults(tranX, tranY, tranZ)) { addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::combinedTransmissibilityResultName(), false, 0); } } // MULTXYZ { addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::combinedMultResultName(), false, 0); } // riTRANSXYZ and X,Y,Z { if ( findScalarResultIndex(RimDefines::STATIC_NATIVE, "PERMX") != cvf::UNDEFINED_SIZE_T && findScalarResultIndex(RimDefines::STATIC_NATIVE, "PERMY") != cvf::UNDEFINED_SIZE_T && findScalarResultIndex(RimDefines::STATIC_NATIVE, "PERMZ") != cvf::UNDEFINED_SIZE_T) { addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::riTranXResultName(), false, 0); addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::riTranYResultName(), false, 0); addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::riTranZResultName(), false, 0); addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::combinedRiTranResultName(), false, 0); } } // riMULTXYZ and X, Y, Z { size_t tranX, tranY, tranZ; if (findTransmissibilityResults(tranX, tranY, tranZ) && findScalarResultIndex(RimDefines::STATIC_NATIVE, RimDefines::riTranXResultName()) != cvf::UNDEFINED_SIZE_T && findScalarResultIndex(RimDefines::STATIC_NATIVE, RimDefines::riTranYResultName()) != cvf::UNDEFINED_SIZE_T && findScalarResultIndex(RimDefines::STATIC_NATIVE, RimDefines::riTranZResultName()) != cvf::UNDEFINED_SIZE_T) { addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::riMultXResultName(), false, 0); addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::riMultYResultName(), false, 0); addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::riMultZResultName(), false, 0); addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::combinedRiMultResultName(), false, 0); } } // riTRANSXYZbyArea and X, Y, Z { if (findScalarResultIndex(RimDefines::STATIC_NATIVE, "TRANX") != cvf::UNDEFINED_SIZE_T) { addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::riAreaNormTranXResultName(), false, 0); } if (findScalarResultIndex(RimDefines::STATIC_NATIVE, "TRANY") != cvf::UNDEFINED_SIZE_T) { addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::riAreaNormTranYResultName(), false, 0); } if (findScalarResultIndex(RimDefines::STATIC_NATIVE, "TRANZ") != cvf::UNDEFINED_SIZE_T) { addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::riAreaNormTranZResultName(), false, 0); } size_t tranX, tranY, tranZ; if (findTransmissibilityResults(tranX, tranY, tranZ)) { addStaticScalarResult(RimDefines::STATIC_NATIVE, RimDefines::combinedRiAreaNormTranResultName(), false, 0); } } }