#3193 Pressure Differential Depletion UI and command interface.

This commit is contained in:
Gaute Lindkvist
2018-09-14 14:00:27 +02:00
parent 934c4fffd8
commit 27bc2d015c
7 changed files with 110 additions and 23 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);
}