#3543 Pressure Depletion Indicate the production start of the different wells for the time steps.

This commit is contained in:
Gaute Lindkvist 2018-10-29 10:00:27 +01:00
parent 643dd5596b
commit 1b155ae71f
3 changed files with 68 additions and 8 deletions

View File

@ -19,6 +19,11 @@
#include "RiaApplication.h" #include "RiaApplication.h"
#include "RicExportCompletionDataSettingsUi.h" #include "RicExportCompletionDataSettingsUi.h"
#include "RicExportFractureCompletionsImpl.h"
#include "RimProject.h"
#include "RimWellPath.h"
#include "RimWellPathCompletions.h"
// clang-format off // clang-format off
namespace caf namespace caf
@ -192,7 +197,7 @@ QList<caf::PdmOptionItemInfo>
RicExportCompletionDataSettingsUi::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) RicExportCompletionDataSettingsUi::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly)
{ {
QList<caf::PdmOptionItemInfo> options; QList<caf::PdmOptionItemInfo> options;
if (fieldNeedingOptions == &timeStep || fieldNeedingOptions == &transScalingTimeStep) if (fieldNeedingOptions == &timeStep)
{ {
QStringList timeStepNames; QStringList timeStepNames;
@ -205,6 +210,29 @@ QList<caf::PdmOptionItemInfo>
options.push_back(caf::PdmOptionItemInfo(timeStepNames[i], i)); options.push_back(caf::PdmOptionItemInfo(timeStepNames[i], i));
} }
} }
else if (fieldNeedingOptions == &transScalingTimeStep)
{
std::map<int, QStringList> wellProductionStartStrings = generateWellProductionStartStrings();
QStringList timeStepNames;
if (caseToApply)
{
timeStepNames = caseToApply->timeStepStrings();
}
for (int i = 0; i < timeStepNames.size(); i++)
{
QString timeStepString = timeStepNames[i];
auto it = wellProductionStartStrings.find(i);
if (it != wellProductionStartStrings.end())
{
timeStepString += QString(" [Start: %1]").arg(it->second.join(", "));
}
options.push_back(caf::PdmOptionItemInfo(timeStepString, i));
}
}
else else
{ {
options = RicCaseAndFileExportSettingsUi::calculateValueOptions(fieldNeedingOptions, useOptionsOnly); options = RicCaseAndFileExportSettingsUi::calculateValueOptions(fieldNeedingOptions, useOptionsOnly);
@ -285,3 +313,34 @@ void RicExportCompletionDataSettingsUi::defineUiOrdering(QString uiConfigName, c
uiOrdering.skipRemainingFields(); uiOrdering.skipRemainingFields();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::map<int, QStringList> RicExportCompletionDataSettingsUi::generateWellProductionStartStrings()
{
std::map<int, QStringList> wellProductionStartStrings;
const RimProject* project = nullptr;
if (caseToApply)
{
caseToApply->firstAncestorOrThisOfTypeAsserted(project);
for (const RimWellPath* wellPath : project->allWellPaths())
{
int initialWellProductionTimeStep = -1;
double initialWellPressure = 0.0;
double currentWellPressure = 0.0;
RicExportFractureCompletionsImpl::getWellPressuresAndInitialProductionTimeStepFromSummaryData(caseToApply,
wellPath->completions()->wellNameForExport(),
0,
&initialWellProductionTimeStep,
&initialWellPressure,
&currentWellPressure);
if (initialWellProductionTimeStep >= 0)
{
wellProductionStartStrings[initialWellProductionTimeStep] += QString("%1 (%2 Bar)").arg(wellPath->name()).arg(initialWellPressure, 4, 'f', 1);
}
}
}
return wellProductionStartStrings;
}

View File

@ -95,6 +95,7 @@ protected:
QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) override; QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) override;
void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
std::map<int, QStringList> generateWellProductionStartStrings();
private: private:
caf::PdmField<CombinationModeType> m_reportCompletionTypesSeparately; caf::PdmField<CombinationModeType> m_reportCompletionTypesSeparately;

View File

@ -91,6 +91,13 @@ public:
QTextStream* outputStreamForIntermediateResultsText, QTextStream* outputStreamForIntermediateResultsText,
PressureDepletionParameters pdParams = PressureDepletionParameters()); PressureDepletionParameters pdParams = PressureDepletionParameters());
static void getWellPressuresAndInitialProductionTimeStepFromSummaryData(const RimEclipseCase* caseToApply,
const QString& wellPathName,
int currentTimeStep,
int* initialTimeStep,
double* initialWellPressure,
double* currentWellPressure);
private: private:
static std::vector<RigCompletionData> generateCompdatValuesConst(const RimEclipseCase* caseToApply, static std::vector<RigCompletionData> generateCompdatValuesConst(const RimEclipseCase* caseToApply,
const QString& wellPathName, const QString& wellPathName,
@ -100,13 +107,6 @@ private:
QTextStream* outputStreamForIntermediateResultsText, QTextStream* outputStreamForIntermediateResultsText,
PressureDepletionParameters pdParams); PressureDepletionParameters pdParams);
static void getWellPressuresAndInitialProductionTimeStepFromSummaryData(const RimEclipseCase* caseToApply,
const QString& wellPathName,
int currentTimeStep,
int* initialTimeStep,
double* initialWellPressure,
double* currentWellPressure);
static bool checkForStimPlanConductivity(const RimFractureTemplate* fracTemplate, const RimFracture* fracture); static bool checkForStimPlanConductivity(const RimFractureTemplate* fracTemplate, const RimFracture* fracture);
static void calculateInternalFractureTransmissibilities(const RigFractureGrid* fractureGrid, static void calculateInternalFractureTransmissibilities(const RigFractureGrid* fractureGrid,