diff --git a/ApplicationCode/CommandFileInterface/RicfExportWellPathCompletions.cpp b/ApplicationCode/CommandFileInterface/RicfExportWellPathCompletions.cpp index b5aecc81b3..eb3e266cd2 100644 --- a/ApplicationCode/CommandFileInterface/RicfExportWellPathCompletions.cpp +++ b/ApplicationCode/CommandFileInterface/RicfExportWellPathCompletions.cpp @@ -56,8 +56,9 @@ RicfExportWellPathCompletions::RicfExportWellPathCompletions() RICF_InitField(&m_excludeMainBoreForFishbones, "excludeMainBoreForFishbones", false, "Exclude Main Bore for Fishbones", "", "", ""); RICF_InitField(&m_transScalingType, "transScalingType", RicExportCompletionDataSettingsUi::TransScalingType(), "Transmissibility Scaling Type", "", "", ""); + RICF_InitField(&m_transScalingTimeStep, "transScalingTimeStep", -1, "Transmissibility Scaling WBHP Time Step", "", "", ""); + RICF_InitField(&m_transScalingWBHP, "transScalingWBHP", 200.0, "Transmissibility Scaling Constant WBHP", "", "", ""); RICF_InitField(&m_transScalingCorrection, "transScalingCorrection", RicExportCompletionDataSettingsUi::TransScalingCorrection(), "Transmissibility Scaling Correction", "", "", ""); - RICF_InitField(&m_transScalingTimeStep, "transScalingTimeStep", 0, "Transmissibility Scaling Correction", "", "", ""); } //-------------------------------------------------------------------------------------------------- @@ -82,7 +83,8 @@ void RicfExportWellPathCompletions::execute() exportSettings->transScalingType = m_transScalingType; exportSettings->transScalingCorrection = m_transScalingCorrection; - exportSettings->transScalingPressureTimeStep = m_transScalingTimeStep; + exportSettings->transScalingWBHPTimeStep = m_transScalingTimeStep; + exportSettings->transScalingWBHP = m_transScalingWBHP; exportSettings->useLateralNTG = m_useLateralNTG; exportSettings->includePerforations = m_includePerforations; diff --git a/ApplicationCode/CommandFileInterface/RicfExportWellPathCompletions.h b/ApplicationCode/CommandFileInterface/RicfExportWellPathCompletions.h index 1dad8efd36..e40b3df435 100644 --- a/ApplicationCode/CommandFileInterface/RicfExportWellPathCompletions.h +++ b/ApplicationCode/CommandFileInterface/RicfExportWellPathCompletions.h @@ -49,8 +49,9 @@ private: caf::PdmField m_combinationMode; caf::PdmField m_transScalingType; - caf::PdmField m_transScalingCorrection; caf::PdmField m_transScalingTimeStep; + caf::PdmField m_transScalingWBHP; + caf::PdmField m_transScalingCorrection; caf::PdmField m_useLateralNTG; caf::PdmField m_includePerforations; diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionDataSettingsUi.cpp b/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionDataSettingsUi.cpp index 2c0ed141cf..49d32104f6 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionDataSettingsUi.cpp +++ b/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionDataSettingsUi.cpp @@ -93,9 +93,10 @@ RicExportCompletionDataSettingsUi::RicExportCompletionDataSettingsUi() CAF_PDM_InitField(&includeFishbones, "IncludeFishbones", true, "Fishbones", "", "", ""); CAF_PDM_InitField(&includeFractures, "IncludeFractures", true, "Fractures", "", "", ""); - CAF_PDM_InitFieldNoDefault(&transScalingType, "TransScalingType", " PDD Transmissibility Scaling", "", "", ""); - CAF_PDM_InitFieldNoDefault(&transScalingCorrection, "TransScalingCorrection", " PDD Transmissibility Scaling Correction", "", "", ""); - CAF_PDM_InitField(&transScalingPressureTimeStep, "TransScalingTimeStep", 0, " PDD Pressure Scaling Time Step", "", "", ""); + CAF_PDM_InitFieldNoDefault(&transScalingType, "TransScalingType", " Pressure Diff. Depletion Transmissibility Scaling (BETA)", "", "", ""); + CAF_PDM_InitField(&transScalingWBHPTimeStep, "TransScalingTimeStep", -1, " PDD WBHP from Summary Case Time Step (BETA)", "", "", ""); + CAF_PDM_InitField(&transScalingWBHP, "TransScalingWBHP", 200.0, " PDD Constant WBHP (BETA)", "", "", ""); + CAF_PDM_InitFieldNoDefault(&transScalingCorrection, "TransScalingCorrection", " PDD Transmissibility Scaling Correction (BETA)", "", "", ""); CAF_PDM_InitField(&m_includeFracturesSummaryHeader, "IncludeFracturesSummaryHeader", @@ -205,6 +206,17 @@ void RicExportCompletionDataSettingsUi::fieldChangedByUi(const caf::PdmFieldHand includeFractures = true; } } + else if (changedField == &transScalingType) + { + if (transScalingType == RicExportFractureCompletionsImpl::MATRIX_TO_WELL_DP_OVER_INITIAL_DP) + { + transScalingCorrection = RicExportFractureCompletionsImpl::HOGSTOL_CORRECTION; + } + else + { + transScalingCorrection = RicExportFractureCompletionsImpl::NO_CORRECTION; + } + } } //-------------------------------------------------------------------------------------------------- @@ -214,7 +226,7 @@ QList RicExportCompletionDataSettingsUi::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) { QList options; - if (fieldNeedingOptions == &timeStep || fieldNeedingOptions == &transScalingPressureTimeStep) + if (fieldNeedingOptions == &timeStep || fieldNeedingOptions == &transScalingWBHPTimeStep) { QStringList timeStepNames; @@ -222,7 +234,7 @@ QList { timeStepNames = caseToApply->timeStepStrings(); } - + options.push_back(caf::PdmOptionItemInfo("Use Constant WBHP", -1)); for (int i = 0; i < timeStepNames.size(); i++) { options.push_back(caf::PdmOptionItemInfo(timeStepNames[i], i)); @@ -270,15 +282,20 @@ void RicExportCompletionDataSettingsUi::defineUiOrdering(QString uiConfigName, c if (m_fracturesEnabled) { group->add(&includeFractures); - group->add(&transScalingType); - if (transScalingType() != RicExportFractureCompletionsImpl::NO_SCALING) - { - group->add(&transScalingCorrection); - group->add(&transScalingPressureTimeStep); - - } group->add(&m_includeFracturesSummaryHeader); + group->add(&transScalingType); + group->add(&transScalingWBHPTimeStep); + group->add(&transScalingWBHP); + group->add(&transScalingCorrection); + + transScalingWBHPTimeStep.uiCapability()->setUiReadOnly(transScalingType() == RicExportFractureCompletionsImpl::NO_SCALING || + transScalingType() != RicExportFractureCompletionsImpl::MATRIX_TO_WELL_DP_OVER_INITIAL_DP); + transScalingWBHP.uiCapability()->setUiReadOnly(transScalingWBHPTimeStep.uiCapability()->isUiReadOnly() || + transScalingWBHPTimeStep() != -1); + transScalingCorrection.uiCapability()->setUiReadOnly(transScalingType() == RicExportFractureCompletionsImpl::NO_SCALING); + + // Set visibility includeFractures.uiCapability()->setUiHidden(compdatExport == WPIMULT_AND_DEFAULT_CONNECTION_FACTORS && !includeMsw); m_includeFracturesSummaryHeader.uiCapability()->setUiHidden(compdatExport == WPIMULT_AND_DEFAULT_CONNECTION_FACTORS); diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionDataSettingsUi.h b/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionDataSettingsUi.h index 1678e21508..93b2a8e8a1 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionDataSettingsUi.h +++ b/ApplicationCode/Commands/CompletionExportCommands/RicExportCompletionDataSettingsUi.h @@ -67,8 +67,9 @@ public: caf::PdmField compdatExport; caf::PdmField transScalingType; + caf::PdmField transScalingWBHPTimeStep; + caf::PdmField transScalingWBHP; caf::PdmField transScalingCorrection; - caf::PdmField transScalingPressureTimeStep; caf::PdmField includeMsw; caf::PdmField useLateralNTG; diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp b/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp index 704cd50564..d4ba14e048 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp +++ b/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp @@ -20,22 +20,31 @@ #include "RicWellPathFractureReportItem.h" +#include "RiaQDateTimeTools.h" #include "RiaLogging.h" +#include "RiaSummaryTools.h" #include "RimEclipseCase.h" +#include "RimEclipseResultCase.h" #include "RimEclipseView.h" #include "RimFracture.h" #include "RimFractureContainmentTools.h" #include "RimFractureTemplate.h" +#include "RimObservedEclipseUserData.h" +#include "RimProject.h" #include "RimSimWellFracture.h" #include "RimSimWellFractureCollection.h" #include "RimSimWellInView.h" +#include "RimSummaryCase.h" +#include "RimSummaryCaseMainCollection.h" #include "RimStimPlanFractureTemplate.h" #include "RimWellPath.h" #include "RimWellPathCompletions.h" #include "RimWellPathFracture.h" #include "RimWellPathFractureCollection.h" +#include "RifEclipseSummaryAddress.h" +#include "RifSummaryReaderInterface.h" #include "RigCaseCellResultsData.h" #include "RigEclipseCaseData.h" #include "RigEclipseToStimPlanCalculator.h" @@ -64,7 +73,8 @@ std::vector RicExportFractureCompletionsImpl::generateCompdat QTextStream* outputStreamForIntermediateResultsText, PressureDepletionTransScaling pressureDropScaling, PressureDepletionTransCorrection transCorrection, - int pressureScalingTimeStep) + int pressureScalingTimeStep, + double pressureScalingWBHP) { std::vector fracturesAlongWellPath; @@ -80,19 +90,21 @@ std::vector RicExportFractureCompletionsImpl::generateCompdat wellPath->wellPathGeometry(), fracturesAlongWellPath, fractureDataForReport, - outputStreamForIntermediateResultsText, pressureDropScaling, transCorrection, pressureScalingTimeStep); + outputStreamForIntermediateResultsText, pressureDropScaling, + transCorrection, pressureScalingTimeStep, pressureScalingWBHP); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector - RicExportFractureCompletionsImpl::generateCompdatValuesForSimWell(RimEclipseCase* eclipseCase, - const RimSimWellInView* well, - QTextStream* outputStreamForIntermediateResultsText, + RicExportFractureCompletionsImpl::generateCompdatValuesForSimWell(RimEclipseCase* eclipseCase, + const RimSimWellInView* well, + QTextStream* outputStreamForIntermediateResultsText, PressureDepletionTransScaling pressureDropScaling, PressureDepletionTransCorrection transCorrection, - int pressureScalingTimeStep) + int pressureScalingTimeStep, + double pressureScalingWBHP) { std::vector completionData; @@ -117,7 +129,8 @@ std::vector outputStreamForIntermediateResultsText, pressureDropScaling, transCorrection, - pressureScalingTimeStep); + pressureScalingTimeStep, + pressureScalingWBHP); completionData.insert(completionData.end(), branchCompletions.begin(), branchCompletions.end()); } @@ -134,10 +147,11 @@ std::vector const RigWellPath* wellPathGeometry, const std::vector& fractures, std::vector* fractureDataReportItems, - QTextStream* outputStreamForIntermediateResultsText, - PressureDepletionTransScaling pressureDropScaling, - PressureDepletionTransCorrection transCorrection, - int pressureScalingTimeStep) + QTextStream* outputStreamForIntermediateResultsText, + PressureDepletionTransScaling pressureDropScaling, + PressureDepletionTransCorrection transCorrection, + int pressureScalingTimeStep, + double pressureScalingWBHP) { std::vector fractureCompletions; @@ -196,7 +210,8 @@ std::vector outputStreamForIntermediateResultsText, pressureDropScaling, transCorrection, - pressureScalingTimeStep); + pressureScalingTimeStep, + pressureScalingWBHP); } //-------------------------------------------------------------------------------------------------- @@ -211,7 +226,8 @@ std::vector RicExportFractureCompletionsImpl::generateCompdat QTextStream* outputStreamForIntermediateResultsText, PressureDepletionTransScaling pressureDropScaling, PressureDepletionTransCorrection transCorrection, - int pressureScalingTimeStep) + int pressureScalingTimeStep, + double pressureScalingWBHP) { std::vector fractureCompletions; @@ -243,10 +259,13 @@ std::vector RicExportFractureCompletionsImpl::generateCompdat } } - // TODO: extract well pressure - double originalWellPressure = 200; - double currentWellPressure = 200; - + double originalWellPressure = pressureScalingWBHP; + double currentWellPressure = pressureScalingWBHP; + if (pressureDropScaling == MATRIX_TO_WELL_DP_OVER_INITIAL_DP && pressureScalingTimeStep != -1) + { + // Find well pressures (WBHP) from summary case. + getWellPressuresFromSummaryData(caseToApply, wellPathName, pressureScalingTimeStep, &originalWellPressure, ¤tWellPressure); + } // To handle several fractures in the same eclipse cell we need to keep track of the transmissibility // to the well from each fracture intersecting the cell and sum these transmissibilities at the end. // std::map > @@ -396,6 +415,49 @@ std::vector RicExportFractureCompletionsImpl::generateCompdat return fractureCompletions; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicExportFractureCompletionsImpl::getWellPressuresFromSummaryData(const RimEclipseCase* caseToApply, const QString &wellPathName, int currentTimeStep, double* originalWellPressure, double* currentWellPressure) +{ + const RimEclipseResultCase* resultCase = dynamic_cast(caseToApply); + if (resultCase) + { + std::vector caseTimeSteps = resultCase->timeStepDates(); + QDateTime originalDate = caseTimeSteps.front(); + QDateTime currentDate = caseTimeSteps[currentTimeStep]; + + RifEclipseSummaryAddress wbhpPressureAddress = RifEclipseSummaryAddress::wellAddress("WBHP", wellPathName.toStdString()); + RimSummaryCaseMainCollection* mainCollection = RiaSummaryTools::summaryCaseMainCollection(); + if (mainCollection) + { + RimSummaryCase* summaryCase = mainCollection->findSummaryCaseFromEclipseResultCase(resultCase); + + if (summaryCase) + { + std::vector values; + if (summaryCase->summaryReader()->values(wbhpPressureAddress, &values)) + { + std::vector summaryTimeSteps = summaryCase->summaryReader()->timeSteps(wbhpPressureAddress); + CVF_ASSERT(values.size() == summaryTimeSteps.size()); + for (size_t i = 0; i < summaryTimeSteps.size(); ++i) + { + QDateTime summaryDate = RiaQDateTimeTools::fromTime_t(summaryTimeSteps[i]); + if (summaryDate == originalDate) + { + *originalWellPressure = values[i]; + } + if (summaryDate == currentDate) + { + *currentWellPressure = values[i]; + } + } + } + } + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.h b/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.h index e801db9169..e421785cea 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.h +++ b/ApplicationCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.h @@ -63,14 +63,16 @@ public: QTextStream* outputStreamForIntermediateResultsText, PressureDepletionTransScaling pressureDropScaling = NO_SCALING, PressureDepletionTransCorrection transCorrection = NO_CORRECTION, - int pressureScalingTimeStep = 0); + int pressureScalingTimeStep = 0, + double pressureScalingWBHP = 200.0); static std::vector generateCompdatValuesForSimWell(RimEclipseCase* eclipseCase, const RimSimWellInView* well, QTextStream* outputStreamForIntermediateResultsText, PressureDepletionTransScaling pressureDropScaling, PressureDepletionTransCorrection transCorrection, - int pressureScalingTimeStep); + int pressureScalingTimeStep, + double pressureScalingWBHP = 200.0); static std::vector generateCompdatValues(RimEclipseCase* caseToApply, const QString& wellPathName, @@ -78,9 +80,10 @@ public: const std::vector& fractures, std::vector* fractureDataReportItems, QTextStream* outputStreamForIntermediateResultsText, - PressureDepletionTransScaling pressureDropScaling, - PressureDepletionTransCorrection transCorrection, - int pressureScalingTimeStep); + PressureDepletionTransScaling pressureDropScaling = NO_SCALING, + PressureDepletionTransCorrection transCorrection = NO_CORRECTION, + int pressureScalingTimeStep = 0, + double pressureScalingWBHP = 200.0); private: static std::vector generateCompdatValuesConst(const RimEclipseCase* caseToApply, @@ -91,7 +94,10 @@ private: QTextStream* outputStreamForIntermediateResultsText, PressureDepletionTransScaling pressureDropScaling, PressureDepletionTransCorrection transCorrection, - int pressureScalingTimeStep); + int pressureScalingTimeStep, + double pressureScalingWBHP); + + static void getWellPressuresFromSummaryData(const RimEclipseCase* caseToApply, const QString &wellPathName, int currentTimeStep, double* originalWellPressure, double* currentWellPressure); static bool checkForStimPlanConductivity(const RimFractureTemplate* fracTemplate, const RimFracture* fracture); diff --git a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp index 4389c14fb8..d926b3cf74 100644 --- a/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp +++ b/ApplicationCode/Commands/CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.cpp @@ -228,7 +228,8 @@ void RicWellPathExportCompletionDataFeatureImpl::exportCompletions(const std::ve fractureTransmissibilityExportInformationStream.get(), exportSettings.transScalingType(), exportSettings.transScalingCorrection(), - exportSettings.transScalingPressureTimeStep()); + exportSettings.transScalingWBHPTimeStep(), + exportSettings.transScalingWBHP()); appendCompletionData(&completionsPerEclipseCellAllCompletionTypes, fractureCompletionData); appendCompletionData(&completionsPerEclipseCellFracture, fractureCompletionData); @@ -269,7 +270,8 @@ void RicWellPathExportCompletionDataFeatureImpl::exportCompletions(const std::ve std::vector fractureCompletionData = RicExportFractureCompletionsImpl::generateCompdatValuesForSimWell( exportSettings.caseToApply(), simWell, fractureTransmissibilityExportInformationStream.get(), - exportSettings.transScalingType(), exportSettings.transScalingCorrection(), exportSettings.transScalingPressureTimeStep()); + exportSettings.transScalingType(), exportSettings.transScalingCorrection(), + exportSettings.transScalingWBHPTimeStep(), exportSettings.transScalingWBHP()); appendCompletionData(&completionsPerEclipseCell, fractureCompletionData); for (auto& data : completionsPerEclipseCell) @@ -1808,10 +1810,7 @@ RicMswExportInfo wellPath->wellPathGeometry(), { fracture }, nullptr, - nullptr, - RicExportFractureCompletionsImpl::NO_SCALING, - RicExportFractureCompletionsImpl::NO_CORRECTION, - 0); + nullptr); assignFractureIntersections(caseToApply, fracture, completionData, &location, &foundSubGridIntersections); }