mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2553 Well CF Visualization: Add recompute of virtual conn factors
This commit is contained in:
@@ -129,6 +129,14 @@ void RigCompletionData::setDiameter(double diameter)
|
||||
m_diameter = diameter;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RigCompletionData::setTransmissibility(double transmissibility)
|
||||
{
|
||||
m_transmissibility = transmissibility;
|
||||
}
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
//==================================================================================================
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user