From ade665e5b42dc869040100a89e81e0bb8d9cd602 Mon Sep 17 00:00:00 2001 From: astridkbjorke Date: Tue, 20 Jun 2017 10:51:52 +0200 Subject: [PATCH 1/7] #1561 Setting isMainBore for main bore fishbone completions --- .../RicFishbonesTransmissibilityCalculationFeatureImp.cpp | 4 +++- ApplicationCode/ReservoirDataModel/RigCompletionData.cpp | 4 +++- ApplicationCode/ReservoirDataModel/RigCompletionData.h | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp b/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp index ab06cd0440..b45f2a0ea0 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp @@ -161,7 +161,9 @@ std::vector RicFishbonesTransmissibilityCalculationFeatureImp completion.setTransAndWPImultBackgroundDataFromFishbone(transmissibility, wellBorePart.skinFactor, wellBorePart.wellRadius *2, - direction); + direction, + wellBorePart.isMainBore); + completionData.push_back(completion); } } diff --git a/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp b/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp index f441fab678..315e09b29b 100644 --- a/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp +++ b/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp @@ -138,13 +138,15 @@ void RigCompletionData::setFromFracture(double transmissibility, double skinFact void RigCompletionData::setTransAndWPImultBackgroundDataFromFishbone(double transmissibility, double skinFactor, double diameter, - CellDirection direction) + CellDirection direction, + bool isMainBore) { m_completionType = FISHBONES; m_transmissibility = transmissibility; m_skinFactor = skinFactor; m_diameter = diameter; m_direction = direction; + m_isMainBore = isMainBore; } //================================================================================================== diff --git a/ApplicationCode/ReservoirDataModel/RigCompletionData.h b/ApplicationCode/ReservoirDataModel/RigCompletionData.h index 6b83d9e675..664ce58f3b 100644 --- a/ApplicationCode/ReservoirDataModel/RigCompletionData.h +++ b/ApplicationCode/ReservoirDataModel/RigCompletionData.h @@ -111,7 +111,9 @@ public: void setTransAndWPImultBackgroundDataFromFishbone(double transmissibility, double skinFactor, double diameter, - CellDirection direction); + CellDirection direction, + bool isMainBore); + void setTransAndWPImultBackgroundDataFromPerforation(double transmissibility, double skinFactor, double diameter, From 5bcc226aba8ab0f0d9a945e6efcce7816fa888f9 Mon Sep 17 00:00:00 2001 From: astridkbjorke Date: Tue, 20 Jun 2017 12:43:24 +0200 Subject: [PATCH 2/7] #1561 Setting wpimult in RigCompletionData to double, setting celldirection in completionData for implicit trans and wpi mult calculation --- .../RicWellPathExportCompletionDataFeature.cpp | 1 - ApplicationCode/ReservoirDataModel/RigCompletionData.cpp | 4 ++-- ApplicationCode/ReservoirDataModel/RigCompletionData.h | 3 ++- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp index 3200c3a1e9..4ce15aa907 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp @@ -206,7 +206,6 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector for (auto& data : completionsPerEclipseCell) { - //completions.push_back(RigCompletionData::combine(data.second)); completions.push_back(combineEclipseCellCompletions(data.second, exportSettings)); } diff --git a/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp b/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp index 315e09b29b..be541c5670 100644 --- a/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp +++ b/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp @@ -39,7 +39,7 @@ RigCompletionData::RigCompletionData(const QString wellName, const IJKCellIndex& m_direction(DIR_UNDEF), m_connectionState(OPEN), m_count(1), - m_wpimult(1), + m_wpimult(HUGE_VAL), m_isMainBore(false), m_readyForExport(false) { @@ -90,7 +90,6 @@ RigCompletionData RigCompletionData::combine(const std::vectorm_metadata.size()); result.m_metadata.insert(result.m_metadata.end(), it->m_metadata.begin(), it->m_metadata.end()); - //TODO: remove? result.m_count += it->m_count; } @@ -186,6 +185,7 @@ void RigCompletionData::setCombinedValuesImplicitTransWPImult(double wpimult, CompletionType completionType) { m_wpimult = wpimult; + m_direction = celldirection; m_completionType = completionType; m_skinFactor = skinFactor; m_diameter = wellDiameter; diff --git a/ApplicationCode/ReservoirDataModel/RigCompletionData.h b/ApplicationCode/ReservoirDataModel/RigCompletionData.h index 664ce58f3b..c98a1d31cf 100644 --- a/ApplicationCode/ReservoirDataModel/RigCompletionData.h +++ b/ApplicationCode/ReservoirDataModel/RigCompletionData.h @@ -142,6 +142,7 @@ public: double dFactor() const { return m_dFactor; } CellDirection direction() const { return m_direction; } size_t count() const { return m_count; } + double wpimult() const { return m_wpimult; } CompletionType completionType() const { return m_completionType; } bool isMainBore() const { return m_isMainBore; } bool readyForExport() const { return m_readyForExport; } @@ -164,7 +165,7 @@ private: bool m_readyForExport; size_t m_count; //TODO: Remove, usage replaced by WPImult - size_t m_wpimult; + double m_wpimult; CompletionType m_completionType; From 5a466db9afbafb0cc86e8f9aaf1bd0772ba99b00 Mon Sep 17 00:00:00 2001 From: astridkbjorke Date: Tue, 20 Jun 2017 13:48:46 +0200 Subject: [PATCH 3/7] #1630 Update metadata for completions --- .../RicFishbonesTransmissibilityCalculationFeatureImp.cpp | 8 ++------ .../RicWellPathExportCompletionDataFeature.cpp | 7 ++++++- ApplicationCode/ReservoirDataModel/RigCompletionData.h | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp b/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp index b45f2a0ea0..d13a54b518 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp @@ -62,7 +62,7 @@ void RicFishbonesTransmissibilityCalculationFeatureImp::findFishboneLateralsWell if (intersection.mainBoreCell && settings.removeLateralsInMainBoreCells()) continue; double diameter = location.fishbonesSubs->holeDiameter(unitSystem); - QString completionMetaData = (location.fishbonesSubs->name() + QString(" Sub: %1 Lateral: %2").arg(location.subIndex).arg(lateral.lateralIndex)); + QString completionMetaData = (location.fishbonesSubs->name() + QString(": Sub: %1 Lateral: %2").arg(location.subIndex).arg(lateral.lateralIndex)); WellBorePartForTransCalc wellBorePart = WellBorePartForTransCalc(intersection.lengthsInCell, diameter / 2, location.fishbonesSubs->skinFactor(), @@ -120,13 +120,9 @@ std::vector RicFishbonesTransmissibilityCalculationFeatureImp } } - //TODO: Find main bore direction and use this as direction in which to split cell - QString directionToSplitCellVolume = "DX"; - for (WellBorePartForTransCalc wellBorePart : wellBoreParts) { RigCompletionData completion(wellPath->completions()->wellNameForExport(), IJKCellIndex(i, j, k)); - completion.addMetadata(wellBorePart.metaData, ""); double transmissibility = 0.0; if (wellBorePart.isMainBore) @@ -163,7 +159,7 @@ std::vector RicFishbonesTransmissibilityCalculationFeatureImp wellBorePart.wellRadius *2, direction, wellBorePart.isMainBore); - + completion.addMetadata(wellBorePart.metaData, QString::number(transmissibility)); completionData.push_back(completion); } } diff --git a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp index 4ce15aa907..efc27f16de 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp @@ -306,7 +306,12 @@ RigCompletionData RicWellPathExportCompletionDataFeature::combineEclipseCellComp RiaLogging::error(QString("Transmissibility calculation has failed for cell [%1, %2, %3]").arg(cellIndexIJK.i).arg(cellIndexIJK.j).arg(cellIndexIJK.k)); return resultCompletion; //Returning empty completion, should not be exported } + totalTrans = totalTrans + completion.transmissibility(); + + resultCompletion.m_metadata.reserve(resultCompletion.m_metadata.size() + completion.m_metadata.size()); + resultCompletion.m_metadata.insert(resultCompletion.m_metadata.end(), completion.m_metadata.begin(), completion.m_metadata.end()); + } @@ -519,7 +524,6 @@ std::vector RicWellPathExportCompletionDataFeature::generateP size_t i, j, k; settings.caseToApply->eclipseCaseData()->mainGrid()->ijkFromCellIndex(cell.cellIndex, &i, &j, &k); RigCompletionData completion(wellPath->completions()->wellNameForExport(), IJKCellIndex(i, j, k)); - completion.addMetadata("Perforation", QString("StartMD: %1 - EndMD: %2").arg(interval->startMD()).arg(interval->endMD())); CellDirection direction = calculateDirectionInCell(settings.caseToApply, cell.cellIndex, cell.internalCellLengths); double transmissibility = RicWellPathExportCompletionDataFeature::calculateTransmissibility(settings.caseToApply, @@ -535,6 +539,7 @@ std::vector RicWellPathExportCompletionDataFeature::generateP interval->skinFactor(), interval->diameter(unitSystem), direction); + completion.addMetadata("Perforation", QString("StartMD: %1 - EndMD: %2").arg(interval->startMD()).arg(interval->endMD() + QString(" : ") + QString::number(transmissibility))); completionData.push_back(completion); } } diff --git a/ApplicationCode/ReservoirDataModel/RigCompletionData.h b/ApplicationCode/ReservoirDataModel/RigCompletionData.h index c98a1d31cf..080e4f6dcc 100644 --- a/ApplicationCode/ReservoirDataModel/RigCompletionData.h +++ b/ApplicationCode/ReservoirDataModel/RigCompletionData.h @@ -147,9 +147,9 @@ public: bool isMainBore() const { return m_isMainBore; } bool readyForExport() const { return m_readyForExport; } + std::vector m_metadata; //TODO: Is this OK? private: - std::vector m_metadata; QString m_wellName; IJKCellIndex m_cellIndex; WellConnectionState m_connectionState; From 47869b4728c4bdf79dd5685e3370b901bd678dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Tue, 20 Jun 2017 16:29:56 +0200 Subject: [PATCH 4/7] Avoid copy of eclipse results arrays in RimReservoirCellResultsStorage::isDataPresent --- .../ProjectDataModel/RimReservoirCellResultsStorage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp b/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp index 5e1b6fb989..ecdb171056 100644 --- a/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp +++ b/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp @@ -1543,7 +1543,7 @@ bool RimReservoirCellResultsStorage::isDataPresent(size_t scalarResultIndex) con return false; } - const std::vector< std::vector > data = m_cellResults->cellScalarResults(scalarResultIndex); + const std::vector< std::vector >& data = m_cellResults->cellScalarResults(scalarResultIndex); for (size_t tsIdx = 0; tsIdx < data.size(); ++tsIdx) { From 21f0857791b6283dae02d45c0a9e33a2e976da21 Mon Sep 17 00:00:00 2001 From: astridkbjorke Date: Wed, 21 Jun 2017 10:58:02 +0200 Subject: [PATCH 5/7] #1589 Replace bools "Calculate Trans" and "Include WPImult" with choice of calc trans or use wpimult and default connection factors --- .../RicExportCompletionDataSettingsUi.cpp | 21 ++++++++++++++++--- .../RicExportCompletionDataSettingsUi.h | 15 +++++++++++-- .../RicExportFishbonesWellSegmentsFeature.cpp | 1 + ...RicWellPathExportCompletionDataFeature.cpp | 16 +++++++------- .../RicWellPathExportCompletionDataFeature.h | 2 +- .../ReservoirDataModel/RigWellPath.cpp | 1 + 6 files changed, 42 insertions(+), 14 deletions(-) diff --git a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp index 8c9673bfe7..37ea5c4596 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp @@ -36,6 +36,14 @@ namespace caf addItem(RicExportCompletionDataSettingsUi::CHECKED_WELLS, "CHECKED_WELLS", "Checked Wells"); setDefault(RicExportCompletionDataSettingsUi::ALL_WELLS); } + + template<> + void RicExportCompletionDataSettingsUi::CompdatExportType::setUp() + { + addItem(RicExportCompletionDataSettingsUi::TRANSMISSIBILITIES, "TRANSMISSIBILITIES", "Export Calculated Transmissibilities"); + addItem(RicExportCompletionDataSettingsUi::WPIMULT_AND_DEFAULT_CONNECTION_FACTORS, "WPIMULT_AND_DEFAULT_CONNECTION_FACTORS", "Use Default Connection Factors and WPIMULT"); + setDefault(RicExportCompletionDataSettingsUi::TRANSMISSIBILITIES); + } } @@ -50,15 +58,13 @@ RicExportCompletionDataSettingsUi::RicExportCompletionDataSettingsUi() CAF_PDM_InitFieldNoDefault(&fileSplit, "FileSplit", "File Split", "", "", ""); CAF_PDM_InitFieldNoDefault(&wellSelection, "WellSelection", "Well Selection", "", "", ""); + CAF_PDM_InitFieldNoDefault(&compdatExport, "compdatExport", "Export setting", "", " ", ""); CAF_PDM_InitField(&timeStep, "TimeStepIndex", 0, "Time Step", "", "", ""); - CAF_PDM_InitField(&computeTransmissibility, "ComputeTransmissibility", true, "Compute Transmissibility", "", "", ""); - CAF_PDM_InitField(&includePerforations, "IncludePerforations", true, "Include Perforations", "", "", ""); CAF_PDM_InitField(&includeFishbones, "IncludeFishbones", true, "Include Fishbones", "", "", ""); - CAF_PDM_InitField(&includeWpimult, "IncludeWPIMULT", true, "Include WPIMLUT", "", "", ""); CAF_PDM_InitField(&removeLateralsInMainBoreCells, "RemoveLateralsInMainBoreCells", false, "Remove Laterals in Main Bore Cells", "", "", ""); } @@ -88,3 +94,12 @@ QList RicExportCompletionDataSettingsUi::calculateValueO } return options; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicExportCompletionDataSettingsUi::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ +// caf::PdmUiGroup* fishboneGroup = uiOrdering.addNewGroup("Fishbone export"); +// fishboneGroup->add(&includeFishbones); +} diff --git a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h index 08b6f3d940..615b091bda 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h +++ b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h @@ -44,22 +44,33 @@ public: }; typedef caf::AppEnum WellSelectionType; + enum CompdatExport { + TRANSMISSIBILITIES, + WPIMULT_AND_DEFAULT_CONNECTION_FACTORS, + }; + typedef caf::AppEnum CompdatExportType; + RicExportCompletionDataSettingsUi(); caf::PdmField fileSplit; caf::PdmField wellSelection; + caf::PdmField compdatExport; + - caf::PdmField computeTransmissibility; caf::PdmField includePerforations; caf::PdmField includeFishbones; - caf::PdmField includeWpimult; caf::PdmField removeLateralsInMainBoreCells; caf::PdmField timeStep; + + protected: virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) override; + + virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; + }; diff --git a/ApplicationCode/Commands/CompletionCommands/RicExportFishbonesWellSegmentsFeature.cpp b/ApplicationCode/Commands/CompletionCommands/RicExportFishbonesWellSegmentsFeature.cpp index 660c42c53b..225264ca50 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicExportFishbonesWellSegmentsFeature.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicExportFishbonesWellSegmentsFeature.cpp @@ -76,6 +76,7 @@ void RicExportFishbonesWellSegmentsFeature::onActionTriggered(bool isChecked) exportSettings.folder = defaultDir; + //Bjørnar: skal denne være noe annet? caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Completion Data", ""); if (propertyDialog.exec() == QDialog::Accepted) { diff --git a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp index efc27f16de..0dd7293a13 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp @@ -215,7 +215,7 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector if (exportSettings.fileSplit == RicExportCompletionDataSettingsUi::UNIFIED_FILE) { const QString fileName = QString("UnifiedCompletions_%1").arg(eclipseCaseName); - printCompletionsToFile(exportSettings.folder, fileName, completions, exportSettings.includeWpimult); + printCompletionsToFile(exportSettings.folder, fileName, completions, exportSettings.compdatExport); } else if (exportSettings.fileSplit == RicExportCompletionDataSettingsUi::SPLIT_ON_WELL) { @@ -231,7 +231,7 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector } QString fileName = QString("%1_unifiedCompletions_%2").arg(wellPath->name()).arg(eclipseCaseName); - printCompletionsToFile(exportSettings.folder, fileName, wellCompletions, exportSettings.includeWpimult); + printCompletionsToFile(exportSettings.folder, fileName, wellCompletions, exportSettings.compdatExport); } } else if (exportSettings.fileSplit == RicExportCompletionDataSettingsUi::SPLIT_ON_WELL_AND_COMPLETION_TYPE) @@ -241,12 +241,12 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector { std::vector fishbonesCompletions = getCompletionsForWellAndCompletionType(completions, wellPath->completions()->wellNameForExport(), RigCompletionData::FISHBONES); QString fileName = QString("%1_Fishbones_%2").arg(wellPath->name()).arg(eclipseCaseName); - printCompletionsToFile(exportSettings.folder, fileName, fishbonesCompletions, exportSettings.includeWpimult); + printCompletionsToFile(exportSettings.folder, fileName, fishbonesCompletions, exportSettings.compdatExport); } { std::vector perforationCompletions = getCompletionsForWellAndCompletionType(completions, wellPath->completions()->wellNameForExport(), RigCompletionData::PERFORATION); QString fileName = QString("%1_Perforations_%2").arg(wellPath->name()).arg(eclipseCaseName); - printCompletionsToFile(exportSettings.folder, fileName, perforationCompletions, exportSettings.includeWpimult); + printCompletionsToFile(exportSettings.folder, fileName, perforationCompletions, exportSettings.compdatExport); } } } @@ -315,12 +315,12 @@ RigCompletionData RicWellPathExportCompletionDataFeature::combineEclipseCellComp } - if (settings.computeTransmissibility() && !settings.includeWpimult) //TODO: replace with explicitTransmissibilityExport setting + if (settings.compdatExport == RicExportCompletionDataSettingsUi::TRANSMISSIBILITIES) { resultCompletion.setCombinedValuesExplicitTrans(totalTrans, completionType); } - if (settings.includeWpimult) //TODO: replace with implicitTransmissibilityExportByWPImult + if (settings.compdatExport == RicExportCompletionDataSettingsUi::WPIMULT_AND_DEFAULT_CONNECTION_FACTORS) { //calculate trans for main bore - but as Eclipse will do it! double transmissibilityEclipseCalculation = RicWellPathExportCompletionDataFeature::calculateTransmissibilityAsEclipseDoes(settings.caseToApply(), @@ -343,7 +343,7 @@ RigCompletionData RicWellPathExportCompletionDataFeature::combineEclipseCellComp //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicWellPathExportCompletionDataFeature::printCompletionsToFile(const QString& exportFolder, const QString& fileName, std::vector& completions, bool includeWpimult) +void RicWellPathExportCompletionDataFeature::printCompletionsToFile(const QString& exportFolder, const QString& fileName, std::vector& completions, RicExportCompletionDataSettingsUi::CompdatExportType exportType) { //TODO: Check that completion is ready for export //TODO: Use wpimult instead of count for export! @@ -366,7 +366,7 @@ void RicWellPathExportCompletionDataFeature::printCompletionsToFile(const QStrin generateCompdatTable(formatter, completions); - if (includeWpimult) + if (exportType == RicExportCompletionDataSettingsUi::WPIMULT_AND_DEFAULT_CONNECTION_FACTORS) { generateWpimultTable(formatter, completions); } diff --git a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.h b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.h index 881a6a155c..43fd909564 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.h +++ b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.h @@ -154,7 +154,7 @@ private: static RigCompletionData combineEclipseCellCompletions(const std::vector& completions, const RicExportCompletionDataSettingsUi& settings); static void exportCompletions(const std::vector& wellPaths, const RicExportCompletionDataSettingsUi& exportSettings); - static void printCompletionsToFile(const QString& exportFolder, const QString& fileName, std::vector& completions, bool includeWpimult); + static void printCompletionsToFile(const QString& exportFolder, const QString& fileName, std::vector& completions, RicExportCompletionDataSettingsUi::CompdatExportType exportType); static std::vector getCompletionsForWellAndCompletionType(const std::vector& completions, const QString& wellName, RigCompletionData::CompletionType completionType); static void generateCompdatTable(RifEclipseDataTableFormatter& formatter, const std::vector& completionData); diff --git a/ApplicationCode/ReservoirDataModel/RigWellPath.cpp b/ApplicationCode/ReservoirDataModel/RigWellPath.cpp index 46fe2385b4..74285833b6 100644 --- a/ApplicationCode/ReservoirDataModel/RigWellPath.cpp +++ b/ApplicationCode/ReservoirDataModel/RigWellPath.cpp @@ -164,6 +164,7 @@ std::vector RigWellPath::clippedPointSubset(double startMD, double e { std::vector points; if (m_measuredDepths.empty()) return points; + if (startMD > endMD) return points; size_t i = 0; // Skip points below startMD From 8d28981664c12329a05e1fff80052f451d7c61e3 Mon Sep 17 00:00:00 2001 From: astridkbjorke Date: Wed, 21 Jun 2017 15:54:18 +0200 Subject: [PATCH 6/7] #1589 Remove option removeLateralsInMainBoreCells, instead implement option for "Exclude main bore" for fishbone export. Also grouping export options. --- .../RicExportCompletionDataSettingsUi.cpp | 25 ++++++++++++++----- .../RicExportCompletionDataSettingsUi.h | 2 +- ...sTransmissibilityCalculationFeatureImp.cpp | 13 +++------- ...RicWellPathExportCompletionDataFeature.cpp | 19 ++++++++++++-- .../ReservoirDataModel/RigCompletionData.cpp | 3 +++ .../ReservoirDataModel/RigCompletionData.h | 2 +- 6 files changed, 44 insertions(+), 20 deletions(-) diff --git a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp index 37ea5c4596..f76c817949 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.cpp @@ -40,8 +40,8 @@ namespace caf template<> void RicExportCompletionDataSettingsUi::CompdatExportType::setUp() { - addItem(RicExportCompletionDataSettingsUi::TRANSMISSIBILITIES, "TRANSMISSIBILITIES", "Export Calculated Transmissibilities"); - addItem(RicExportCompletionDataSettingsUi::WPIMULT_AND_DEFAULT_CONNECTION_FACTORS, "WPIMULT_AND_DEFAULT_CONNECTION_FACTORS", "Use Default Connection Factors and WPIMULT"); + addItem(RicExportCompletionDataSettingsUi::TRANSMISSIBILITIES, "TRANSMISSIBILITIES", "Calculated Transmissibilities"); + addItem(RicExportCompletionDataSettingsUi::WPIMULT_AND_DEFAULT_CONNECTION_FACTORS, "WPIMULT_AND_DEFAULT_CONNECTION_FACTORS", "Default Connection Factors and WPIMULT"); setDefault(RicExportCompletionDataSettingsUi::TRANSMISSIBILITIES); } } @@ -58,14 +58,14 @@ RicExportCompletionDataSettingsUi::RicExportCompletionDataSettingsUi() CAF_PDM_InitFieldNoDefault(&fileSplit, "FileSplit", "File Split", "", "", ""); CAF_PDM_InitFieldNoDefault(&wellSelection, "WellSelection", "Well Selection", "", "", ""); - CAF_PDM_InitFieldNoDefault(&compdatExport, "compdatExport", "Export setting", "", " ", ""); + CAF_PDM_InitFieldNoDefault(&compdatExport, "compdatExport", "Export", "", " ", ""); CAF_PDM_InitField(&timeStep, "TimeStepIndex", 0, "Time Step", "", "", ""); CAF_PDM_InitField(&includePerforations, "IncludePerforations", true, "Include Perforations", "", "", ""); CAF_PDM_InitField(&includeFishbones, "IncludeFishbones", true, "Include Fishbones", "", "", ""); - CAF_PDM_InitField(&removeLateralsInMainBoreCells, "RemoveLateralsInMainBoreCells", false, "Remove Laterals in Main Bore Cells", "", "", ""); + CAF_PDM_InitField(&excludeMainBoreForFishbones, "ExcludeMainBoreForFishbones", false, "Exclude Main Bore Transmissibility For Fishbones", "", "", ""); } //-------------------------------------------------------------------------------------------------- @@ -100,6 +100,19 @@ QList RicExportCompletionDataSettingsUi::calculateValueO //-------------------------------------------------------------------------------------------------- void RicExportCompletionDataSettingsUi::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) { -// caf::PdmUiGroup* fishboneGroup = uiOrdering.addNewGroup("Fishbone export"); -// fishboneGroup->add(&includeFishbones); + caf::PdmUiGroup* generalExportSettings = uiOrdering.addNewGroup("General Export Settings"); + generalExportSettings->add(&folder); + generalExportSettings->add(&caseToApply); + generalExportSettings->add(&timeStep); + generalExportSettings->add(&compdatExport); + generalExportSettings->add(&wellSelection); + generalExportSettings->add(&fileSplit); + + + caf::PdmUiGroup* fishboneGroup = uiOrdering.addNewGroup("Export of Fishbone Completions"); + fishboneGroup->add(&includeFishbones); + fishboneGroup->add(&excludeMainBoreForFishbones); + + caf::PdmUiGroup* perfIntervalGroup = uiOrdering.addNewGroup("Export of Perforation Completions"); + perfIntervalGroup->add(&includePerforations); } diff --git a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h index 615b091bda..0870b2625b 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h +++ b/ApplicationCode/Commands/CompletionCommands/RicExportCompletionDataSettingsUi.h @@ -62,7 +62,7 @@ public: caf::PdmField includePerforations; caf::PdmField includeFishbones; - caf::PdmField removeLateralsInMainBoreCells; + caf::PdmField excludeMainBoreForFishbones; caf::PdmField timeStep; diff --git a/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp b/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp index d13a54b518..092b61183d 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicFishbonesTransmissibilityCalculationFeatureImp.cpp @@ -30,6 +30,7 @@ #include "RimFishbonesMultipleSubs.h" #include "RimFishboneWellPathCollection.h" #include "RimWellPathCompletions.h" +#include "RigCompletionData.h" //-------------------------------------------------------------------------------------------------- /// @@ -41,14 +42,6 @@ void RicFishbonesTransmissibilityCalculationFeatureImp::findFishboneLateralsWell std::vector locations = RicWellPathExportCompletionDataFeature::findWellSegmentLocations(settings.caseToApply, wellPath); RiaEclipseUnitTools::UnitSystem unitSystem = caseData->unitsType(); - - // Filter out cells where main bore is present - if (settings.removeLateralsInMainBoreCells()) - { - std::vector wellPathCells = RicWellPathExportCompletionDataFeature::findIntersectingCells(caseData, wellPath->wellPathGeometry()->m_wellPathPoints); - RicWellPathExportCompletionDataFeature::markWellPathCells(wellPathCells, &locations); - } - bool isMainBore = false; std::vector completionData; @@ -59,8 +52,6 @@ void RicFishbonesTransmissibilityCalculationFeatureImp::findFishboneLateralsWell { for (const WellSegmentLateralIntersection& intersection : lateral.intersections) { - if (intersection.mainBoreCell && settings.removeLateralsInMainBoreCells()) continue; - double diameter = location.fishbonesSubs->holeDiameter(unitSystem); QString completionMetaData = (location.fishbonesSubs->name() + QString(": Sub: %1 Lateral: %2").arg(location.subIndex).arg(lateral.lateralIndex)); WellBorePartForTransCalc wellBorePart = WellBorePartForTransCalc(intersection.lengthsInCell, @@ -159,7 +150,9 @@ std::vector RicFishbonesTransmissibilityCalculationFeatureImp wellBorePart.wellRadius *2, direction, wellBorePart.isMainBore); + completion.addMetadata(wellBorePart.metaData, QString::number(transmissibility)); + completionData.push_back(completion); } } diff --git a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp index 0dd7293a13..22d5c16a99 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp @@ -307,6 +307,11 @@ RigCompletionData RicWellPathExportCompletionDataFeature::combineEclipseCellComp return resultCompletion; //Returning empty completion, should not be exported } + if (settings.excludeMainBoreForFishbones && completionType == RigCompletionData::FISHBONES && completion.isMainBore()) + { + continue; + } + totalTrans = totalTrans + completion.transmissibility(); resultCompletion.m_metadata.reserve(resultCompletion.m_metadata.size() + completion.m_metadata.size()); @@ -346,7 +351,6 @@ RigCompletionData RicWellPathExportCompletionDataFeature::combineEclipseCellComp void RicWellPathExportCompletionDataFeature::printCompletionsToFile(const QString& exportFolder, const QString& fileName, std::vector& completions, RicExportCompletionDataSettingsUi::CompdatExportType exportType) { //TODO: Check that completion is ready for export - //TODO: Use wpimult instead of count for export! QString filePath = QDir(exportFolder).filePath(fileName); QFile exportFile(filePath); @@ -419,6 +423,12 @@ void RicWellPathExportCompletionDataFeature::generateCompdatTable(RifEclipseData for (const RigCompletionData& data : completionData) { + if (data.transmissibility() == 0.0 || data.wpimult()==0.0) + { + //Don't export completions without transmissibility + continue; + } + for (const RigCompletionMetaData& metadata : data.metadata()) { formatter.comment(QString("%1 : %2").arg(metadata.name).arg(metadata.comment)); @@ -490,8 +500,13 @@ void RicWellPathExportCompletionDataFeature::generateWpimultTable(RifEclipseData for (auto& completion : completionData) { + if (completion.wpimult() == 0.0) + { + continue; + } + formatter.add(completion.wellName()); - formatter.add(completion.count()); + formatter.add(completion.wpimult()); formatter.addZeroBasedCellIndex(completion.cellIndex().i).addZeroBasedCellIndex(completion.cellIndex().j).addZeroBasedCellIndex(completion.cellIndex().k); formatter.rowCompleted(); } diff --git a/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp b/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp index be541c5670..696c92ac95 100644 --- a/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp +++ b/ApplicationCode/ReservoirDataModel/RigCompletionData.cpp @@ -252,6 +252,9 @@ void RigCompletionData::copy(RigCompletionData& target, const RigCompletionData& target.m_skinFactor = from.m_skinFactor; target.m_dFactor = from.m_dFactor; target.m_direction = from.m_direction; + target.m_isMainBore = from.m_isMainBore; + target.m_readyForExport = from.m_readyForExport; target.m_count = from.m_count; + target.m_wpimult = from.m_wpimult; target.m_completionType = from.m_completionType; } diff --git a/ApplicationCode/ReservoirDataModel/RigCompletionData.h b/ApplicationCode/ReservoirDataModel/RigCompletionData.h index 080e4f6dcc..28cc2109f4 100644 --- a/ApplicationCode/ReservoirDataModel/RigCompletionData.h +++ b/ApplicationCode/ReservoirDataModel/RigCompletionData.h @@ -147,7 +147,7 @@ public: bool isMainBore() const { return m_isMainBore; } bool readyForExport() const { return m_readyForExport; } - std::vector m_metadata; //TODO: Is this OK? + std::vector m_metadata; private: QString m_wellName; From 53ee396c03b6226f00711e52780bc334a6677d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rnar=20Grip=20Fj=C3=A6r?= Date: Wed, 21 Jun 2017 16:25:41 +0200 Subject: [PATCH 7/7] #1635 Use scientific numbers for transmissibility in completion data export --- ...RicWellPathExportCompletionDataFeature.cpp | 2 +- .../RifEclipseDataTableFormatter.cpp | 20 ++++++--- .../RifEclipseDataTableFormatter.h | 42 +++++++++++++++---- 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp index 22d5c16a99..d640ceb500 100644 --- a/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp +++ b/ApplicationCode/Commands/CompletionCommands/RicWellPathExportCompletionDataFeature.cpp @@ -409,7 +409,7 @@ void RicWellPathExportCompletionDataFeature::generateCompdatTable(RifEclipseData RifEclipseOutputTableColumn("K2"), RifEclipseOutputTableColumn("Status"), RifEclipseOutputTableColumn("SAT"), - RifEclipseOutputTableColumn("TR"), + RifEclipseOutputTableColumn("TR", RifEclipseOutputTableDoubleFormatting(RifEclipseOutputTableDoubleFormat::SCIENTIFIC)), RifEclipseOutputTableColumn("DIAM"), RifEclipseOutputTableColumn("KH"), RifEclipseOutputTableColumn("S"), diff --git a/ApplicationCode/FileInterface/RifEclipseDataTableFormatter.cpp b/ApplicationCode/FileInterface/RifEclipseDataTableFormatter.cpp index 46a928ca75..bb7b568abb 100644 --- a/ApplicationCode/FileInterface/RifEclipseDataTableFormatter.cpp +++ b/ApplicationCode/FileInterface/RifEclipseDataTableFormatter.cpp @@ -152,8 +152,8 @@ RifEclipseDataTableFormatter& RifEclipseDataTableFormatter::add(double num) { size_t column = m_lineBuffer.size(); CVF_ASSERT(column < m_columns.size()); - m_columns[column].width = std::max(measure(num), m_columns[column].width); - m_lineBuffer.push_back(format(num)); + m_columns[column].width = std::max(measure(num, m_columns[column].doubleFormat), m_columns[column].width); + m_lineBuffer.push_back(format(num, m_columns[column].doubleFormat)); return *this; } @@ -220,9 +220,9 @@ int RifEclipseDataTableFormatter::measure(const QString str) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -int RifEclipseDataTableFormatter::measure(double num) +int RifEclipseDataTableFormatter::measure(double num, RifEclipseOutputTableDoubleFormatting doubleFormat) { - return format(num).length(); + return format(num, doubleFormat).length(); } //-------------------------------------------------------------------------------------------------- @@ -244,9 +244,17 @@ int RifEclipseDataTableFormatter::measure(size_t num) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RifEclipseDataTableFormatter::format(double num) +QString RifEclipseDataTableFormatter::format(double num, RifEclipseOutputTableDoubleFormatting doubleFormat) { - return QString("%1").arg(num, 0, 'f', m_doubleDecimals); + switch (doubleFormat.format) + { + case RifEclipseOutputTableDoubleFormat::FLOAT: + return QString("%1").arg(num, 0, 'f', doubleFormat.width); + case RifEclipseOutputTableDoubleFormat::SCIENTIFIC: + return QString("%1").arg(num, 0, 'e'); + default: + return QString("%1"); + } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/FileInterface/RifEclipseDataTableFormatter.h b/ApplicationCode/FileInterface/RifEclipseDataTableFormatter.h index 68db6be29b..fdb309eb1a 100644 --- a/ApplicationCode/FileInterface/RifEclipseDataTableFormatter.h +++ b/ApplicationCode/FileInterface/RifEclipseDataTableFormatter.h @@ -41,6 +41,15 @@ enum RifEclipseOutputTableAlignment RIGHT }; +//================================================================================================== +// +//================================================================================================== +enum RifEclipseOutputTableDoubleFormat +{ + SCIENTIFIC, + FLOAT, +}; + //================================================================================================== // //================================================================================================== @@ -50,21 +59,41 @@ struct RifEclipseOutputTableLine std::vector< QString > data; }; +//================================================================================================== +// +//================================================================================================== +struct RifEclipseOutputTableDoubleFormatting +{ + RifEclipseOutputTableDoubleFormatting(RifEclipseOutputTableDoubleFormat format = FLOAT, int width = 5) + : format(format), + width(width) + {} + + + RifEclipseOutputTableDoubleFormat format; + int width; +}; + //================================================================================================== // //================================================================================================== struct RifEclipseOutputTableColumn { - RifEclipseOutputTableColumn(const QString& title, RifEclipseOutputTableAlignment alignment = LEFT, int width = -1) + RifEclipseOutputTableColumn(const QString& title, + RifEclipseOutputTableDoubleFormatting doubleFormat = RifEclipseOutputTableDoubleFormatting(), + RifEclipseOutputTableAlignment alignment = LEFT, + int width = -1) : title(title), + doubleFormat(doubleFormat), alignment(alignment), width(width) { } - QString title; - RifEclipseOutputTableAlignment alignment; - int width; + QString title; + RifEclipseOutputTableDoubleFormatting doubleFormat; + RifEclipseOutputTableAlignment alignment; + int width; }; @@ -90,11 +119,11 @@ public: private: int measure(const QString str); - int measure(double num); + int measure(double num, RifEclipseOutputTableDoubleFormatting doubleFormat); int measure(int num); int measure(size_t num); - QString format(double num); + QString format(double num, RifEclipseOutputTableDoubleFormatting doubleFormat); QString format(int num); QString format(size_t num); QString formatColumn(const QString str, RifEclipseOutputTableColumn column); @@ -107,6 +136,5 @@ private: std::vector m_buffer; std::vector m_lineBuffer; QTextStream& m_out; - int m_doubleDecimals = 5; int m_colSpacing = 5; };