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:
@@ -24,11 +24,15 @@
|
||||
#include "RiaColorTables.h"
|
||||
#include "RiaPreferences.h"
|
||||
|
||||
#include "CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h"
|
||||
#include "CompletionExportCommands/RicExportCompletionDataSettingsUi.h"
|
||||
|
||||
#include "RigActiveCellInfo.h"
|
||||
#include "RigCaseCellResultsData.h"
|
||||
#include "RigEclipseCaseData.h"
|
||||
#include "RigMainGrid.h"
|
||||
#include "RigSimWellData.h"
|
||||
#include "RigVirtualPerforationTransmissibilities.h"
|
||||
|
||||
#include "Rim2dIntersectionViewCollection.h"
|
||||
#include "RimCaseCollection.h"
|
||||
@@ -43,8 +47,10 @@
|
||||
#include "RimFlowPlotCollection.h"
|
||||
#include "RimFormationNames.h"
|
||||
#include "RimIntersectionCollection.h"
|
||||
#include "RimLegendConfig.h"
|
||||
#include "RimMainPlotCollection.h"
|
||||
#include "RimOilField.h"
|
||||
#include "RimPerforationCollection.h"
|
||||
#include "RimProject.h"
|
||||
#include "RimReservoirCellResultsStorage.h"
|
||||
#include "RimStimPlanColors.h"
|
||||
@@ -53,6 +59,7 @@
|
||||
#include "RimSummaryPlot.h"
|
||||
#include "RimSummaryPlotCollection.h"
|
||||
#include "RimTools.h"
|
||||
#include "RimVirtualPerforationResults.h"
|
||||
#include "RimWellAllocationPlot.h"
|
||||
#include "RimWellLogPlot.h"
|
||||
#include "RimWellLogPlotCollection.h"
|
||||
@@ -307,6 +314,120 @@ void RimEclipseCase::recalculateCompletionTypeAndRedrawAllViews()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEclipseCase::deleteVirtualConnectionFactorDataAndRedrawRequiredViews()
|
||||
{
|
||||
RigEclipseCaseData* rigEclipseCase = eclipseCaseData();
|
||||
|
||||
if (rigEclipseCase)
|
||||
{
|
||||
rigEclipseCase->setVirtualPerforationTransmissibilities(nullptr);
|
||||
}
|
||||
|
||||
for (Rim3dView* view : views())
|
||||
{
|
||||
RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>(view);
|
||||
if (eclipseView && eclipseView->isVirtualConnectionFactorGeometryVisible())
|
||||
{
|
||||
eclipseView->scheduleCreateDisplayModelAndRedraw();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RigVirtualPerforationTransmissibilities* RimEclipseCase::computeAndGetVirtualPerforationTransmissibilities()
|
||||
{
|
||||
RigEclipseCaseData* rigEclipseCase = eclipseCaseData();
|
||||
|
||||
// TODO: Remove
|
||||
rigEclipseCase->setVirtualPerforationTransmissibilities(nullptr);
|
||||
|
||||
|
||||
if (rigEclipseCase->virtualPerforationTransmissibilities() == nullptr)
|
||||
{
|
||||
cvf::ref<RigVirtualPerforationTransmissibilities> perfTrans = new RigVirtualPerforationTransmissibilities;
|
||||
|
||||
std::vector<RimWellPath*> visibleWellPaths;
|
||||
bool anyPerforationsPresent = false;
|
||||
{
|
||||
RimProject* proj = RiaApplication::instance()->project();
|
||||
std::vector<RimWellPath*> wellPaths = proj->allWellPaths();
|
||||
for (auto w : wellPaths)
|
||||
{
|
||||
if (w->showWellPath())
|
||||
{
|
||||
visibleWellPaths.push_back(w);
|
||||
|
||||
if (!w->perforationIntervalCollection()->perforations().empty())
|
||||
{
|
||||
anyPerforationsPresent = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (auto w : visibleWellPaths)
|
||||
{
|
||||
std::vector<RigCompletionData> staticCompletionData = RicWellPathExportCompletionDataFeatureImpl::computeStaticCompletionsForWellPath(w, this);
|
||||
|
||||
if (anyPerforationsPresent)
|
||||
{
|
||||
std::vector<std::vector<RigCompletionData>> allCompletionData;
|
||||
|
||||
for (size_t i = 0; i < timeStepDates().size(); i++)
|
||||
{
|
||||
std::vector<RigCompletionData> dynamicCompletionDataOneTimeStep = RicWellPathExportCompletionDataFeatureImpl::computeDynamicCompletionsForWellPath(w, this, i);
|
||||
|
||||
std::copy(staticCompletionData.begin(), staticCompletionData.end(), std::back_inserter(dynamicCompletionDataOneTimeStep));
|
||||
|
||||
allCompletionData.push_back(dynamicCompletionDataOneTimeStep);
|
||||
}
|
||||
|
||||
perfTrans->setCompletionDataForWellPath(w, allCompletionData);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::vector<std::vector<RigCompletionData>> allCompletionData;
|
||||
allCompletionData.push_back(staticCompletionData);
|
||||
|
||||
perfTrans->setCompletionDataForWellPath(w, allCompletionData);
|
||||
}
|
||||
}
|
||||
|
||||
rigEclipseCase->setVirtualPerforationTransmissibilities(perfTrans.p());
|
||||
|
||||
{
|
||||
double minValue = HUGE_VAL;
|
||||
double maxValue = -HUGE_VAL;
|
||||
double posClosestToZero = HUGE_VAL;
|
||||
double negClosestToZero = -HUGE_VAL;
|
||||
|
||||
perfTrans->computeMinMax(&minValue, &maxValue, &posClosestToZero, &negClosestToZero);
|
||||
|
||||
if (minValue != HUGE_VAL)
|
||||
{
|
||||
for (const auto& v : views())
|
||||
{
|
||||
RimEclipseView* eclView = dynamic_cast<RimEclipseView*>(v);
|
||||
if (eclView)
|
||||
{
|
||||
RimLegendConfig* legendConfig = eclView->virtualPerforationResult()->legendConfig();
|
||||
|
||||
legendConfig->setAutomaticRanges(minValue, maxValue, minValue, maxValue);
|
||||
legendConfig->setClosestToZeroValues(posClosestToZero, negClosestToZero, posClosestToZero, negClosestToZero);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rigEclipseCase->virtualPerforationTransmissibilities();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user