mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1157 - pre-proto - Updating how the eclipseCase is handled for transmissibility calculation. Should now avoid segfault when calculating transmissibilities for well path fractures.
This commit is contained in:
parent
3e65bcfa88
commit
30304a5f8a
@ -42,6 +42,7 @@
|
||||
#include <QAction>
|
||||
#include <QMessageBox>
|
||||
#include <QString>
|
||||
#include <QFileInfo>
|
||||
|
||||
CAF_CMD_SOURCE_INIT(RicExportSelectedSimWellFractureWellCompletionFeature, "RicExportSelectedSimWellFractureWellCompletionFeature");
|
||||
|
||||
@ -87,13 +88,21 @@ void RicExportSelectedSimWellFractureWellCompletionFeature::onActionTriggered(bo
|
||||
projectFolder = eclipseWiew->eclipseCase()->locationOnDisc();
|
||||
}
|
||||
|
||||
QString outputFileName = projectFolder + "/Fractures";
|
||||
QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("FRACTURE_EXPORT_DIR", projectFolder);
|
||||
|
||||
QString outputFileName = defaultDir + "/Fractures";
|
||||
exportSettings.fileName = outputFileName;
|
||||
|
||||
RimEclipseCase* caseToApply;
|
||||
objHandle->firstAncestorOrThisOfType(caseToApply);
|
||||
exportSettings.caseToApply = caseToApply;
|
||||
|
||||
caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", "");
|
||||
if (propertyDialog.exec() == QDialog::Accepted)
|
||||
{
|
||||
bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures);
|
||||
RiaApplication::instance()->setLastUsedDialogDirectory("FRACTURE_EXPORT_DIR", QFileInfo(exportSettings.fileName).absolutePath());
|
||||
|
||||
bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures, exportSettings.caseToApply);
|
||||
|
||||
if (!isOk)
|
||||
{
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include <QAction>
|
||||
#include <QMessageBox>
|
||||
#include <QString>
|
||||
#include <QFileInfo>
|
||||
|
||||
CAF_CMD_SOURCE_INIT(RicExportSimWellFractureWellCompletionFeature, "RicExportSimWellFractureWellCompletionFeature");
|
||||
|
||||
@ -73,13 +74,24 @@ void RicExportSimWellFractureWellCompletionFeature::onActionTriggered(bool isChe
|
||||
projectFolder = eclipseWiew->eclipseCase()->locationOnDisc();
|
||||
}
|
||||
|
||||
QString outputFileName = projectFolder + "/Fractures";
|
||||
QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("FRACTURE_EXPORT_DIR", projectFolder);
|
||||
|
||||
|
||||
QString outputFileName = defaultDir + "/Fractures";
|
||||
exportSettings.fileName = outputFileName;
|
||||
|
||||
RimEclipseCase* caseToApply;
|
||||
objHandle->firstAncestorOrThisOfType(caseToApply);
|
||||
exportSettings.caseToApply = caseToApply;
|
||||
|
||||
caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", "");
|
||||
propertyDialog.resize(QSize(400, 200));
|
||||
|
||||
if (propertyDialog.exec() == QDialog::Accepted)
|
||||
{
|
||||
bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures);
|
||||
RiaApplication::instance()->setLastUsedDialogDirectory("FRACTURE_EXPORT_DIR", QFileInfo(exportSettings.fileName).absolutePath());
|
||||
|
||||
bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures, exportSettings.caseToApply);
|
||||
|
||||
if (!isOk)
|
||||
{
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include <QAction>
|
||||
#include <QMessageBox>
|
||||
#include <QString>
|
||||
#include <QFileInfo>
|
||||
|
||||
CAF_CMD_SOURCE_INIT(RicExportWellPathFractureWellCompletionFeature, "RicExportWellPathFractureWellCompletionFeature");
|
||||
|
||||
@ -65,6 +66,13 @@ void RicExportWellPathFractureWellCompletionFeature::onActionTriggered(bool isCh
|
||||
|
||||
RiaApplication* app = RiaApplication::instance();
|
||||
QString projectFolder = app->currentProjectPath();
|
||||
|
||||
RimView* view = app->activeReservoirView();
|
||||
objHandle = dynamic_cast<caf::PdmObjectHandle*>(view);
|
||||
if (!objHandle) return;
|
||||
RimEclipseCase* caseToApply;
|
||||
objHandle->firstAncestorOrThisOfType(caseToApply);
|
||||
exportSettings.caseToApply = caseToApply;
|
||||
|
||||
if (projectFolder.isEmpty())
|
||||
{
|
||||
@ -74,14 +82,18 @@ void RicExportWellPathFractureWellCompletionFeature::onActionTriggered(bool isCh
|
||||
if (!activeRiv) return;
|
||||
projectFolder = activeRiv->eclipseCase()->locationOnDisc();
|
||||
}
|
||||
|
||||
QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("FRACTURE_EXPORT_DIR", projectFolder);
|
||||
|
||||
QString outputFileName = projectFolder + "/Fractures";
|
||||
QString outputFileName = defaultDir + "/Fractures";
|
||||
exportSettings.fileName = outputFileName;
|
||||
|
||||
caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Fracture Well Completion Data", "");
|
||||
if (propertyDialog.exec() == QDialog::Accepted)
|
||||
{
|
||||
bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures);
|
||||
RiaApplication::instance()->setLastUsedDialogDirectory("FRACTURE_EXPORT_DIR", QFileInfo(exportSettings.fileName).absolutePath());
|
||||
|
||||
bool isOk = RifEclipseExportTools::writeFracturesToTextFile(exportSettings.fileName, fractures, exportSettings.caseToApply);
|
||||
|
||||
if (!isOk)
|
||||
{
|
||||
@ -89,7 +101,6 @@ void RicExportWellPathFractureWellCompletionFeature::onActionTriggered(bool isCh
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "RigFracture.h"
|
||||
#include "RigMainGrid.h"
|
||||
|
||||
#include "RimEclipseCase.h"
|
||||
#include "RimEclipseResultDefinition.h"
|
||||
#include "RimEclipseView.h"
|
||||
#include "RimEclipseWell.h"
|
||||
@ -58,7 +59,7 @@ RifEclipseExportTools::~RifEclipseExportTools()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, const std::vector< RimFracture*>& fractures)
|
||||
bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, const std::vector< RimFracture*>& fractures, RimEclipseCase* caseToApply)
|
||||
{
|
||||
RiaApplication* app = RiaApplication::instance();
|
||||
RimView* activeView = RiaApplication::instance()->activeReservoirView();
|
||||
@ -94,7 +95,7 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, c
|
||||
|
||||
for (RimFracture* fracture : fractures)
|
||||
{
|
||||
fracture->computeTransmissibility();
|
||||
fracture->computeTransmissibility(caseToApply);
|
||||
std::vector<RigFractureData> fracDataVector = fracture->attachedRigFracture()->fractureData();
|
||||
|
||||
for (RigFractureData fracData : fracDataVector)
|
||||
@ -108,7 +109,7 @@ bool RifEclipseExportTools::writeFracturesToTextFile(const QString& fileName, c
|
||||
out << "COMPDAT" << "\n" << right << qSetFieldWidth(8);
|
||||
for (RimFracture* fracture : fractures)
|
||||
{
|
||||
fracture->computeTransmissibility();
|
||||
fracture->computeTransmissibility(caseToApply);
|
||||
std::vector<RigFractureData> fracDataVector = fracture->attachedRigFracture()->fractureData();
|
||||
|
||||
for (RigFractureData fracData : fracDataVector)
|
||||
|
@ -28,16 +28,15 @@
|
||||
#include <QString>
|
||||
|
||||
|
||||
class RimFracture;
|
||||
class QFile;
|
||||
class QTextStream;
|
||||
class RimWellPath;
|
||||
class RigFractureData;
|
||||
class RigMainGrid;
|
||||
class RimEclipseCase;
|
||||
class RimEclipseWell;
|
||||
class RimFracture;
|
||||
class RigMainGrid;
|
||||
class RigFractureData;
|
||||
|
||||
|
||||
class RimFracture;
|
||||
class RimWellPath;
|
||||
|
||||
//==================================================================================================
|
||||
//
|
||||
@ -50,7 +49,7 @@ public:
|
||||
RifEclipseExportTools();
|
||||
virtual ~RifEclipseExportTools();
|
||||
|
||||
static bool writeFracturesToTextFile(const QString& fileName, const std::vector<RimFracture*>& fractures);
|
||||
static bool writeFracturesToTextFile(const QString& fileName, const std::vector<RimFracture*>& fractures, RimEclipseCase* caseToApply);
|
||||
|
||||
static void printCOMPDATvalues(QTextStream & out, RigFractureData &fracData, RimFracture* fracture, RimWellPath* wellPath, RimEclipseWell* simWell, const RigMainGrid* mainGrid);
|
||||
|
||||
|
@ -261,21 +261,12 @@ cvf::Mat4f RimFracture::transformMatrix()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimFracture::computeTransmissibility()
|
||||
void RimFracture::computeTransmissibility(RimEclipseCase* caseToApply)
|
||||
{
|
||||
RiaApplication* app = RiaApplication::instance();
|
||||
RimView* activeView = RiaApplication::instance()->activeReservoirView();
|
||||
RimEclipseView* activeRiv = dynamic_cast<RimEclipseView*>(activeView);
|
||||
RigEclipseCaseData* eclipseCaseData = caseToApply->reservoirData();
|
||||
|
||||
caf::PdmObjectHandle* objHandle = dynamic_cast<caf::PdmObjectHandle*>(this);
|
||||
if (!objHandle) return;
|
||||
RimEclipseCase* eclipseCase;
|
||||
objHandle->firstAncestorOrThisOfType(eclipseCase);
|
||||
RigEclipseCaseData* eclipseCaseData = eclipseCase->reservoirData();
|
||||
RimEclipseCellColors* resultColors = activeRiv->cellResult();
|
||||
|
||||
RimReservoirCellResultsStorage* gridCellResults = resultColors->currentGridCellResults();
|
||||
RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(resultColors->porosityModel());
|
||||
RifReaderInterface::PorosityModelResultType porosityModel = RifReaderInterface::MATRIX_RESULTS;
|
||||
RimReservoirCellResultsStorage* gridCellResults = caseToApply->results(porosityModel);
|
||||
|
||||
size_t scalarSetIndex;
|
||||
scalarSetIndex = gridCellResults->findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "DX");
|
||||
@ -304,11 +295,6 @@ void RimFracture::computeTransmissibility()
|
||||
|
||||
for (size_t fracCell : fracCells)
|
||||
{
|
||||
//TODO: Remove - only for simplifying debugging...
|
||||
const RigMainGrid* mainGrid = activeRiv->mainGrid();
|
||||
size_t i, j, k;
|
||||
mainGrid->ijkFromCellIndex(fracCell, &i, &j, &k);
|
||||
|
||||
bool cellIsActive = activeCellInfo->isActive(fracCell);
|
||||
|
||||
double permX = dataAccessObjectPermX->cellScalarGlobIdx(fracCell);
|
||||
|
@ -36,6 +36,7 @@
|
||||
class RigFracture;
|
||||
class RimEllipseFractureTemplate;
|
||||
class RivWellFracturePartMgr;
|
||||
class RimEclipseCase;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
@ -74,7 +75,7 @@ public:
|
||||
|
||||
|
||||
std::vector<size_t> getPotentiallyFracturedCells();
|
||||
void computeTransmissibility();
|
||||
void computeTransmissibility(RimEclipseCase* caseToApply);
|
||||
|
||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||
virtual caf::PdmFieldHandle* userDescriptionField() override;
|
||||
|
@ -19,6 +19,9 @@
|
||||
#include "RimFractureExportSettings.h"
|
||||
|
||||
#include "cafPdmUiFilePathEditor.h"
|
||||
#include "cafPdmPtrField.h"
|
||||
#include "RimEclipseCase.h"
|
||||
#include "RimTools.h"
|
||||
|
||||
|
||||
CAF_PDM_SOURCE_INIT(RimFractureExportSettings, "RimFractureExportSettings");
|
||||
@ -32,9 +35,23 @@ RimFractureExportSettings::RimFractureExportSettings()
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&fileName, "Filename", "Export filename", "", "", "");
|
||||
fileName.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName());
|
||||
// CAF_PDM_InitFieldNoDefault(&eclipseKeyword, "EclipseKeyword", "Eclipse Keyword", "", "", "");
|
||||
// CAF_PDM_InitField(&undefinedValue, "UndefinedValue", 0.0, "Undefined value", "", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&caseToApply, "CaseToApply", "Case to apply", "", "", "");
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QList<caf::PdmOptionItemInfo> RimFractureExportSettings::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly)
|
||||
{
|
||||
QList<caf::PdmOptionItemInfo> options;
|
||||
|
||||
if (fieldNeedingOptions == &caseToApply)
|
||||
{
|
||||
RimTools::caseOptionItems(&options);
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -20,8 +20,12 @@
|
||||
|
||||
#include "cafPdmField.h"
|
||||
#include "cafPdmObject.h"
|
||||
#include "cafPdmPtrField.h"
|
||||
#include "cafPdmUiItem.h"
|
||||
|
||||
|
||||
class RimEclipseCase;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
///
|
||||
@ -32,9 +36,10 @@ class RimFractureExportSettings : public caf::PdmObject
|
||||
public:
|
||||
RimFractureExportSettings();
|
||||
|
||||
caf::PdmField<QString> fileName;
|
||||
// caf::PdmField<QString> eclipseKeyword;
|
||||
// caf::PdmField<double> undefinedValue;
|
||||
caf::PdmField<QString> fileName;
|
||||
caf::PdmPtrField<RimEclipseCase*> caseToApply;
|
||||
|
||||
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override;
|
||||
|
||||
protected:
|
||||
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);
|
||||
|
Loading…
Reference in New Issue
Block a user