#2544 Well CF Viz : Add basiz viz with spheres, add legend to view

This commit is contained in:
Magne Sjaastad
2018-03-14 09:35:48 +01:00
parent b7e8834b4c
commit 108ef5eecc
18 changed files with 600 additions and 172 deletions

View File

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

View File

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

View File

@@ -533,7 +533,7 @@ void RigEclipseCaseData::setVirtualPerforationTransmissibilities(RigVirtualPerfo
//--------------------------------------------------------------------------------------------------
const RigVirtualPerforationTransmissibilities* RigEclipseCaseData::virtualPerforationTransmissibilities() const
{
return m_virtualPerforationTransmissibilities;
return m_virtualPerforationTransmissibilities.p();
}
//--------------------------------------------------------------------------------------------------

View File

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