#4204 Export faults as part of visible grid export

#4204 Enable reading of faults from a different file than the main grid file
This commit is contained in:
Gaute Lindkvist
2019-03-21 10:35:52 +01:00
parent 88d2ad2c35
commit 677f42591b
11 changed files with 360 additions and 56 deletions

View File

@@ -27,10 +27,12 @@
#include "RifEclipseInputFileTools.h"
#include "RifReaderEclipseOutput.h"
#include "Rim3dView.h"
#include "RimEclipseCase.h"
#include "RimEclipseCellColors.h"
#include "RimEclipseView.h"
#include "Rim3dView.h"
#include "RimFaultInView.h"
#include "RimFaultInViewCollection.h"
#include "RigEclipseCaseData.h"
#include "RigMainGrid.h"
@@ -74,13 +76,18 @@ void RicExportEclipseInputGridFeature::executeCommand(RimEclipseView* view,
const QString& logPrefix)
{
int resultProgressPercentage = exportSettings.exportResults() ?
std::min((int) exportSettings.exportMainKeywords().size(), 30) : 0;
std::min((int) exportSettings.exportMainKeywords().size(), 20) : 0;
int faultsProgressPercentage = exportSettings.exportFaults() ? 10 : 0;
int gridProgressPercentage = 100 - resultProgressPercentage - faultsProgressPercentage;
caf::ProgressInfo progress(gridProgressPercentage + resultProgressPercentage + faultsProgressPercentage,
"Export Eclipse Data");
int gridProgressPercentage = 100 - resultProgressPercentage;
caf::ProgressInfo progress(gridProgressPercentage + resultProgressPercentage, "Export Eclipse Data");
cvf::Vec3st refinement(exportSettings.cellCountI(), exportSettings.cellCountJ(), exportSettings.cellCountK());
CVF_ASSERT(refinement.x() > 0u && refinement.y() > 0u && refinement.z() > 0u);
cvf::Vec3st min, max;
std::tie(min, max) = getVisibleCellRange(view);
if (exportSettings.exportGrid())
@@ -144,6 +151,43 @@ void RicExportEclipseInputGridFeature::executeCommand(RimEclipseView* view,
}
}
}
if (exportSettings.exportFaults() != RicExportEclipseInputGridUi::EXPORT_NO_RESULTS)
{
auto task = progress.task("Export Faults", faultsProgressPercentage);
if (exportSettings.exportFaults == RicExportEclipseInputGridUi::EXPORT_TO_SEPARATE_FILE_PER_RESULT)
{
QFileInfo info(exportSettings.exportGridFilename());
QDir dirPath = info.absoluteDir();
for (auto faultInView : view->faultCollection()->faults())
{
auto rigFault = faultInView->faultGeometry();
QString fileName = QString("%1.GRDECL").arg(rigFault->name());
RifEclipseInputFileTools::saveFault(
fileName, view->eclipseCase()->mainGrid(), rigFault->faultFaces(), rigFault->name(), min, max, refinement);
}
}
else
{
QString fileName = exportSettings.exportFaultsFilename();
QIODevice::OpenMode openFlag = QIODevice::Truncate;
if (exportSettings.exportResults() == RicExportEclipseInputGridUi::EXPORT_TO_GRID_FILE)
{
openFlag = QIODevice::Append;
fileName = exportSettings.exportGridFilename();
}
QFile exportFile(fileName);
if (!exportFile.open(QIODevice::Text | QIODevice::WriteOnly | openFlag))
{
RiaLogging::error("Could not open the file : " + fileName);
}
QTextStream stream(&exportFile);
RifEclipseInputFileTools::saveFaults(stream, view->eclipseCase()->mainGrid(), min, max, refinement);
}
}
}
//--------------------------------------------------------------------------------------------------

View File

@@ -26,11 +26,13 @@
#include "cafPdmUiFilePathEditor.h"
#include "cafPdmUiGroup.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiListEditor.h"
#include "cafPdmUiOrdering.h"
#include <QDir>
#include <QFileInfo>
#include <QIntValidator>
CAF_PDM_SOURCE_INIT(RicExportEclipseInputGridUi, "RicExportEclipseInputGridUi");
@@ -57,11 +59,17 @@ RicExportEclipseInputGridUi::RicExportEclipseInputGridUi(RigEclipseCaseData* cas
CAF_PDM_InitObject("Export Visible Cells as Eclipse Input Grid", "", "", "");
CAF_PDM_InitField(&exportGrid, "ExportGrid", true, "Export Grid", "", "Includes COORD, ZCORN and ACTNUM", "");
CAF_PDM_InitFieldNoDefault(&exportResults, "ExportResults", "Export Results", "", "", "");
CAF_PDM_InitField(&exportResultsFilename, "ExportResultsFilename", QString(), "Results File Name", "", "", "");
CAF_PDM_InitField(&exportGridFilename, "ExportGridFilename", QString(), "Grid File Name", "", "", "");
exportGridFilename.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName());
CAF_PDM_InitFieldNoDefault(&exportResults, "ExportResults", "Export Results", "", "", "");
CAF_PDM_InitField(&exportResultsFilename, "ExportResultsFilename", QString(), "Results File Name", "", "", "");
exportResultsFilename.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName());
CAF_PDM_InitFieldNoDefault(&exportFaults, "ExportFaults", "Export Faults", "", "", "");
CAF_PDM_InitField(&exportFaultsFilename, "ExportFaultsFilename", QString(), "Faults File Name", "", "", "");
exportFaultsFilename.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName());
CAF_PDM_InitFieldNoDefault(&exportMainKeywords, "ExportMainKeywords", "Main Keywords", "", "", "");
CAF_PDM_InitFieldNoDefault(&exportAdditionalKeywords, "ExportAdditionalKeywords", "Additional Keywords", "", "", "");
@@ -72,6 +80,7 @@ RicExportEclipseInputGridUi::RicExportEclipseInputGridUi(RigEclipseCaseData* cas
exportGridFilename = defaultGridFileName();
exportResultsFilename = defaultResultsFileName();
exportFaultsFilename = defaultFaultsFileName();
for (QString keyword : mainKeywords())
{
@@ -102,7 +111,7 @@ std::vector<QString> RicExportEclipseInputGridUi::allSelectedKeywords() const
//--------------------------------------------------------------------------------------------------
void RicExportEclipseInputGridUi::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute * attribute)
{
if (field == &exportResultsFilename || field == &exportGridFilename)
if (field == &exportResultsFilename || field == &exportGridFilename || field == &exportFaultsFilename)
{
caf::PdmUiFilePathEditorAttribute* myAttr = dynamic_cast<caf::PdmUiFilePathEditorAttribute*>(attribute);
if (myAttr)
@@ -118,6 +127,15 @@ void RicExportEclipseInputGridUi::defineEditorAttribute(const caf::PdmFieldHandl
myAttr->m_heightHint = 200;
}
}
else if (field == &cellCountI || field == &cellCountJ || field == &cellCountK)
{
caf::PdmUiLineEditorAttribute* myAttr = dynamic_cast<caf::PdmUiLineEditorAttribute*>(attribute);
if (myAttr)
{
QIntValidator* validator = new QIntValidator(1, 10, nullptr);
myAttr->validator = validator;
}
}
}
//--------------------------------------------------------------------------------------------------
@@ -130,8 +148,9 @@ void RicExportEclipseInputGridUi::defineUiOrdering(QString uiConfigName, caf::Pd
gridGroup->add(&exportGridFilename);
exportGridFilename.uiCapability()->setUiReadOnly(!exportGrid());
caf::PdmUiGroup* resultsGroup = uiOrdering.addNewGroup("Results Export");
caf::PdmUiGroup* resultsGroup = uiOrdering.addNewGroup("Results and Faults Export");
resultsGroup->add(&exportResults);
resultsGroup->add(&exportFaults);
if (exportResults() != EXPORT_NO_RESULTS)
{
if (exportResults() == EXPORT_TO_SINGLE_SEPARATE_FILE)
@@ -140,6 +159,13 @@ void RicExportEclipseInputGridUi::defineUiOrdering(QString uiConfigName, caf::Pd
resultsGroup->add(&exportMainKeywords);
resultsGroup->add(&exportAdditionalKeywords);
}
if (exportFaults() != EXPORT_NO_RESULTS)
{
if (exportFaults() == EXPORT_TO_SINGLE_SEPARATE_FILE)
{
resultsGroup->add(&exportFaultsFilename);
}
}
caf::PdmUiGroup* gridRefinement = uiOrdering.addNewGroup("Grid Refinement");
gridRefinement->add(&cellCountI, { true, 2, 1 });
@@ -156,20 +182,44 @@ void RicExportEclipseInputGridUi::fieldChangedByUi(const caf::PdmFieldHandle* ch
{
if (changedField == &exportGridFilename)
{
QFileInfo info(exportGridFilename());
QDir dirPath = info.absoluteDir();
if (exportResultsFilename() == defaultResultsFileName())
{
QFileInfo info(exportGridFilename());
QDir gridDirPath = info.absoluteDir();
exportResultsFilename = gridDirPath.absoluteFilePath("results.grdecl");
exportResultsFilename = dirPath.absoluteFilePath("RESULTS.GRDECL");
}
if (exportFaultsFilename() == defaultFaultsFileName())
{
exportFaultsFilename = dirPath.absoluteFilePath("FAULTS.GRDECL");
}
}
else if (changedField == &exportResultsFilename)
{
QFileInfo info(exportResultsFilename());
QDir dirPath = info.absoluteDir();
if (exportGridFilename() == defaultGridFileName())
{
QFileInfo info(exportResultsFilename());
QDir resultsDirPath = info.absoluteDir();
exportGridFilename = resultsDirPath.absoluteFilePath("grid.grdecl");
exportGridFilename = dirPath.absoluteFilePath("GRID.GRDECL");
}
if (exportFaultsFilename() == defaultFaultsFileName())
{
exportFaultsFilename = dirPath.absoluteFilePath("FAULTS.GRDECL");
}
}
else if (changedField == &exportFaultsFilename)
{
QFileInfo info(exportFaultsFilename());
QDir dirPath = info.absoluteDir();
if (exportGridFilename() == defaultGridFileName())
{
exportGridFilename = dirPath.absoluteFilePath("GRID.GRDECL");
}
if (exportResultsFilename() == defaultResultsFileName())
{
exportResultsFilename = dirPath.absoluteFilePath("RESULTS.GRDECL");
}
}
}
@@ -247,3 +297,12 @@ QString RicExportEclipseInputGridUi::defaultResultsFileName() const
QDir baseDir(RiaApplication::instance()->currentProjectPath());
return baseDir.absoluteFilePath("RESULTS.GRDECL");
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RicExportEclipseInputGridUi::defaultFaultsFileName() const
{
QDir baseDir(RiaApplication::instance()->currentProjectPath());
return baseDir.absoluteFilePath("FAULTS.GRDECL");
}

View File

@@ -45,6 +45,7 @@ class RicExportEclipseInputGridUi : public caf::PdmObject
EXPORT_TO_SINGLE_SEPARATE_FILE,
EXPORT_TO_SEPARATE_FILE_PER_RESULT
};
typedef caf::AppEnum<ResultExportOptions> ResultExportOptionsEnum;
public:
@@ -54,9 +55,14 @@ public:
std::vector<QString> allSelectedKeywords() const;
caf::PdmField<bool> exportGrid;
caf::PdmField<QString> exportGridFilename;
caf::PdmField<ResultExportOptionsEnum> exportResults;
caf::PdmField<QString> exportGridFilename;
caf::PdmField<QString> exportResultsFilename;
caf::PdmField<ResultExportOptionsEnum> exportFaults;
caf::PdmField<QString> exportFaultsFilename;
caf::PdmField<std::vector<QString>> exportMainKeywords;
caf::PdmField<std::vector<QString>> exportAdditionalKeywords;
@@ -74,6 +80,7 @@ protected:
static std::set<QString> mainKeywords();
QString defaultGridFileName() const;
QString defaultResultsFileName() const;
QString defaultFaultsFileName() const;
private:
RigEclipseCaseData* m_caseData;
};