//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RIApplication::openEclipseCase(const QString& caseName, const QString& caseFileName) { QFileInfo gridFileName(caseFileName); QString casePath = gridFileName.absolutePath(); RimResultReservoir* rimResultReservoir = new RimResultReservoir(); rimResultReservoir->caseName = caseName; rimResultReservoir->caseFileName = caseFileName; rimResultReservoir->caseDirectory = casePath; m_project->reservoirs.push_back(rimResultReservoir); RimReservoirView* riv = rimResultReservoir->createAndAddReservoirView(); if (m_preferences->autocomputeSOIL) { // Select SOIL as default result variable riv->cellResult()->resultType = RimDefines::DYNAMIC_NATIVE; riv->cellResult()->resultVariable = "SOIL"; riv->animationMode = true; } riv->loadDataAndUpdate(); if (!riv->cellResult()->hasResult()) { riv->cellResult()->resultVariable = RimDefines::undefinedResultName(); } onProjectOpenedOrClosed(); return true; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimReservoir::initAfterRead() { size_t j; for (j = 0; j < reservoirViews().size(); j++) { RimReservoirView* riv = reservoirViews()[j]; CVF_ASSERT(riv); riv->setEclipseCase(this); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimReservoirView* RimReservoir::createAndAddReservoirView() { RimReservoirView* riv = new RimReservoirView(); riv->setEclipseCase(this); size_t i = reservoirViews().size(); riv->name = QString("View %1").arg(i + 1); reservoirViews().push_back(riv); return riv; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimReservoirView* RimCase::createAndAddReservoirView() { RimReservoirView* riv = new RimReservoirView(); riv->setEclipseCase(this); caf::PdmDocument::updateUiIconStateRecursively(riv); size_t i = reservoirViews().size(); riv->name = QString("View %1").arg(i + 1); reservoirViews().push_back(riv); return riv; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RIApplication::loadProject(const QString& projectFileName) { if (!closeProject(true)) return false; if (!QFile::exists(projectFileName)) return false; m_project->fileName = projectFileName; m_project->readFile(); if (m_project->projectFileVersionString().isEmpty()) { closeProject(false); QString tmp = QString("Unknown project file version detected in file \n%1\n\nCould not open project.").arg(projectFileName); QMessageBox::warning(NULL, "Error when opening project file", tmp); RIMainWindow* mainWnd = RIMainWindow::instance(); mainWnd->setPdmRoot(NULL); // Delete all object possibly generated by readFile() delete m_project; m_project = new RimProject; } else { m_preferences->lastUsedProjectFileName = projectFileName; writePreferences(); size_t i; for (i = 0; i < m_project->reservoirs().size(); ++i) { RimReservoir* ri = m_project->reservoirs()[i]; CVF_ASSERT(ri); size_t j; for (j = 0; j < ri->reservoirViews().size(); j++) { RimReservoirView* riv = ri->reservoirViews()[j]; CVF_ASSERT(riv); riv->loadDataAndUpdate(); } } } onProjectOpenedOrClosed(); return true; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimCase::initAfterRead() { size_t j; for (j = 0; j < reservoirViews().size(); j++) { RimReservoirView* riv = reservoirViews()[j]; CVF_ASSERT(riv); riv->setEclipseCase(this); } if (caseUserDescription().isEmpty() && !caseName().isEmpty()) { caseUserDescription = caseName; } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimReservoir::removeResult(const QString& resultName) { size_t i; for (i = 0; i < reservoirViews().size(); i++) { RimReservoirView* reservoirView = reservoirViews()[i]; CVF_ASSERT(reservoirView); RimResultSlot* result = reservoirView->cellResult; CVF_ASSERT(result); bool rebuildDisplayModel = false; // Set cell result variable to none if displaying if (result->resultVariable() == resultName) { result->resultVariable.v() = RimDefines::undefinedResultName(); result->loadResult(); rebuildDisplayModel = true; } std::list< caf::PdmPointer< RimCellPropertyFilter > >::iterator it; RimCellPropertyFilterCollection* propFilterCollection = reservoirView->propertyFilterCollection(); for (it = propFilterCollection->propertyFilters.v().begin(); it != propFilterCollection->propertyFilters.v().end(); ++it) { RimCellPropertyFilter* propertyFilter = *it; if (propertyFilter->resultDefinition->resultVariable.v() == resultName) { propertyFilter->resultDefinition->resultVariable.v() = RimDefines::undefinedResultName(); propertyFilter->resultDefinition->loadResult(); propertyFilter->setDefaultValues(); rebuildDisplayModel = true; } } if (rebuildDisplayModel) { reservoirViews()[i]->createDisplayModelAndRedraw(); } // TODO // CellEdgeResults are not considered, as they do not support display of input properties yet } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RimUiTreeModelPdm::deleteReservoirView(const QModelIndex& itemIndex) { CVF_ASSERT(itemIndex.isValid()); caf::PdmUiTreeItem* uiItem = getTreeItemFromIndex(itemIndex); CVF_ASSERT(uiItem); RimReservoirView* reservoirView = dynamic_cast<RimReservoirView*>(uiItem->dataObject().p()); CVF_ASSERT(reservoirView); // Remove Ui items pointing at the pdm object to delete removeRow(itemIndex.row(), itemIndex.parent()); reservoirView->eclipseCase()->removeReservoirView(reservoirView); delete reservoirView; return true; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimReservoir::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { if (changedField == &releaseResultMemory) { if (m_rigReservoir.notNull()) { for (size_t i = 0; i < reservoirViews().size(); i++) { RimReservoirView* reservoirView = reservoirViews()[i]; CVF_ASSERT(reservoirView); RimResultSlot* result = reservoirView->cellResult; CVF_ASSERT(result); result->resultVariable.v() = RimDefines::undefinedResultName(); result->loadResult(); RimCellEdgeResultSlot* cellEdgeResult = reservoirView->cellEdgeResult; CVF_ASSERT(cellEdgeResult); cellEdgeResult->resultVariable.v() = RimDefines::undefinedResultName(); cellEdgeResult->loadResult(); reservoirView->createDisplayModelAndRedraw(); } RigReservoirCellResults* matrixModelResults = m_rigReservoir->mainGrid()->results(RifReaderInterface::MATRIX_RESULTS); if (matrixModelResults) { matrixModelResults->clearAllResults(); } RigReservoirCellResults* fractureModelResults = m_rigReservoir->mainGrid()->results(RifReaderInterface::FRACTURE_RESULTS); if (fractureModelResults) { fractureModelResults->clearAllResults(); } } releaseResultMemory = oldValue.toBool(); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RIApplication::openInputEclipseCase(const QString& caseName, const QStringList& caseFileNames) { RimInputReservoir* rimInputReservoir = new RimInputReservoir(); rimInputReservoir->caseName = caseName; rimInputReservoir->openDataFileSet(caseFileNames); m_project->reservoirs.push_back(rimInputReservoir); RimReservoirView* riv = rimInputReservoir->createAndAddReservoirView(); riv->cellResult()->resultType = RimDefines::INPUT_PROPERTY; riv->animationMode = true; riv->loadDataAndUpdate(); if (!riv->cellResult()->hasResult()) { riv->cellResult()->resultVariable = RimDefines::undefinedResultName(); } onProjectOpenedOrClosed(); return true; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimReservoirView* RimUiTreeModelPdm::addReservoirView(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex) { caf::PdmUiTreeItem* currentItem = getTreeItemFromIndex(itemIndex); if (!currentItem) return NULL; RimReservoirView* reservoirView = dynamic_cast<RimReservoirView*>(currentItem->dataObject().p()); if (!reservoirView) return NULL; RimReservoirView* insertedView = reservoirView->eclipseCase()->createAndAddReservoirView(); caf::PdmUiTreeItem* collectionItem = currentItem->parent(); size_t viewCount = rowCount(itemIndex.parent()); beginInsertRows(itemIndex.parent(), viewCount, viewCount); caf::PdmUiTreeItem* childItem = new caf::PdmUiTreeItem(collectionItem, viewCount, insertedView); endInsertRows(); insertedView->loadDataAndUpdate(); rebuildUiSubTree(insertedView); return insertedView; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimCase::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { if (changedField == &releaseResultMemory) { if (this->reservoirData()) { for (size_t i = 0; i < reservoirViews().size(); i++) { RimReservoirView* reservoirView = reservoirViews()[i]; CVF_ASSERT(reservoirView); RimResultSlot* result = reservoirView->cellResult; CVF_ASSERT(result); result->setResultVariable(RimDefines::undefinedResultName()); result->loadResult(); RimCellEdgeResultSlot* cellEdgeResult = reservoirView->cellEdgeResult; CVF_ASSERT(cellEdgeResult); cellEdgeResult->resultVariable.v() = RimDefines::undefinedResultName(); cellEdgeResult->loadResult(); reservoirView->createDisplayModelAndRedraw(); } RigCaseCellResultsData* matrixModelResults = reservoirData()->results(RifReaderInterface::MATRIX_RESULTS); if (matrixModelResults) { matrixModelResults->clearAllResults(); } RigCaseCellResultsData* fractureModelResults = reservoirData()->results(RifReaderInterface::FRACTURE_RESULTS); if (fractureModelResults) { fractureModelResults->clearAllResults(); } } releaseResultMemory = oldValue.toBool(); } else if (changedField == &flipXAxis || changedField == &flipYAxis) { RigCaseData* rigEclipseCase = reservoirData(); if (rigEclipseCase) { rigEclipseCase->mainGrid()->setFlipAxis(flipXAxis, flipYAxis); computeCachedData(); for (size_t i = 0; i < reservoirViews().size(); i++) { RimReservoirView* reservoirView = reservoirViews()[i]; reservoirView->scheduleReservoirGridGeometryRegen(); reservoirView->schedulePipeGeometryRegen(); reservoirView->createDisplayModelAndRedraw(); } } } }