#2553 Well CF Visualization: Add recompute of virtual conn factors

This commit is contained in:
Magne Sjaastad
2018-04-05 13:50:14 +02:00
parent 50212fff0d
commit c0054cff91
9 changed files with 144 additions and 24 deletions

View File

@@ -129,6 +129,14 @@ void RigCompletionData::setDiameter(double diameter)
m_diameter = diameter;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RigCompletionData::setTransmissibility(double transmissibility)
{
m_transmissibility = transmissibility;
}
//==================================================================================================
///
//==================================================================================================

View File

@@ -70,6 +70,7 @@ public:
RigCompletionData(const QString wellName, const RigCompletionDataGridCell& cellIndex, double orderingValue);
~RigCompletionData();
RigCompletionData(const RigCompletionData& other);
bool operator<(const RigCompletionData& other) const;
@@ -78,6 +79,7 @@ public:
void setFromFracture(double transmissibility, double skinFactor, double diameter);
void setSecondOrderingValue(double orderingValue);
void setDiameter(double diameter);
void setTransmissibility(double transmissibility);
void setTransAndWPImultBackgroundDataFromFishbone(double transmissibility,
double skinFactor,

View File

@@ -17,6 +17,7 @@
/////////////////////////////////////////////////////////////////////////////////
#include "RigVirtualPerforationTransmissibilities.h"
#include "RigStatisticsMath.h"
//--------------------------------------------------------------------------------------------------
@@ -113,6 +114,33 @@ const std::map<RigCompletionDataGridCell, std::vector<RigCompletionData>>&
return dummy;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RigVirtualPerforationTransmissibilities::setCompletionDataForSimWell(
const RigSimWellData* simWellData,
std::vector<std::vector<RigCompletionData>>& completionsPerTimeStep)
{
m_mapFromSimWellToCompletionData[simWellData] = completionsPerTimeStep;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const std::vector<RigCompletionData>&
RigVirtualPerforationTransmissibilities::completionsForSimWell(const RigSimWellData* simWellData, size_t timeStepIndex) const
{
static std::vector<RigCompletionData> dummayVector;
auto item = m_mapFromSimWellToCompletionData.find(simWellData);
if (item != m_mapFromSimWellToCompletionData.end())
{
return item->second[timeStepIndex];
}
return dummayVector;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -143,6 +171,22 @@ void RigVirtualPerforationTransmissibilities::computeMinMax(double* minValue,
}
}
for (const auto& item : m_mapFromSimWellToCompletionData)
{
auto dataForSimWell = item.second;
for (const auto& timeStepFrame : dataForSimWell)
{
for (const auto& completionData : timeStepFrame)
{
double transmissibility = completionData.transmissibility();
minMaxAccumulator.addValue(transmissibility);
posNegAccumulator.addValue(transmissibility);
}
}
}
if (*minValue) *minValue = minMaxAccumulator.min;
if (*maxValue) *maxValue = minMaxAccumulator.max;
if (*posClosestToZero) *posClosestToZero = posNegAccumulator.pos;

View File

@@ -28,6 +28,7 @@
class RigCompletionData;
class RigCompletionDataGridCell;
class RigSimWellData;
class RimWellPath;
//--------------------------------------------------------------------------------------------------
@@ -60,7 +61,13 @@ public:
const std::map<RigCompletionDataGridCell, std::vector<RigCompletionData>>&
multipleCompletionsPerEclipseCell(RimWellPath* wellPath, size_t timeStepIndex) const;
void setCompletionDataForSimWell(const RigSimWellData* simWellData, std::vector<std::vector<RigCompletionData>>& completionsPerTimeStep);
const std::vector<RigCompletionData>&
completionsForSimWell(const RigSimWellData* simWellData, size_t timeStepIndex) const;
void computeMinMax(double* minValue, double* maxValue, double* posClosestToZero, double* negClosestToZero) const;
private:
std::map<RimWellPath*, std::vector<CompletionDataFrame>> m_mapFromWellToCompletionData;
std::map<const RigSimWellData*, std::vector<std::vector<RigCompletionData>>> m_mapFromSimWellToCompletionData;
};