Compute SOIL if one or none of SGAS or SWAT is present

p4#: 19173
This commit is contained in:
Magne Sjaastad 2012-10-12 14:27:43 +02:00
parent b4ae324d9b
commit e8da3510ec

View File

@ -335,35 +335,67 @@ size_t RigReservoirCellResults::findScalarResultIndex(const QString& resultName)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RigReservoirCellResults::loadOrComputeSOIL() void RigReservoirCellResults::loadOrComputeSOIL()
{ {
size_t resultGridIndex = findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL"); size_t soilResultGridIndex = findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL");
if (resultGridIndex == cvf::UNDEFINED_SIZE_T) if (soilResultGridIndex == cvf::UNDEFINED_SIZE_T)
{ {
const std::vector< std::vector<double> >* swat = NULL;
const std::vector< std::vector<double> >* sgas = NULL;
size_t scalarIndexSWAT = findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SWAT"); size_t scalarIndexSWAT = findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SWAT");
size_t scalarIndexSGAS = findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SGAS"); if (scalarIndexSWAT != cvf::UNDEFINED_SIZE_T)
if (scalarIndexSGAS != cvf::UNDEFINED_SIZE_T && scalarIndexSWAT != cvf::UNDEFINED_SIZE_T)
{ {
size_t timeStepCount = m_resultInfos[scalarIndexSWAT].m_timeStepDates.size(); swat = &(cellScalarResults(scalarIndexSWAT));
resultGridIndex = addEmptyScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL"); }
m_cellScalarResults[resultGridIndex].resize(timeStepCount);
const std::vector< std::vector<double> >& sgas = cellScalarResults(scalarIndexSGAS); size_t scalarIndexSGAS = findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SGAS");
const std::vector< std::vector<double> >& swat = cellScalarResults(scalarIndexSWAT); if (scalarIndexSGAS != cvf::UNDEFINED_SIZE_T)
std::vector< std::vector<double> >& soil = cellScalarResults(resultGridIndex); {
sgas = &(cellScalarResults(scalarIndexSGAS));
}
size_t resultValueCount = sgas[0].size(); size_t soilResultValueCount = 0;
size_t soilTimeStepCount = 0;
if (swat)
{
soilResultValueCount = swat->at(0).size();
soilTimeStepCount = m_resultInfos[scalarIndexSWAT].m_timeStepDates.size();
}
int timeStepIdx = 0; if (sgas)
for (timeStepIdx = 0; timeStepIdx < static_cast<int>(timeStepCount); timeStepIdx++) {
{ soilResultValueCount = qMax(soilResultValueCount, sgas->at(0).size());
soil[timeStepIdx].resize(resultValueCount);
int idx = 0; size_t sgasTimeStepCount = m_resultInfos[scalarIndexSGAS].m_timeStepDates.size();
soilTimeStepCount = qMax(soilTimeStepCount, sgasTimeStepCount);
}
soilResultGridIndex = addEmptyScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL");
m_cellScalarResults[soilResultGridIndex].resize(soilTimeStepCount);
std::vector< std::vector<double> >& soil = cellScalarResults(soilResultGridIndex);
int timeStepIdx = 0;
for (timeStepIdx = 0; timeStepIdx < static_cast<int>(soilTimeStepCount); timeStepIdx++)
{
soil[timeStepIdx].resize(soilResultValueCount);
int idx = 0;
#pragma omp parallel for #pragma omp parallel for
for (idx = 0; idx < static_cast<int>(resultValueCount); idx++) for (idx = 0; idx < static_cast<int>(soilResultValueCount); idx++)
{
double soilValue = 1.0;
if (sgas)
{ {
soil[timeStepIdx][idx] = 1.0 - sgas[timeStepIdx][idx] - swat[timeStepIdx][idx]; soilValue -= sgas->at(timeStepIdx)[idx];
} }
if (swat)
{
soilValue -= swat->at(timeStepIdx)[idx];
}
soil[timeStepIdx][idx] = soilValue;
} }
} }
} }