//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RigReservoirCellResults::loadOrComputeSOIL() { size_t resultGridIndex = findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL"); if (resultGridIndex == cvf::UNDEFINED_SIZE_T) { size_t scalarIndexSWAT = findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SWAT"); size_t scalarIndexSGAS = findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SGAS"); if (scalarIndexSGAS != cvf::UNDEFINED_SIZE_T && scalarIndexSWAT != cvf::UNDEFINED_SIZE_T) { size_t timeStepCount = m_resultInfos[scalarIndexSWAT].m_timeStepDates.size(); resultGridIndex = addEmptyScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL"); m_cellScalarResults[resultGridIndex].resize(timeStepCount); const std::vector< std::vector<double> >& sgas = cellScalarResults(scalarIndexSGAS); const std::vector< std::vector<double> >& swat = cellScalarResults(scalarIndexSWAT); std::vector< std::vector<double> >& soil = cellScalarResults(resultGridIndex); size_t resultValueCount = sgas[0].size(); int timeStepIdx = 0; for (timeStepIdx = 0; timeStepIdx < static_cast<int>(timeStepCount); timeStepIdx++) { soil[timeStepIdx].resize(resultValueCount); int idx = 0; #pragma omp parallel for for (idx = 0; idx < static_cast<int>(resultValueCount); idx++) { soil[timeStepIdx][idx] = 1.0 - sgas[timeStepIdx][idx] - swat[timeStepIdx][idx]; } } } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const std::vector<float>& RigFemPartResultsCollection::resultValues(const RigFemResultAddress& resVarAddr, int partIndex, int frameIndex) { CVF_ASSERT(resVarAddr.isValid()); RigFemScalarResultFrames* scalarResults = findOrLoadScalarResult(partIndex, resVarAddr); return scalarResults->frameData(frameIndex); }
//-------------------------------------------------------------------------------------------------- /// Returns whether any of the parts actually had any of the requested results //-------------------------------------------------------------------------------------------------- bool RigFemPartResultsCollection::assertResultsLoaded(const RigFemResultAddress& resVarAddr) { if (!resVarAddr.isValid()) return false; bool foundResults = false; for (int pIdx = 0; pIdx < static_cast<int>(m_femPartResults.size()); ++pIdx) { if (m_femPartResults[pIdx].notNull()) { RigFemScalarResultFrames* scalarResults = findOrLoadScalarResult(pIdx, resVarAddr); for (int fIdx = 0; fIdx < scalarResults->frameCount(); ++fIdx) { foundResults = foundResults || scalarResults->frameData(fIdx).size(); } } } return foundResults; }