#3193 Implement setting BHP and reading it from summary case

This commit is contained in:
Gaute Lindkvist 2018-09-17 10:51:08 +02:00
parent 9a47cdf8ab
commit 9dd6ccb24d
7 changed files with 133 additions and 45 deletions

View File

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

View File

@ -49,8 +49,9 @@ private:
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<double> m_transScalingWBHP;
caf::PdmField<RicExportCompletionDataSettingsUi::TransScalingCorrection> m_transScalingCorrection;
caf::PdmField<bool> m_useLateralNTG;
caf::PdmField<bool> m_includePerforations;

View File

@ -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<caf::PdmOptionItemInfo>
RicExportCompletionDataSettingsUi::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly)
{
QList<caf::PdmOptionItemInfo> options;
if (fieldNeedingOptions == &timeStep || fieldNeedingOptions == &transScalingPressureTimeStep)
if (fieldNeedingOptions == &timeStep || fieldNeedingOptions == &transScalingWBHPTimeStep)
{
QStringList timeStepNames;
@ -222,7 +234,7 @@ QList<caf::PdmOptionItemInfo>
{
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);

View File

@ -67,8 +67,9 @@ public:
caf::PdmField<CompdatExportType> compdatExport;
caf::PdmField<TransScalingType> transScalingType;
caf::PdmField<int> transScalingWBHPTimeStep;
caf::PdmField<double> transScalingWBHP;
caf::PdmField<TransScalingCorrection> transScalingCorrection;
caf::PdmField<int> transScalingPressureTimeStep;
caf::PdmField<bool> includeMsw;
caf::PdmField<bool> useLateralNTG;

View File

@ -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<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
QTextStream* outputStreamForIntermediateResultsText,
PressureDepletionTransScaling pressureDropScaling,
PressureDepletionTransCorrection transCorrection,
int pressureScalingTimeStep)
int pressureScalingTimeStep,
double pressureScalingWBHP)
{
std::vector<const RimFracture*> fracturesAlongWellPath;
@ -80,7 +90,8 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
wellPath->wellPathGeometry(),
fracturesAlongWellPath,
fractureDataForReport,
outputStreamForIntermediateResultsText, pressureDropScaling, transCorrection, pressureScalingTimeStep);
outputStreamForIntermediateResultsText, pressureDropScaling,
transCorrection, pressureScalingTimeStep, pressureScalingWBHP);
}
//--------------------------------------------------------------------------------------------------
@ -92,7 +103,8 @@ std::vector<RigCompletionData>
QTextStream* outputStreamForIntermediateResultsText,
PressureDepletionTransScaling pressureDropScaling,
PressureDepletionTransCorrection transCorrection,
int pressureScalingTimeStep)
int pressureScalingTimeStep,
double pressureScalingWBHP)
{
std::vector<RigCompletionData> completionData;
@ -117,7 +129,8 @@ std::vector<RigCompletionData>
outputStreamForIntermediateResultsText,
pressureDropScaling,
transCorrection,
pressureScalingTimeStep);
pressureScalingTimeStep,
pressureScalingWBHP);
completionData.insert(completionData.end(), branchCompletions.begin(), branchCompletions.end());
}
@ -137,7 +150,8 @@ std::vector<RigCompletionData>
QTextStream* outputStreamForIntermediateResultsText,
PressureDepletionTransScaling pressureDropScaling,
PressureDepletionTransCorrection transCorrection,
int pressureScalingTimeStep)
int pressureScalingTimeStep,
double pressureScalingWBHP)
{
std::vector<RigCompletionData> fractureCompletions;
@ -196,7 +210,8 @@ std::vector<RigCompletionData>
outputStreamForIntermediateResultsText,
pressureDropScaling,
transCorrection,
pressureScalingTimeStep);
pressureScalingTimeStep,
pressureScalingWBHP);
}
//--------------------------------------------------------------------------------------------------
@ -211,7 +226,8 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
QTextStream* outputStreamForIntermediateResultsText,
PressureDepletionTransScaling pressureDropScaling,
PressureDepletionTransCorrection transCorrection,
int pressureScalingTimeStep)
int pressureScalingTimeStep,
double pressureScalingWBHP)
{
std::vector<RigCompletionData> fractureCompletions;
@ -243,10 +259,13 @@ std::vector<RigCompletionData> 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, &currentWellPressure);
}
// 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 <eclipseCellIndex ,map< fracture, trans> >
@ -396,6 +415,49 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdat
return fractureCompletions;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicExportFractureCompletionsImpl::getWellPressuresFromSummaryData(const RimEclipseCase* caseToApply, const QString &wellPathName, int currentTimeStep, double* originalWellPressure, double* currentWellPressure)
{
const RimEclipseResultCase* resultCase = dynamic_cast<const RimEclipseResultCase*>(caseToApply);
if (resultCase)
{
std::vector<QDateTime> 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<double> values;
if (summaryCase->summaryReader()->values(wbhpPressureAddress, &values))
{
std::vector<time_t> 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];
}
}
}
}
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -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<RigCompletionData> generateCompdatValuesForSimWell(RimEclipseCase* eclipseCase,
const RimSimWellInView* well,
QTextStream* outputStreamForIntermediateResultsText,
PressureDepletionTransScaling pressureDropScaling,
PressureDepletionTransCorrection transCorrection,
int pressureScalingTimeStep);
int pressureScalingTimeStep,
double pressureScalingWBHP = 200.0);
static std::vector<RigCompletionData> generateCompdatValues(RimEclipseCase* caseToApply,
const QString& wellPathName,
@ -78,9 +80,10 @@ public:
const std::vector<const RimFracture*>& fractures,
std::vector<RicWellPathFractureReportItem>* 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<RigCompletionData> 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);

View File

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