#3670 Implement initial WBHP changes.

This commit is contained in:
Gaute Lindkvist
2018-11-12 15:00:13 +01:00
parent 7963a18928
commit ea053eac2d
7 changed files with 105 additions and 31 deletions

View File

@@ -58,7 +58,7 @@ RicfExportWellPathCompletions::RicfExportWellPathCompletions()
RICF_InitField(&m_transScalingType, "transScalingType", RicExportCompletionDataSettingsUi::TransScalingType(), "Transmissibility Scaling Type", "", "", ""); RICF_InitField(&m_transScalingType, "transScalingType", RicExportCompletionDataSettingsUi::TransScalingType(), "Transmissibility Scaling Type", "", "", "");
RICF_InitField(&m_transScalingTimeStep, "transScalingTimeStep", 0, "Transmissibility Scaling Pressure Time Step", "", "", ""); RICF_InitField(&m_transScalingTimeStep, "transScalingTimeStep", 0, "Transmissibility Scaling Pressure Time Step", "", "", "");
RICF_InitField(&m_transScalingSummaryWBHP, "transScalingWBHPFromSummary", true, "Transmissibility Scaling WBHP from summary", "", "", ""); RICF_InitField(&m_transScalingInitialWBHP, "transScalingWBHPFromSummary", RicExportCompletionDataSettingsUi::TransScalingInitialWBHP(), "Transmissibility Scaling WBHP from summary", "", "", "");
RICF_InitField(&m_transScalingWBHP, "transScalingWBHP", 200.0, "Transmissibility Scaling Constant WBHP Value", "", "", ""); RICF_InitField(&m_transScalingWBHP, "transScalingWBHP", 200.0, "Transmissibility Scaling Constant WBHP Value", "", "", "");
} }
@@ -86,7 +86,7 @@ void RicfExportWellPathCompletions::execute()
exportSettings->transScalingType = m_transScalingType; exportSettings->transScalingType = m_transScalingType;
exportSettings->transScalingTimeStep = m_transScalingTimeStep; exportSettings->transScalingTimeStep = m_transScalingTimeStep;
exportSettings->transScalingSummaryWBHP = m_transScalingSummaryWBHP; exportSettings->transScalingInitialWBHP = m_transScalingInitialWBHP;
exportSettings->transScalingWBHP = m_transScalingWBHP; exportSettings->transScalingWBHP = m_transScalingWBHP;
exportSettings->useLateralNTG = m_useLateralNTG; exportSettings->useLateralNTG = m_useLateralNTG;

View File

@@ -48,10 +48,10 @@ private:
caf::PdmField<RicExportCompletionDataSettingsUi::CompdatExportType> m_compdatExport; caf::PdmField<RicExportCompletionDataSettingsUi::CompdatExportType> m_compdatExport;
caf::PdmField<RicExportCompletionDataSettingsUi::CombinationModeType> m_combinationMode; caf::PdmField<RicExportCompletionDataSettingsUi::CombinationModeType> m_combinationMode;
caf::PdmField<RicExportCompletionDataSettingsUi::TransScalingType> m_transScalingType; caf::PdmField<RicExportCompletionDataSettingsUi::TransScalingType> m_transScalingType;
caf::PdmField<int> m_transScalingTimeStep; caf::PdmField<int> m_transScalingTimeStep;
caf::PdmField<bool> m_transScalingSummaryWBHP; caf::PdmField<RicExportCompletionDataSettingsUi::TransScalingInitialWBHP> m_transScalingInitialWBHP;
caf::PdmField<double> m_transScalingWBHP; caf::PdmField<double> m_transScalingWBHP;
caf::PdmField<bool> m_useLateralNTG; caf::PdmField<bool> m_useLateralNTG;
caf::PdmField<bool> m_includePerforations; caf::PdmField<bool> m_includePerforations;

View File

@@ -65,6 +65,16 @@ namespace caf
setDefault(RicExportFractureCompletionsImpl::NO_SCALING); setDefault(RicExportFractureCompletionsImpl::NO_SCALING);
} }
template<>
void RicExportCompletionDataSettingsUi::TransScalingInitialWBHP::setUp()
{
addItem(RicExportFractureCompletionsImpl::FROM_PRODUCTION_START, "PROD_START", "Initial WBHP From Production Start");
addItem(RicExportFractureCompletionsImpl::FROM_PRODUCTION_START_W_MIN, "PROD_START_MIN", "Initial WBHP From Production Start With Minimum WBHP");
addItem(RicExportFractureCompletionsImpl::FIXED_INITIAL_WBHP, "FIXED_INITIAL_WBHP", "Fixed Initial WBHP");
setDefault(RicExportFractureCompletionsImpl::FROM_PRODUCTION_START);
}
} }
// clang-format on // clang-format on
@@ -91,10 +101,10 @@ RicExportCompletionDataSettingsUi::RicExportCompletionDataSettingsUi()
CAF_PDM_InitField(&includeFishbones, "IncludeFishbones", true, "Fishbones", "", "", ""); CAF_PDM_InitField(&includeFishbones, "IncludeFishbones", true, "Fishbones", "", "", "");
CAF_PDM_InitField(&includeFractures, "IncludeFractures", true, "Fractures", "", "", ""); CAF_PDM_InitField(&includeFractures, "IncludeFractures", true, "Fractures", "", "", "");
CAF_PDM_InitFieldNoDefault(&transScalingType, "TransScalingType", " Pressure Diff. Depletion Transmissibility Scaling (BETA)", "", "", ""); CAF_PDM_InitFieldNoDefault(&transScalingType, "TransScalingType", " Pressure Diff. Depletion Transmissibility Scaling", "", "", "");
CAF_PDM_InitField(&transScalingTimeStep, "TransScalingTimeStep", 0, " PDD Current Pressure Time Step (BETA)", "", "", ""); CAF_PDM_InitField(&transScalingTimeStep, "TransScalingTimeStep", 0, " PDD Current WBHP Time Step", "", "", "");
CAF_PDM_InitField(&transScalingWBHP, "TransScalingWBHP", 200.0, " PDD Default WBHP Value (BETA)", "", "", ""); CAF_PDM_InitFieldNoDefault(&transScalingInitialWBHP, "TransScalingInitialWBHP", " PDD Initial WBHP Selection", "", "", "");
CAF_PDM_InitField(&transScalingSummaryWBHP, "TransScalingWBHPFromCurrentTime", true, " PDD WBHP from Summary File at Current Time (BETA)", "", "", ""); CAF_PDM_InitField(&transScalingWBHP, "TransScalingWBHP", 200.0, " PDD Initial WBHP Value", "", "", "");
CAF_PDM_InitField(&excludeMainBoreForFishbones, CAF_PDM_InitField(&excludeMainBoreForFishbones,
"ExcludeMainBoreForFishbones", "ExcludeMainBoreForFishbones",
@@ -319,12 +329,36 @@ void RicExportCompletionDataSettingsUi::defineUiOrdering(QString uiConfigName, c
{ {
group->add(&transScalingType); group->add(&transScalingType);
group->add(&transScalingTimeStep); group->add(&transScalingTimeStep);
group->add(&transScalingInitialWBHP);
group->add(&transScalingWBHP); group->add(&transScalingWBHP);
group->add(&transScalingSummaryWBHP);
transScalingTimeStep.uiCapability()->setUiReadOnly(transScalingType() == RicExportFractureCompletionsImpl::NO_SCALING); if (transScalingType() == RicExportFractureCompletionsImpl::NO_SCALING)
transScalingWBHP.uiCapability()->setUiReadOnly(transScalingType() == RicExportFractureCompletionsImpl::NO_SCALING); {
transScalingSummaryWBHP.uiCapability()->setUiReadOnly(transScalingType() == RicExportFractureCompletionsImpl::NO_SCALING); transScalingTimeStep.uiCapability()->setUiReadOnly(true);
transScalingInitialWBHP.uiCapability()->setUiReadOnly(true);
transScalingWBHP.uiCapability()->setUiReadOnly(true);
}
else
{
transScalingTimeStep.uiCapability()->setUiReadOnly(false);
transScalingInitialWBHP.uiCapability()->setUiReadOnly(false);
if (transScalingInitialWBHP == RicExportFractureCompletionsImpl::FROM_PRODUCTION_START)
{
transScalingWBHP.uiCapability()->setUiReadOnly(true);
}
else
{
transScalingWBHP.uiCapability()->setUiReadOnly(false);
if (transScalingInitialWBHP == RicExportFractureCompletionsImpl::FROM_PRODUCTION_START_W_MIN)
{
transScalingWBHP.uiCapability()->setUiName(" PDD Minimum Initial WBHP");
}
else
{
transScalingWBHP.uiCapability()->setUiName(" PDD Fixed Initial WBHP");
}
}
}
} }
// Set visibility // Set visibility

View File

@@ -57,6 +57,7 @@ public:
typedef caf::AppEnum<CombinationMode> CombinationModeType; typedef caf::AppEnum<CombinationMode> CombinationModeType;
typedef caf::AppEnum<RicExportFractureCompletionsImpl::PressureDepletionTransScaling> TransScalingType; typedef caf::AppEnum<RicExportFractureCompletionsImpl::PressureDepletionTransScaling> TransScalingType;
typedef caf::AppEnum<RicExportFractureCompletionsImpl::PressureDepletionInitialWBHP> TransScalingInitialWBHP;
RicExportCompletionDataSettingsUi(); RicExportCompletionDataSettingsUi();
@@ -67,7 +68,7 @@ public:
caf::PdmField<TransScalingType> transScalingType; caf::PdmField<TransScalingType> transScalingType;
caf::PdmField<int> transScalingTimeStep; caf::PdmField<int> transScalingTimeStep;
caf::PdmField<bool> transScalingSummaryWBHP; caf::PdmField<TransScalingInitialWBHP> transScalingInitialWBHP;
caf::PdmField<double> transScalingWBHP; caf::PdmField<double> transScalingWBHP;
caf::PdmField<bool> includeMsw; caf::PdmField<bool> includeMsw;

View File

@@ -228,21 +228,45 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
PressureDepletionTransScaling currentPressureDropScaling = pdParams.pressureDropScaling; PressureDepletionTransScaling currentPressureDropScaling = pdParams.pressureDropScaling;
int initialWellProductionTimeStep = 0; int initialWellProductionTimeStep = 0;
double initialWellPressure = pdParams.pressureScalingWBHP; double initialWellPressure = 0;
double currentWellPressure = pdParams.pressureScalingWBHP; double currentWellPressure = 0;
if (currentPressureDropScaling != NO_SCALING && pdParams.wbhpFromSummaryCase)
if (currentPressureDropScaling != NO_SCALING)
{ {
double minimumWBHP = pdParams.pressureScalingWBHP;
double initialWBHPFromSummary = 0.0;
double currentWBHPFromSummary = 0.0;
// Find well pressures (WBHP) from summary case. // Find well pressures (WBHP) from summary case.
getWellPressuresAndInitialProductionTimeStepFromSummaryData(caseToApply, getWellPressuresAndInitialProductionTimeStepFromSummaryData(caseToApply,
wellPathName, wellPathName,
pdParams.pressureScalingTimeStep, pdParams.pressureScalingTimeStep,
&initialWellProductionTimeStep, &initialWellProductionTimeStep,
&initialWellPressure, &initialWBHPFromSummary,
&currentWellPressure); &currentWBHPFromSummary);
// Don't perform any scaling for this well if the current time step is before the initial well production time step. currentWellPressure = currentWBHPFromSummary;
if (pdParams.pressureScalingTimeStep <= initialWellProductionTimeStep) if (pdParams.initialWbhpSource == FROM_PRODUCTION_START)
{ {
initialWellPressure = initialWBHPFromSummary;
}
else if (pdParams.initialWbhpSource == FROM_PRODUCTION_START_W_MIN)
{
initialWellPressure = initialWBHPFromSummary;
if (pdParams.pressureScalingTimeStep <= initialWellProductionTimeStep)
{
initialWellPressure = minimumWBHP;
}
}
else
{
initialWellPressure = minimumWBHP;
}
// Final check for initial vs current pressure to see if scaling is valid
if (std::fabs(initialWellPressure - currentWellPressure) < 1.0e-6)
{
// Don't perform scaling if current pressure is equal to initial.
currentPressureDropScaling = NO_SCALING; currentPressureDropScaling = NO_SCALING;
} }
} }

View File

@@ -51,24 +51,31 @@ public:
MATRIX_TO_WELL_DP_OVER_MAX_INITIAL_DP MATRIX_TO_WELL_DP_OVER_MAX_INITIAL_DP
}; };
enum PressureDepletionInitialWBHP
{
FROM_PRODUCTION_START,
FROM_PRODUCTION_START_W_MIN,
FIXED_INITIAL_WBHP
};
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
struct PressureDepletionParameters struct PressureDepletionParameters
{ {
PressureDepletionParameters(PressureDepletionTransScaling pressureDropScaling = NO_SCALING, PressureDepletionParameters(PressureDepletionTransScaling pressureDropScaling = NO_SCALING,
int pressureScalingTimeStep = 0, int pressureScalingTimeStep = 0,
bool wbhpFromSummaryCase = false, PressureDepletionInitialWBHP initialWbhpSource = FROM_PRODUCTION_START,
double pressureScalingWBHP = 200.0) double pressureScalingWBHP = 200.0)
: pressureDropScaling(pressureDropScaling) : pressureDropScaling(pressureDropScaling)
, pressureScalingTimeStep(pressureScalingTimeStep) , pressureScalingTimeStep(pressureScalingTimeStep)
, wbhpFromSummaryCase(wbhpFromSummaryCase) , initialWbhpSource(initialWbhpSource)
, pressureScalingWBHP(pressureScalingWBHP) , pressureScalingWBHP(pressureScalingWBHP)
{} {}
PressureDepletionTransScaling pressureDropScaling; PressureDepletionTransScaling pressureDropScaling;
int pressureScalingTimeStep; int pressureScalingTimeStep;
bool wbhpFromSummaryCase; PressureDepletionInitialWBHP initialWbhpSource;
double pressureScalingWBHP; double pressureScalingWBHP;
}; };

View File

@@ -247,7 +247,7 @@ void RicWellPathExportCompletionDataFeatureImpl::exportCompletions(const std::ve
fractureTransmissibilityExportInformationStream.get(), fractureTransmissibilityExportInformationStream.get(),
RicExportFractureCompletionsImpl::PressureDepletionParameters(exportSettings.transScalingType(), RicExportFractureCompletionsImpl::PressureDepletionParameters(exportSettings.transScalingType(),
exportSettings.transScalingTimeStep(), exportSettings.transScalingTimeStep(),
exportSettings.transScalingSummaryWBHP(), exportSettings.transScalingInitialWBHP(),
exportSettings.transScalingWBHP())); exportSettings.transScalingWBHP()));
appendCompletionData(&completionsPerEclipseCellAllCompletionTypes, fractureCompletionData); appendCompletionData(&completionsPerEclipseCellAllCompletionTypes, fractureCompletionData);
@@ -293,7 +293,7 @@ void RicWellPathExportCompletionDataFeatureImpl::exportCompletions(const std::ve
fractureTransmissibilityExportInformationStream.get(), fractureTransmissibilityExportInformationStream.get(),
RicExportFractureCompletionsImpl::PressureDepletionParameters(exportSettings.transScalingType(), RicExportFractureCompletionsImpl::PressureDepletionParameters(exportSettings.transScalingType(),
exportSettings.transScalingTimeStep(), exportSettings.transScalingTimeStep(),
exportSettings.transScalingSummaryWBHP(), exportSettings.transScalingInitialWBHP(),
exportSettings.transScalingWBHP())); exportSettings.transScalingWBHP()));
appendCompletionData(&completionsPerEclipseCell, fractureCompletionData); appendCompletionData(&completionsPerEclipseCell, fractureCompletionData);
@@ -2638,9 +2638,17 @@ QString RicWellPathExportCompletionDataFeatureImpl::createPressureDepletionFileN
suffix += QString("B_"); suffix += QString("B_");
if (exportSettings.transScalingSummaryWBHP()) if (exportSettings.transScalingInitialWBHP() == RicExportFractureCompletionsImpl::FROM_PRODUCTION_START)
{ {
suffix += QString("_SUMM_"); suffix += QString("_WBHPROD_");
}
else if (exportSettings.transScalingInitialWBHP() == RicExportFractureCompletionsImpl::FROM_PRODUCTION_START_W_MIN)
{
suffix += QString("_WBHPMIN_");
}
else
{
suffix += QString("_WBHPFIX_");
} }
RimEclipseCase* eclipseCase = exportSettings.caseToApply(); RimEclipseCase* eclipseCase = exportSettings.caseToApply();