Fix of #301 Missing riTRANS/MULTXYZ when NTG is missing

This commit is contained in:
Jacob Støren 2015-06-29 14:45:30 +02:00
parent 80d50e2676
commit e33caeab36
2 changed files with 77 additions and 41 deletions

View File

@ -810,6 +810,8 @@ void RimReservoirCellResultsStorage::computeRiTransComponent(const QString& riTr
size_t permResultIdx = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, permCompName); size_t permResultIdx = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, permCompName);
size_t ntgResultIdx = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "NTG"); size_t ntgResultIdx = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "NTG");
bool hasNTGResults = ntgResultIdx != cvf::UNDEFINED_SIZE_T;
// Get the result index of the output // Get the result index of the output
size_t riTransResultIdx = m_cellResults->findScalarResultIndex(RimDefines::STATIC_NATIVE, riTransComponentResultName); size_t riTransResultIdx = m_cellResults->findScalarResultIndex(RimDefines::STATIC_NATIVE, riTransComponentResultName);
@ -818,32 +820,49 @@ void RimReservoirCellResultsStorage::computeRiTransComponent(const QString& riTr
// Get the result count, to handle that one of them might be globally defined // Get the result count, to handle that one of them might be globally defined
size_t permxResultValueCount = m_cellResults->cellScalarResults(permResultIdx)[0].size(); size_t permxResultValueCount = m_cellResults->cellScalarResults(permResultIdx)[0].size();
size_t resultValueCount = permxResultValueCount;
if (hasNTGResults)
{
size_t ntgResultValueCount = m_cellResults->cellScalarResults(ntgResultIdx)[0].size(); size_t ntgResultValueCount = m_cellResults->cellScalarResults(ntgResultIdx)[0].size();
resultValueCount = CVF_MIN(permxResultValueCount, ntgResultValueCount);
size_t resultValueCount = CVF_MIN(permxResultValueCount, ntgResultValueCount); }
// Get all the actual result values // Get all the actual result values
std::vector<double> & permResults = m_cellResults->cellScalarResults(permResultIdx)[0]; std::vector<double> & permResults = m_cellResults->cellScalarResults(permResultIdx)[0];
std::vector<double> & ntgResults = m_cellResults->cellScalarResults(ntgResultIdx)[0];
std::vector<double> & riTransResults = m_cellResults->cellScalarResults(riTransResultIdx)[0]; std::vector<double> & riTransResults = m_cellResults->cellScalarResults(riTransResultIdx)[0];
std::vector<double> * ntgResults = NULL;
if (hasNTGResults)
{
ntgResults = &(m_cellResults->cellScalarResults(ntgResultIdx)[0]);
}
// Set up output container to correct number of results // Set up output container to correct number of results
riTransResults.resize(resultValueCount); riTransResults.resize(resultValueCount);
// Prepare how to index the result values: // Prepare how to index the result values:
ResultIndexFunction riTranIdxFunc = NULL;
ResultIndexFunction permIdxFunc = NULL;
ResultIndexFunction ntgIdxFunc = NULL;
{
bool isPermUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(permResultIdx); bool isPermUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(permResultIdx);
bool isNtgUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(ntgResultIdx);
bool isTransUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(riTransResultIdx); bool isTransUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(riTransResultIdx);
bool isNtgUsingResIdx = false;
if (hasNTGResults)
{
isNtgUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(ntgResultIdx);
}
// Set up result index function pointers // Set up result index function pointers
ResultIndexFunction riTranIdxFunc = isTransUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex; riTranIdxFunc = isTransUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex;
ResultIndexFunction permIdxFunc = isPermUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex; permIdxFunc = isPermUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex;
ResultIndexFunction ntgIdxFunc = isNtgUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex; if (hasNTGResults)
{
ntgIdxFunc = isNtgUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex;
}
}
const RigActiveCellInfo* activeCellInfo = m_cellResults->activeCellInfo(); const RigActiveCellInfo* activeCellInfo = m_cellResults->activeCellInfo();
const std::vector<cvf::Vec3d>& nodes = m_ownerMainGrid->nodes(); const std::vector<cvf::Vec3d>& nodes = m_ownerMainGrid->nodes();
@ -906,10 +925,10 @@ void RimReservoirCellResultsStorage::computeRiTransComponent(const QString& riTr
double perm = permResults[permResIdx]; double perm = permResults[permResIdx];
double ntg = 1.0; double ntg = 1.0;
if (faceId != cvf::StructGridInterface::POS_K) if (hasNTGResults && faceId != cvf::StructGridInterface::POS_K)
{ {
size_t ntgResIdx = (*ntgIdxFunc)(activeCellInfo, nativeResvCellIndex); size_t ntgResIdx = (*ntgIdxFunc)(activeCellInfo, nativeResvCellIndex);
ntg = ntgResults[ntgResIdx]; ntg = (*ntgResults)[ntgResIdx];
} }
halfCellTrans = halfCellTransmissibility(perm, ntg, centerToFace, faceAreaVec); halfCellTrans = halfCellTransmissibility(perm, ntg, centerToFace, faceAreaVec);
@ -922,10 +941,10 @@ void RimReservoirCellResultsStorage::computeRiTransComponent(const QString& riTr
double perm = permResults[neighborCellPermResIdx]; double perm = permResults[neighborCellPermResIdx];
double ntg = 1.0; double ntg = 1.0;
if (faceId != cvf::StructGridInterface::POS_K) if (hasNTGResults && faceId != cvf::StructGridInterface::POS_K)
{ {
size_t ntgResIdx = (*ntgIdxFunc)(activeCellInfo, neighborResvCellIdx); size_t ntgResIdx = (*ntgIdxFunc)(activeCellInfo, neighborResvCellIdx);
ntg = ntgResults[ntgResIdx]; ntg = (*ntgResults)[ntgResIdx];
} }
neighborHalfCellTrans = halfCellTransmissibility(perm, ntg, centerToFace, -faceAreaVec); neighborHalfCellTrans = halfCellTransmissibility(perm, ntg, centerToFace, -faceAreaVec);
@ -957,37 +976,56 @@ void RimReservoirCellResultsStorage::computeNncCombRiTrans()
size_t ntgResultIdx = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "NTG"); size_t ntgResultIdx = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "NTG");
bool hasNTGResults = ntgResultIdx != cvf::UNDEFINED_SIZE_T;
// Get the result count, to handle that one of them might be globally defined // Get the result count, to handle that one of them might be globally defined
size_t permxResultValueCount = m_cellResults->cellScalarResults(permXResultIdx)[0].size(); size_t permxResultValueCount = m_cellResults->cellScalarResults(permXResultIdx)[0].size();
size_t resultValueCount = permxResultValueCount;
if (hasNTGResults)
{
size_t ntgResultValueCount = m_cellResults->cellScalarResults(ntgResultIdx)[0].size(); size_t ntgResultValueCount = m_cellResults->cellScalarResults(ntgResultIdx)[0].size();
resultValueCount = CVF_MIN(permxResultValueCount, ntgResultValueCount);
size_t resultValueCount = CVF_MIN(permxResultValueCount, ntgResultValueCount); }
// Get all the actual result values // Get all the actual result values
std::vector<double> & permXResults = m_cellResults->cellScalarResults(permXResultIdx)[0]; std::vector<double> & permXResults = m_cellResults->cellScalarResults(permXResultIdx)[0];
std::vector<double> & permYResults = m_cellResults->cellScalarResults(permYResultIdx)[0]; std::vector<double> & permYResults = m_cellResults->cellScalarResults(permYResultIdx)[0];
std::vector<double> & permZResults = m_cellResults->cellScalarResults(permZResultIdx)[0]; std::vector<double> & permZResults = m_cellResults->cellScalarResults(permZResultIdx)[0];
std::vector<double> & ntgResults = m_cellResults->cellScalarResults(ntgResultIdx)[0];
std::vector<double> & riCombTransResults = m_ownerMainGrid->nncData()->makeConnectionScalarResult(riCombTransScalarResultIndex); std::vector<double> & riCombTransResults = m_ownerMainGrid->nncData()->makeConnectionScalarResult(riCombTransScalarResultIndex);
std::vector<double> * ntgResults = NULL;
if (hasNTGResults)
{
ntgResults = &(m_cellResults->cellScalarResults(ntgResultIdx)[0]);
}
// Prepare how to index the result values: // Prepare how to index the result values:
ResultIndexFunction permXIdxFunc = NULL;
ResultIndexFunction permYIdxFunc = NULL;
ResultIndexFunction permZIdxFunc = NULL;
ResultIndexFunction ntgIdxFunc = NULL;
{
bool isPermXUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(permXResultIdx); bool isPermXUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(permXResultIdx);
bool isPermYUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(permYResultIdx); bool isPermYUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(permYResultIdx);
bool isPermZUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(permZResultIdx); bool isPermZUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(permZResultIdx);
bool isNtgUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(ntgResultIdx); bool isNtgUsingResIdx = false;
if (hasNTGResults)
{
isNtgUsingResIdx = m_cellResults->isUsingGlobalActiveIndex(ntgResultIdx);
}
// Set up result index function pointers // Set up result index function pointers
ResultIndexFunction permXIdxFunc = isPermXUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex; permXIdxFunc = isPermXUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex;
ResultIndexFunction permYIdxFunc = isPermYUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex; permYIdxFunc = isPermYUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex;
ResultIndexFunction permZIdxFunc = isPermZUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex; permZIdxFunc = isPermZUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex;
ResultIndexFunction ntgIdxFunc = isNtgUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex; if (hasNTGResults)
{
ntgIdxFunc = isNtgUsingResIdx ? &reservoirActiveCellIndex : &directReservoirCellIndex;
}
}
const RigActiveCellInfo* activeCellInfo = m_cellResults->activeCellInfo(); const RigActiveCellInfo* activeCellInfo = m_cellResults->activeCellInfo();
const std::vector<cvf::Vec3d>& nodes = m_ownerMainGrid->nodes(); const std::vector<cvf::Vec3d>& nodes = m_ownerMainGrid->nodes();
@ -1068,10 +1106,10 @@ void RimReservoirCellResultsStorage::computeNncCombRiTrans()
double perm = (*permResults)[nativeCellPermResIdx]; double perm = (*permResults)[nativeCellPermResIdx];
double ntg = 1.0; double ntg = 1.0;
if (faceId != cvf::StructGridInterface::POS_K) if (hasNTGResults && faceId != cvf::StructGridInterface::POS_K)
{ {
size_t ntgResIdx = (*ntgIdxFunc)(activeCellInfo, nativeResvCellIndex); size_t ntgResIdx = (*ntgIdxFunc)(activeCellInfo, nativeResvCellIndex);
ntg = ntgResults[ntgResIdx]; ntg = (*ntgResults)[ntgResIdx];
} }
halfCellTrans = halfCellTransmissibility(perm, ntg, centerToFace, faceAreaVec); halfCellTrans = halfCellTransmissibility(perm, ntg, centerToFace, faceAreaVec);
@ -1084,10 +1122,10 @@ void RimReservoirCellResultsStorage::computeNncCombRiTrans()
double perm = (*permResults)[neighborCellPermResIdx]; double perm = (*permResults)[neighborCellPermResIdx];
double ntg = 1.0; double ntg = 1.0;
if (faceId != cvf::StructGridInterface::POS_K) if (hasNTGResults && faceId != cvf::StructGridInterface::POS_K)
{ {
size_t ntgResIdx = (*ntgIdxFunc)(activeCellInfo, neighborResvCellIdx); size_t ntgResIdx = (*ntgIdxFunc)(activeCellInfo, neighborResvCellIdx);
ntg = ntgResults[ntgResIdx]; ntg = (*ntgResults)[ntgResIdx];
} }
neighborHalfCellTrans = halfCellTransmissibility(perm, ntg, centerToFace, -faceAreaVec); neighborHalfCellTrans = halfCellTransmissibility(perm, ntg, centerToFace, -faceAreaVec);

View File

@ -554,9 +554,7 @@ void RigCaseCellResultsData::createPlaceholderResultEntries()
// riTRANSXYZ and X,Y,Z // riTRANSXYZ and X,Y,Z
{ {
size_t ntgResIdx = findScalarResultIndex(RimDefines::STATIC_NATIVE, "NTG"); if ( findScalarResultIndex(RimDefines::STATIC_NATIVE, "PERMX") != cvf::UNDEFINED_SIZE_T
if ( findScalarResultIndex(RimDefines::STATIC_NATIVE, "NTG") != cvf::UNDEFINED_SIZE_T
&& findScalarResultIndex(RimDefines::STATIC_NATIVE, "PERMX") != cvf::UNDEFINED_SIZE_T
&& findScalarResultIndex(RimDefines::STATIC_NATIVE, "PERMY") != cvf::UNDEFINED_SIZE_T && findScalarResultIndex(RimDefines::STATIC_NATIVE, "PERMY") != cvf::UNDEFINED_SIZE_T
&& findScalarResultIndex(RimDefines::STATIC_NATIVE, "PERMZ") != cvf::UNDEFINED_SIZE_T) && findScalarResultIndex(RimDefines::STATIC_NATIVE, "PERMZ") != cvf::UNDEFINED_SIZE_T)
{ {