From f29d3c2876261e693f5d3ddb0567026f4a4042df Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 21 Aug 2014 12:06:18 +0200 Subject: [PATCH] Result Info: Write out result values for fault in addition to grid --- .../ProjectDataModel/RimReservoirView.cpp | 206 ++++++++++-------- .../ProjectDataModel/RimReservoirView.h | 3 +- 2 files changed, 119 insertions(+), 90 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimReservoirView.cpp b/ApplicationCode/ProjectDataModel/RimReservoirView.cpp index 6f6b6bd678..3b1c29816a 100644 --- a/ApplicationCode/ProjectDataModel/RimReservoirView.cpp +++ b/ApplicationCode/ProjectDataModel/RimReservoirView.cpp @@ -1089,94 +1089,22 @@ void RimReservoirView::appendCellResultInfo(size_t gridIndex, size_t cellIndex, RigCaseData* eclipseCase = m_reservoir->reservoirData(); RigGridBase* grid = eclipseCase->grid(gridIndex); - RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(cellResult()->porosityModel()); - cvf::ref resultAccessor; + appendTextFromResultSlot(eclipseCase, gridIndex, cellIndex, this->m_currentTimeStep, this->cellResult(), resultInfoText); - if (this->cellResult()->isTernarySaturationSelected()) + // Fault text data + if (grid->isMainGrid()) { - RimReservoirCellResultsStorage* gridCellResults = this->cellResult()->currentGridCellResults(); - if (gridCellResults) + RigMainGrid* mainGrid = grid->mainGrid(); + + const RigFault* fault = mainGrid->findFaultFromCellIndexAndCellFace(cellIndex, face); + if (fault) { - size_t soilScalarSetIndex = gridCellResults->findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL"); - size_t sgasScalarSetIndex = gridCellResults->findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SGAS"); - size_t swatScalarSetIndex = gridCellResults->findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SWAT"); - - cvf::ref dataAccessObjectX = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, m_currentTimeStep, soilScalarSetIndex); - cvf::ref dataAccessObjectY = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, m_currentTimeStep, sgasScalarSetIndex); - cvf::ref dataAccessObjectZ = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, m_currentTimeStep, swatScalarSetIndex); - - double scalarValue = 0.0; - - if (dataAccessObjectX.notNull()) scalarValue = dataAccessObjectX->cellScalar(cellIndex); - else scalarValue = 0.0; - resultInfoText->append(QString("SOIL : %1\n").arg(scalarValue)); - - if (dataAccessObjectY.notNull()) scalarValue = dataAccessObjectY->cellScalar(cellIndex); - else scalarValue = 0.0; - resultInfoText->append(QString("SGAS : %1\n").arg(scalarValue)); - - if (dataAccessObjectZ.notNull()) scalarValue = dataAccessObjectZ->cellScalar(cellIndex); - else scalarValue = 0.0; - resultInfoText->append(QString("SWAT : %1\n").arg(scalarValue)); - } - } - else if (this->cellResult()->hasResult()) - { - RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(cellResult()->porosityModel()); - cvf::ref resultAccessor; - - if (cellResult->hasStaticResult()) - { - if (this->cellResult()->resultVariable().compare(RimDefines::combinedTransmissibilityResultName(), Qt::CaseInsensitive) == 0) + resultInfoText->append(QString("\nFault Name: %1\n").arg(fault->name())); + if (this->faultResultSettings()->customFaultResult()) { - cvf::ref transResultAccessor = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, 0, RimDefines::combinedTransmissibilityResultName()); - { - double scalarValue = transResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_I); - resultInfoText->append(QString("Tran X : %1\n").arg(scalarValue)); - - scalarValue = transResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_J); - resultInfoText->append(QString("Tran Y : %1\n").arg(scalarValue)); - - scalarValue = transResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_K); - resultInfoText->append(QString("Tran Z : %1\n").arg(scalarValue)); - } + resultInfoText->push_back("Fault result data:\n"); + appendTextFromResultSlot(eclipseCase, gridIndex, cellIndex, this->m_currentTimeStep, this->faultResultSettings()->customFaultResult(), resultInfoText); } - else if (this->cellResult()->resultVariable().compare(RimDefines::combinedMultResultName(), Qt::CaseInsensitive) == 0) - { - cvf::ref multResultAccessor = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, 0, RimDefines::combinedMultResultName()); - { - double scalarValue = 0.0; - - scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_I); - resultInfoText->append(QString("MULTX : %1\n").arg(scalarValue)); - scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::NEG_I); - resultInfoText->append(QString("MULTX- : %1\n").arg(scalarValue)); - - scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_J); - resultInfoText->append(QString("MULTY : %1\n").arg(scalarValue)); - scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::NEG_J); - resultInfoText->append(QString("MULTY- : %1\n").arg(scalarValue)); - - scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_K); - resultInfoText->append(QString("MULTZ : %1\n").arg(scalarValue)); - scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::NEG_K); - resultInfoText->append(QString("MULTZ- : %1\n").arg(scalarValue)); - } - } - else - { - resultAccessor = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, 0, this->cellResult()->gridScalarIndex()); - } - } - else - { - resultAccessor = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, m_currentTimeStep, this->cellResult()->gridScalarIndex()); - } - - if (resultAccessor.notNull()) - { - double scalarValue = resultAccessor->cellScalar(cellIndex); - resultInfoText->append(QString("Cell result : %1\n").arg(scalarValue)); } } @@ -1187,13 +1115,14 @@ void RimReservoirView::appendCellResultInfo(size_t gridIndex, size_t cellIndex, this->cellEdgeResult()->gridScalarIndices(resultIndices); this->cellEdgeResult()->gridScalarResultNames(&resultNames); + resultInfoText->push_back("\nCell edge result data:\n"); for (int idx = 0; idx < 6; idx++) { if (resultIndices[idx] == cvf::UNDEFINED_SIZE_T) continue; // Cell edge results are static, results are loaded for first time step only RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(cellResult()->porosityModel()); - resultAccessor = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, 0, resultIndices[idx]); + cvf::ref resultAccessor = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, 0, resultIndices[idx]); if (resultAccessor.notNull()) { double scalarValue = resultAccessor->cellScalar(cellIndex); @@ -1219,8 +1148,6 @@ void RimReservoirView::appendCellResultInfo(size_t gridIndex, size_t cellIndex, resultInfoText->append(QString("Well-cell connection info: Well Name: %1 Branch Id: %2 Segment Id: %3\n").arg(singleWellResultData->m_wellName).arg(wellResultCell->m_ertBranchId).arg(wellResultCell->m_ertSegmentId)); } } - - appendFaultName(grid, cellIndex, face, resultInfoText); } } @@ -1914,7 +1841,7 @@ void RimReservoirView::appendNNCResultInfo(size_t nncIndex, QString* resultInfo) QString gridName = QString::fromStdString(hostGrid->gridName()); resultInfo->append(QString("NNC 1 : cell [%1, %2, %3] face %4 (%5)\n").arg(i).arg(j).arg(k).arg(face.text()).arg(gridName)); - appendFaultName(hostGrid, conn.m_c1GlobIdx, conn.m_c1Face, &faultName); + appendTextFromFault(hostGrid, conn.m_c1GlobIdx, conn.m_c1Face, &faultName); } } @@ -1941,7 +1868,7 @@ void RimReservoirView::appendNNCResultInfo(size_t nncIndex, QString* resultInfo) if (faultName.isEmpty()) { - appendFaultName(hostGrid, conn.m_c2GlobIdx, cvf::StructGridInterface::oppositeFace(conn.m_c1Face), &faultName); + appendTextFromFault(hostGrid, conn.m_c2GlobIdx, cvf::StructGridInterface::oppositeFace(conn.m_c1Face), &faultName); } } } @@ -2081,7 +2008,7 @@ void RimReservoirView::updateFaultColors() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimReservoirView::appendFaultName(RigGridBase* grid, size_t cellIndex, cvf::StructGridInterface::FaceType face, QString* textString) +void RimReservoirView::appendTextFromFault(RigGridBase* grid, size_t cellIndex, cvf::StructGridInterface::FaceType face, QString* textString) { if (grid->isMainGrid()) { @@ -2118,3 +2045,104 @@ bool RimReservoirView::isTimeStepDependentDataVisible() const return false; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimReservoirView::appendTextFromResultSlot(RigCaseData* eclipseCase, size_t gridIndex, size_t cellIndex, size_t timeStepIndex, RimResultSlot* resultSlot, QString* resultInfoText) +{ + if (!resultSlot) + { + return; + } + + RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(resultSlot->porosityModel()); + if (resultSlot->isTernarySaturationSelected()) + { + RimReservoirCellResultsStorage* gridCellResults = resultSlot->currentGridCellResults(); + if (gridCellResults) + { + size_t soilScalarSetIndex = gridCellResults->findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL"); + size_t sgasScalarSetIndex = gridCellResults->findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SGAS"); + size_t swatScalarSetIndex = gridCellResults->findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SWAT"); + + cvf::ref dataAccessObjectX = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, soilScalarSetIndex); + cvf::ref dataAccessObjectY = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, sgasScalarSetIndex); + cvf::ref dataAccessObjectZ = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, swatScalarSetIndex); + + double scalarValue = 0.0; + + if (dataAccessObjectX.notNull()) scalarValue = dataAccessObjectX->cellScalar(cellIndex); + else scalarValue = 0.0; + resultInfoText->append(QString("SOIL : %1\n").arg(scalarValue)); + + if (dataAccessObjectY.notNull()) scalarValue = dataAccessObjectY->cellScalar(cellIndex); + else scalarValue = 0.0; + resultInfoText->append(QString("SGAS : %1\n").arg(scalarValue)); + + if (dataAccessObjectZ.notNull()) scalarValue = dataAccessObjectZ->cellScalar(cellIndex); + else scalarValue = 0.0; + resultInfoText->append(QString("SWAT : %1\n").arg(scalarValue)); + } + } + else if (resultSlot->hasResult()) + { + RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(resultSlot->porosityModel()); + cvf::ref resultAccessor; + + if (resultSlot->hasStaticResult()) + { + if (resultSlot->resultVariable().compare(RimDefines::combinedTransmissibilityResultName(), Qt::CaseInsensitive) == 0) + { + cvf::ref transResultAccessor = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, 0, RimDefines::combinedTransmissibilityResultName()); + { + double scalarValue = transResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_I); + resultInfoText->append(QString("Tran X : %1\n").arg(scalarValue)); + + scalarValue = transResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_J); + resultInfoText->append(QString("Tran Y : %1\n").arg(scalarValue)); + + scalarValue = transResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_K); + resultInfoText->append(QString("Tran Z : %1\n").arg(scalarValue)); + } + } + else if (resultSlot->resultVariable().compare(RimDefines::combinedMultResultName(), Qt::CaseInsensitive) == 0) + { + cvf::ref multResultAccessor = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, 0, RimDefines::combinedMultResultName()); + { + double scalarValue = 0.0; + + scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_I); + resultInfoText->append(QString("MULTX : %1\n").arg(scalarValue)); + scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::NEG_I); + resultInfoText->append(QString("MULTX- : %1\n").arg(scalarValue)); + + scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_J); + resultInfoText->append(QString("MULTY : %1\n").arg(scalarValue)); + scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::NEG_J); + resultInfoText->append(QString("MULTY- : %1\n").arg(scalarValue)); + + scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::POS_K); + resultInfoText->append(QString("MULTZ : %1\n").arg(scalarValue)); + scalarValue = multResultAccessor->cellFaceScalar(cellIndex, cvf::StructGridInterface::NEG_K); + resultInfoText->append(QString("MULTZ- : %1\n").arg(scalarValue)); + } + } + else + { + resultAccessor = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, 0, resultSlot->gridScalarIndex()); + } + } + else + { + resultAccessor = RigResultAccessorFactory::createResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, resultSlot->gridScalarIndex()); + } + + if (resultAccessor.notNull()) + { + double scalarValue = resultAccessor->cellScalar(cellIndex); + resultInfoText->append(resultSlot->resultVariable()); + resultInfoText->append(QString(" : %1\n").arg(scalarValue)); + } + } +} + diff --git a/ApplicationCode/ProjectDataModel/RimReservoirView.h b/ApplicationCode/ProjectDataModel/RimReservoirView.h index 36568bc8f0..261df2cbad 100644 --- a/ApplicationCode/ProjectDataModel/RimReservoirView.h +++ b/ApplicationCode/ProjectDataModel/RimReservoirView.h @@ -162,6 +162,7 @@ public: bool pickInfo(size_t gridIndex, size_t cellIndex, cvf::StructGridInterface::FaceType face, const cvf::Vec3d& point, QString* pickInfoText) const; void appendCellResultInfo(size_t gridIndex, size_t cellIndex, cvf::StructGridInterface::FaceType face, QString* resultInfoText) ; void appendNNCResultInfo(size_t nncIndex, QString* resultInfo); + static void appendTextFromResultSlot(RigCaseData* eclipseCase, size_t gridIndex, size_t cellIndex, size_t timeStepIndex, RimResultSlot* resultSlot, QString* resultInfoText); // Does this belong here, really ? void calculateVisibleWellCellsIncFence(cvf::UByteArray* visibleCells, RigGridBase * grid); @@ -184,7 +185,7 @@ public: // Display model generation private: - void appendFaultName(RigGridBase* grid, size_t cellIndex, cvf::StructGridInterface::FaceType face, QString* textString); + void appendTextFromFault(RigGridBase* grid, size_t cellIndex, cvf::StructGridInterface::FaceType face, QString* textString); void createDisplayModel(); void updateDisplayModelVisibility();