mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3193 Pressure Differential Depletion UI and command interface.
This commit is contained in:
@@ -54,6 +54,10 @@ RicfExportWellPathCompletions::RicfExportWellPathCompletions()
|
||||
RICF_InitField(&m_includeFractures, "includeFractures", true, "Include Fractures", "", "", "");
|
||||
|
||||
RICF_InitField(&m_excludeMainBoreForFishbones, "excludeMainBoreForFishbones", false, "Exclude Main Bore for Fishbones", "", "", "");
|
||||
|
||||
RICF_InitField(&m_transScalingType, "transScalingType", RicExportCompletionDataSettingsUi::TransScalingType(), "Transmissibility Scaling Type", "", "", "");
|
||||
RICF_InitField(&m_transScalingCorrection, "transScalingCorrection", RicExportCompletionDataSettingsUi::TransScalingCorrection(), "Transmissibility Scaling Correction", "", "", "");
|
||||
RICF_InitField(&m_transScalingTimeStep, "transScalingTimeStep", 0, "Transmissibility Scaling Correction", "", "", "");
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -76,6 +80,10 @@ void RicfExportWellPathCompletions::execute()
|
||||
exportSettings->fileSplit = m_fileSplit;
|
||||
exportSettings->compdatExport = m_compdatExport;
|
||||
|
||||
exportSettings->transScalingType = m_transScalingType;
|
||||
exportSettings->transScalingCorrection = m_transScalingCorrection;
|
||||
exportSettings->transScalingPressureTimeStep = m_transScalingTimeStep;
|
||||
|
||||
exportSettings->useLateralNTG = m_useLateralNTG;
|
||||
exportSettings->includePerforations = m_includePerforations;
|
||||
exportSettings->includeFishbones = m_includeFishbones;
|
||||
|
||||
@@ -48,6 +48,10 @@ private:
|
||||
caf::PdmField<RicExportCompletionDataSettingsUi::CompdatExportType> m_compdatExport;
|
||||
caf::PdmField<RicExportCompletionDataSettingsUi::CombinationModeType> m_combinationMode;
|
||||
|
||||
caf::PdmField<RicExportCompletionDataSettingsUi::TransScalingType> m_transScalingType;
|
||||
caf::PdmField<RicExportCompletionDataSettingsUi::TransScalingCorrection> m_transScalingCorrection;
|
||||
caf::PdmField<int> m_transScalingTimeStep;
|
||||
|
||||
caf::PdmField<bool> m_useLateralNTG;
|
||||
caf::PdmField<bool> m_includePerforations;
|
||||
caf::PdmField<bool> m_includeFishbones;
|
||||
|
||||
@@ -48,6 +48,25 @@ namespace caf
|
||||
addItem(RicExportCompletionDataSettingsUi::COMBINED, "COMBINED", "Combined");
|
||||
setDefault(RicExportCompletionDataSettingsUi::INDIVIDUALLY);
|
||||
}
|
||||
|
||||
template<>
|
||||
void RicExportCompletionDataSettingsUi::TransScalingType::setUp()
|
||||
{
|
||||
addItem(RicExportFractureCompletionsImpl::NO_SCALING, "NO_SCALING", "No scaling");
|
||||
addItem(RicExportFractureCompletionsImpl::MATRIX_TO_FRACTURE_DP_OVER_MAX_DP, "MATFRAC_DP_OVER_MAXDP", "Matrix to Fracture dP over max dP");
|
||||
addItem(RicExportFractureCompletionsImpl::MATRIX_TO_FRACTURE_DP_OVER_AVG_DP, "MATFRAC_DP_OVER_AVGDP", "Matrix to Fracture dP over avg dP");
|
||||
addItem(RicExportFractureCompletionsImpl::MATRIX_TO_WELL_DP_OVER_INITIAL_DP, "MATWELL_DP_OVER_INITIALDP", "Matrix to Well dP over initial dP");
|
||||
setDefault(RicExportFractureCompletionsImpl::NO_SCALING);
|
||||
}
|
||||
|
||||
template<>
|
||||
void RicExportCompletionDataSettingsUi::TransScalingCorrection::setUp()
|
||||
{
|
||||
addItem(RicExportFractureCompletionsImpl::NO_CORRECTION, "NO_CORRECTION", "No correction");
|
||||
addItem(RicExportFractureCompletionsImpl::HOGSTOL_CORRECTION, "HOGSTOL_CORRECTION", "H<EFBFBD>gst<EFBFBD>l Correction");
|
||||
setDefault(RicExportFractureCompletionsImpl::NO_CORRECTION);
|
||||
}
|
||||
|
||||
}
|
||||
// clang-format on
|
||||
|
||||
@@ -74,6 +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_InitField(&m_includeFracturesSummaryHeader,
|
||||
"IncludeFracturesSummaryHeader",
|
||||
false,
|
||||
@@ -191,7 +214,7 @@ QList<caf::PdmOptionItemInfo>
|
||||
RicExportCompletionDataSettingsUi::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly)
|
||||
{
|
||||
QList<caf::PdmOptionItemInfo> options;
|
||||
if (fieldNeedingOptions == &timeStep)
|
||||
if (fieldNeedingOptions == &timeStep || fieldNeedingOptions == &transScalingPressureTimeStep)
|
||||
{
|
||||
QStringList timeStepNames;
|
||||
|
||||
@@ -247,6 +270,13 @@ 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);
|
||||
|
||||
// Set visibility
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "RicCaseAndFileExportSettingsUi.h"
|
||||
#include "RicExportFractureCompletionsImpl.h"
|
||||
|
||||
#include "cafPdmField.h"
|
||||
#include "cafAppEnum.h"
|
||||
@@ -55,6 +56,8 @@ public:
|
||||
};
|
||||
typedef caf::AppEnum<CombinationMode> CombinationModeType;
|
||||
|
||||
typedef caf::AppEnum<RicExportFractureCompletionsImpl::PressureDepletionTransScaling> TransScalingType;
|
||||
typedef caf::AppEnum<RicExportFractureCompletionsImpl::PressureDepletionTransCorrection> TransScalingCorrection;
|
||||
|
||||
RicExportCompletionDataSettingsUi();
|
||||
|
||||
@@ -63,6 +66,10 @@ public:
|
||||
caf::PdmField<ExportSplitType> fileSplit;
|
||||
caf::PdmField<CompdatExportType> compdatExport;
|
||||
|
||||
caf::PdmField<TransScalingType> transScalingType;
|
||||
caf::PdmField<TransScalingCorrection> transScalingCorrection;
|
||||
caf::PdmField<int> transScalingPressureTimeStep;
|
||||
|
||||
caf::PdmField<bool> includeMsw;
|
||||
caf::PdmField<bool> useLateralNTG;
|
||||
caf::PdmField<bool> includePerforations;
|
||||
|
||||
@@ -63,7 +63,8 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
|
||||
std::vector<RicWellPathFractureReportItem>* fractureDataForReport,
|
||||
QTextStream* outputStreamForIntermediateResultsText,
|
||||
PressureDepletionTransScaling pressureDropScaling,
|
||||
PressureDepletionTransCorrection transCorrection)
|
||||
PressureDepletionTransCorrection transCorrection,
|
||||
int pressureScalingTimeStep)
|
||||
{
|
||||
std::vector<const RimFracture*> fracturesAlongWellPath;
|
||||
|
||||
@@ -79,7 +80,7 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
|
||||
wellPath->wellPathGeometry(),
|
||||
fracturesAlongWellPath,
|
||||
fractureDataForReport,
|
||||
outputStreamForIntermediateResultsText, pressureDropScaling, transCorrection);
|
||||
outputStreamForIntermediateResultsText, pressureDropScaling, transCorrection, pressureScalingTimeStep);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -90,7 +91,8 @@ std::vector<RigCompletionData>
|
||||
const RimSimWellInView* well,
|
||||
QTextStream* outputStreamForIntermediateResultsText,
|
||||
PressureDepletionTransScaling pressureDropScaling,
|
||||
PressureDepletionTransCorrection transCorrection)
|
||||
PressureDepletionTransCorrection transCorrection,
|
||||
int pressureScalingTimeStep)
|
||||
{
|
||||
std::vector<RigCompletionData> completionData;
|
||||
|
||||
@@ -107,8 +109,15 @@ std::vector<RigCompletionData>
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<RigCompletionData> branchCompletions = generateCompdatValues(
|
||||
eclipseCase, well->name(), branches[branchIndex], fractures, nullptr, outputStreamForIntermediateResultsText, pressureDropScaling, transCorrection);
|
||||
std::vector<RigCompletionData> branchCompletions = generateCompdatValues(eclipseCase,
|
||||
well->name(),
|
||||
branches[branchIndex],
|
||||
fractures,
|
||||
nullptr,
|
||||
outputStreamForIntermediateResultsText,
|
||||
pressureDropScaling,
|
||||
transCorrection,
|
||||
pressureScalingTimeStep);
|
||||
|
||||
completionData.insert(completionData.end(), branchCompletions.begin(), branchCompletions.end());
|
||||
}
|
||||
@@ -127,7 +136,8 @@ std::vector<RigCompletionData>
|
||||
std::vector<RicWellPathFractureReportItem>* fractureDataReportItems,
|
||||
QTextStream* outputStreamForIntermediateResultsText,
|
||||
PressureDepletionTransScaling pressureDropScaling,
|
||||
PressureDepletionTransCorrection transCorrection)
|
||||
PressureDepletionTransCorrection transCorrection,
|
||||
int pressureScalingTimeStep)
|
||||
{
|
||||
std::vector<RigCompletionData> fractureCompletions;
|
||||
|
||||
@@ -178,8 +188,15 @@ std::vector<RigCompletionData>
|
||||
results->findOrLoadScalarResult(RiaDefines::DYNAMIC_NATIVE, "PRESSURE");
|
||||
}
|
||||
|
||||
return generateCompdatValuesConst(
|
||||
caseToApply, wellPathName, wellPathGeometry, fractures, fractureDataReportItems, outputStreamForIntermediateResultsText, pressureDropScaling, transCorrection);
|
||||
return generateCompdatValuesConst(caseToApply,
|
||||
wellPathName,
|
||||
wellPathGeometry,
|
||||
fractures,
|
||||
fractureDataReportItems,
|
||||
outputStreamForIntermediateResultsText,
|
||||
pressureDropScaling,
|
||||
transCorrection,
|
||||
pressureScalingTimeStep);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -193,7 +210,8 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
|
||||
std::vector<RicWellPathFractureReportItem>* fractureDataReportItems,
|
||||
QTextStream* outputStreamForIntermediateResultsText,
|
||||
PressureDepletionTransScaling pressureDropScaling,
|
||||
PressureDepletionTransCorrection transCorrection)
|
||||
PressureDepletionTransCorrection transCorrection,
|
||||
int pressureScalingTimeStep)
|
||||
{
|
||||
std::vector<RigCompletionData> fractureCompletions;
|
||||
|
||||
@@ -209,8 +227,21 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
|
||||
size_t pressureResultIndex = results->findScalarResultIndex(RiaDefines::DYNAMIC_NATIVE, "PRESSURE");
|
||||
const RigActiveCellInfo* actCellInfo = caseToApply->eclipseCaseData()->activeCellInfo(RiaDefines::MATRIX_MODEL);
|
||||
|
||||
const std::vector<double>& originalMatrixPressures = results->cellScalarResults(pressureResultIndex).front();
|
||||
const std::vector<double>& currentMatrixPressures = results->cellScalarResults(pressureResultIndex).back();
|
||||
const std::vector<std::vector<double>>* pressureResultVector = nullptr;
|
||||
const std::vector<double>* originalMatrixPressures = nullptr;
|
||||
const std::vector<double>* currentMatrixPressures = nullptr;
|
||||
if (pressureDropScaling != NO_SCALING)
|
||||
{
|
||||
pressureResultVector = &results->cellScalarResults(pressureResultIndex);
|
||||
CVF_ASSERT(!pressureResultVector->empty());
|
||||
|
||||
originalMatrixPressures = &(pressureResultVector->front());
|
||||
currentMatrixPressures = originalMatrixPressures;
|
||||
if (pressureScalingTimeStep < pressureResultVector->size())
|
||||
{
|
||||
currentMatrixPressures = &pressureResultVector->at(pressureScalingTimeStep);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: extract well pressure
|
||||
double originalWellPressure = 200;
|
||||
@@ -273,7 +304,7 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
|
||||
std::map<size_t, double> originalLumpedMatrixToFractureTrans =
|
||||
scaledCondenser.scaleMatrixTransmissibilitiesByPressureMatrixFracture(actCellInfo,
|
||||
currentWellPressure,
|
||||
currentMatrixPressures,
|
||||
*currentMatrixPressures,
|
||||
pressureDropScaling ==
|
||||
MATRIX_TO_FRACTURE_DP_OVER_AVG_DP);
|
||||
// 2: Calculate new external transmissibilities
|
||||
@@ -303,7 +334,7 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
|
||||
// 1. Scale matrix to fracture transmissibilities by matrix to well pressure
|
||||
std::map<size_t, double> originalLumpedMatrixToFractureTrans =
|
||||
scaledCondenser.scaleMatrixTransmissibilitiesByPressureMatrixWell(
|
||||
actCellInfo, originalWellPressure, currentWellPressure, originalMatrixPressures, currentMatrixPressures);
|
||||
actCellInfo, originalWellPressure, currentWellPressure, *originalMatrixPressures, *currentMatrixPressures);
|
||||
// 2: Calculate new external transmissibilities
|
||||
scaledCondenser.calculateCondensedTransmissibilities();
|
||||
|
||||
|
||||
@@ -61,14 +61,16 @@ public:
|
||||
RimEclipseCase* caseToApply,
|
||||
std::vector<RicWellPathFractureReportItem>* fractureDataForReport,
|
||||
QTextStream* outputStreamForIntermediateResultsText,
|
||||
PressureDepletionTransScaling pressureDropScaling = MATRIX_TO_WELL_DP_OVER_INITIAL_DP,
|
||||
PressureDepletionTransCorrection transCorrection = HOGSTOL_CORRECTION);
|
||||
PressureDepletionTransScaling pressureDropScaling = NO_SCALING,
|
||||
PressureDepletionTransCorrection transCorrection = NO_CORRECTION,
|
||||
int pressureScalingTimeStep = 0);
|
||||
|
||||
static std::vector<RigCompletionData> generateCompdatValuesForSimWell(RimEclipseCase* eclipseCase,
|
||||
const RimSimWellInView* well,
|
||||
QTextStream* outputStreamForIntermediateResultsText,
|
||||
PressureDepletionTransScaling pressureDropScaling = MATRIX_TO_WELL_DP_OVER_INITIAL_DP,
|
||||
PressureDepletionTransCorrection transCorrection = HOGSTOL_CORRECTION);
|
||||
PressureDepletionTransScaling pressureDropScaling,
|
||||
PressureDepletionTransCorrection transCorrection,
|
||||
int pressureScalingTimeStep);
|
||||
|
||||
static std::vector<RigCompletionData> generateCompdatValues(RimEclipseCase* caseToApply,
|
||||
const QString& wellPathName,
|
||||
@@ -77,7 +79,8 @@ public:
|
||||
std::vector<RicWellPathFractureReportItem>* fractureDataReportItems,
|
||||
QTextStream* outputStreamForIntermediateResultsText,
|
||||
PressureDepletionTransScaling pressureDropScaling,
|
||||
PressureDepletionTransCorrection transCorrection);
|
||||
PressureDepletionTransCorrection transCorrection,
|
||||
int pressureScalingTimeStep);
|
||||
|
||||
private:
|
||||
static std::vector<RigCompletionData> generateCompdatValuesConst(const RimEclipseCase* caseToApply,
|
||||
@@ -87,7 +90,8 @@ private:
|
||||
std::vector<RicWellPathFractureReportItem>* fractureDataReportItems,
|
||||
QTextStream* outputStreamForIntermediateResultsText,
|
||||
PressureDepletionTransScaling pressureDropScaling,
|
||||
PressureDepletionTransCorrection transCorrection);
|
||||
PressureDepletionTransCorrection transCorrection,
|
||||
int pressureScalingTimeStep);
|
||||
|
||||
static bool checkForStimPlanConductivity(const RimFractureTemplate* fracTemplate, const RimFracture* fracture);
|
||||
|
||||
|
||||
@@ -227,7 +227,8 @@ void RicWellPathExportCompletionDataFeatureImpl::exportCompletions(const std::ve
|
||||
reportItems,
|
||||
fractureTransmissibilityExportInformationStream.get(),
|
||||
exportSettings.transScalingType(),
|
||||
exportSettings.transScalingCorrection());
|
||||
exportSettings.transScalingCorrection(),
|
||||
exportSettings.transScalingPressureTimeStep());
|
||||
|
||||
appendCompletionData(&completionsPerEclipseCellAllCompletionTypes, fractureCompletionData);
|
||||
appendCompletionData(&completionsPerEclipseCellFracture, fractureCompletionData);
|
||||
@@ -267,7 +268,8 @@ void RicWellPathExportCompletionDataFeatureImpl::exportCompletions(const std::ve
|
||||
|
||||
std::vector<RigCompletionData> fractureCompletionData =
|
||||
RicExportFractureCompletionsImpl::generateCompdatValuesForSimWell(
|
||||
exportSettings.caseToApply(), simWell, fractureTransmissibilityExportInformationStream.get());
|
||||
exportSettings.caseToApply(), simWell, fractureTransmissibilityExportInformationStream.get(),
|
||||
exportSettings.transScalingType(), exportSettings.transScalingCorrection(), exportSettings.transScalingPressureTimeStep());
|
||||
appendCompletionData(&completionsPerEclipseCell, fractureCompletionData);
|
||||
|
||||
for (auto& data : completionsPerEclipseCell)
|
||||
@@ -1808,7 +1810,8 @@ RicMswExportInfo
|
||||
nullptr,
|
||||
nullptr,
|
||||
RicExportFractureCompletionsImpl::NO_SCALING,
|
||||
RicExportFractureCompletionsImpl::NO_CORRECTION);
|
||||
RicExportFractureCompletionsImpl::NO_CORRECTION,
|
||||
0);
|
||||
|
||||
assignFractureIntersections(caseToApply, fracture, completionData, &location, &foundSubGridIntersections);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user