mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2544 Well CF Viz : Add basiz viz with spheres, add legend to view
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "RigVirtualPerforationTransmissibilities.h"
|
||||
#include "RigStatisticsMath.h"
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
@@ -44,9 +45,10 @@ void CompletionDataFrame::setCompletionData(const std::vector<RigCompletionData>
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const std::map<RigCompletionDataGridCell, std::vector<RigCompletionData>>& CompletionDataFrame::multipleCompletionsPerEclipseCell() const
|
||||
const std::map<RigCompletionDataGridCell, std::vector<RigCompletionData>>&
|
||||
CompletionDataFrame::multipleCompletionsPerEclipseCell() const
|
||||
{
|
||||
return m_multipleCompletionsPerEclipseCell;
|
||||
}
|
||||
@@ -64,29 +66,28 @@ RigVirtualPerforationTransmissibilities::~RigVirtualPerforationTransmissibilitie
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RigVirtualPerforationTransmissibilities::appendCompletionDataForWellPath(
|
||||
RimWellPath* wellPath,
|
||||
const std::vector<RigCompletionData>& completions)
|
||||
void RigVirtualPerforationTransmissibilities::setCompletionDataForWellPath(
|
||||
RimWellPath* wellPath,
|
||||
std::vector<std::vector<RigCompletionData>>& completionsPerTimeStep)
|
||||
{
|
||||
/*
|
||||
auto item = m_mapFromWellToCompletionData.find(wellPath);
|
||||
if (item != m_mapFromWellToCompletionData.end())
|
||||
{
|
||||
item->second.setCompletionData
|
||||
}
|
||||
|
||||
auto it = m_multipleCompletionsPerEclipseCell.find(completion.completionDataGridCell());
|
||||
if (it != m_multipleCompletionsPerEclipseCell.end())
|
||||
{
|
||||
it->second.push_back(completion);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_multipleCompletionsPerEclipseCell.insert(std::pair<RigCompletionDataGridCell, std::vector<RigCompletionData>>(
|
||||
completion.completionDataGridCell(), std::vector<RigCompletionData>{completion}));
|
||||
}
|
||||
*/
|
||||
CVF_ASSERT(item == m_mapFromWellToCompletionData.end());
|
||||
|
||||
{
|
||||
std::vector<CompletionDataFrame> values;
|
||||
|
||||
for (const auto& c : completionsPerTimeStep)
|
||||
{
|
||||
CompletionDataFrame oneTimeStep;
|
||||
oneTimeStep.setCompletionData(c);
|
||||
values.push_back(oneTimeStep);
|
||||
}
|
||||
|
||||
auto pair = std::pair<RimWellPath*, std::vector<CompletionDataFrame>>(wellPath, values);
|
||||
|
||||
m_mapFromWellToCompletionData.insert(pair);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -100,8 +101,50 @@ const std::map<RigCompletionDataGridCell, std::vector<RigCompletionData>>&
|
||||
auto item = m_mapFromWellToCompletionData.find(wellPath);
|
||||
if (item != m_mapFromWellToCompletionData.end())
|
||||
{
|
||||
return item->second[timeStepIndex].multipleCompletionsPerEclipseCell();
|
||||
size_t indexToUse = timeStepIndex;
|
||||
if (item->second.size() == 1)
|
||||
{
|
||||
indexToUse = 0;
|
||||
}
|
||||
|
||||
return item->second[indexToUse].multipleCompletionsPerEclipseCell();
|
||||
}
|
||||
|
||||
|
||||
return dummy;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RigVirtualPerforationTransmissibilities::computeMinMax(double* minValue, double* maxValue, double* posClosestToZero, double* negClosestToZero) const
|
||||
{
|
||||
MinMaxAccumulator minMaxAccumulator;
|
||||
PosNegAccumulator posNegAccumulator;
|
||||
|
||||
for (const auto& item : m_mapFromWellToCompletionData)
|
||||
{
|
||||
auto completionDataFrame = item.second;
|
||||
for (const auto& data : completionDataFrame)
|
||||
{
|
||||
for (const auto& data : completionDataFrame)
|
||||
{
|
||||
auto compl = data.multipleCompletionsPerEclipseCell();
|
||||
for (const auto& c : compl)
|
||||
{
|
||||
for (const auto& d : c.second)
|
||||
{
|
||||
double trans = d.transmissibility();
|
||||
|
||||
minMaxAccumulator.addValue(trans);
|
||||
posNegAccumulator.addValue(trans);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (*minValue) *minValue = minMaxAccumulator.min;
|
||||
if (*maxValue) *maxValue = minMaxAccumulator.max;
|
||||
if (*posClosestToZero) *posClosestToZero = posNegAccumulator.pos;
|
||||
if (*negClosestToZero) *negClosestToZero = posNegAccumulator.neg;
|
||||
}
|
||||
|
||||
@@ -40,8 +40,7 @@ public:
|
||||
|
||||
void setCompletionData(const std::vector<RigCompletionData>& completions);
|
||||
|
||||
const std::map<RigCompletionDataGridCell, std::vector<RigCompletionData>>&
|
||||
multipleCompletionsPerEclipseCell() const;
|
||||
const std::map<RigCompletionDataGridCell, std::vector<RigCompletionData>>& multipleCompletionsPerEclipseCell() const;
|
||||
|
||||
private:
|
||||
std::map<RigCompletionDataGridCell, std::vector<RigCompletionData>> m_multipleCompletionsPerEclipseCell;
|
||||
@@ -56,12 +55,12 @@ public:
|
||||
RigVirtualPerforationTransmissibilities();
|
||||
~RigVirtualPerforationTransmissibilities();
|
||||
|
||||
void appendCompletionDataForWellPath(RimWellPath* wellPath,
|
||||
const std::vector<RigCompletionData>& completions);
|
||||
void setCompletionDataForWellPath(RimWellPath* wellPath, std::vector<std::vector<RigCompletionData>>& completionsPerTimeStep);
|
||||
|
||||
const std::map<RigCompletionDataGridCell, std::vector<RigCompletionData>>&
|
||||
multipleCompletionsPerEclipseCell(RimWellPath* wellPath, size_t timeStepIndex) const;
|
||||
|
||||
void computeMinMax(double* minValue, double* maxValue, double* posClosestToZero, double* negClosestToZero) const;
|
||||
private:
|
||||
std::map<RimWellPath*, std::vector<CompletionDataFrame>> m_mapFromWellToCompletionData;
|
||||
};
|
||||
|
||||
@@ -533,7 +533,7 @@ void RigEclipseCaseData::setVirtualPerforationTransmissibilities(RigVirtualPerfo
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RigVirtualPerforationTransmissibilities* RigEclipseCaseData::virtualPerforationTransmissibilities() const
|
||||
{
|
||||
return m_virtualPerforationTransmissibilities;
|
||||
return m_virtualPerforationTransmissibilities.p();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -131,7 +131,7 @@ private:
|
||||
|
||||
cvf::ref<RigFormationNames> m_activeFormationNamesData;
|
||||
|
||||
RigVirtualPerforationTransmissibilities* m_virtualPerforationTransmissibilities;
|
||||
cvf::ref<RigVirtualPerforationTransmissibilities> m_virtualPerforationTransmissibilities;
|
||||
|
||||
cvf::Collection<RigSimWellData> m_simWellData; //< A WellResults object for each well in the reservoir
|
||||
cvf::Collection<cvf::UByteArray> m_wellCellsInGrid; //< A bool array pr grid with one bool pr cell telling whether the cell is a well cell or not
|
||||
|
||||
Reference in New Issue
Block a user