mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1559 Use common export completions command for well paths and simulation wells
This commit is contained in:
parent
95dd87f23c
commit
6391fad018
@ -40,6 +40,22 @@ RicExportCompletionDataSettingsUi::RicExportCompletionDataSettingsUi()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RicExportCompletionDataSettingsUi::showForSimWells()
|
||||||
|
{
|
||||||
|
m_displayForSimWell = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RicExportCompletionDataSettingsUi::showForWellPath()
|
||||||
|
{
|
||||||
|
m_displayForSimWell = false;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -66,3 +82,25 @@ QList<caf::PdmOptionItemInfo> RicExportCompletionDataSettingsUi::calculateValueO
|
|||||||
}
|
}
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RicExportCompletionDataSettingsUi::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
|
||||||
|
{
|
||||||
|
uiOrdering.add(&fileName);
|
||||||
|
uiOrdering.add(&caseToApply);
|
||||||
|
uiOrdering.add(&timeStep);
|
||||||
|
uiOrdering.add(&computeTransmissibility);
|
||||||
|
uiOrdering.add(&includeWpimult);
|
||||||
|
|
||||||
|
if (!m_displayForSimWell)
|
||||||
|
{
|
||||||
|
uiOrdering.add(&includePerforations);
|
||||||
|
uiOrdering.add(&includeFishbones);
|
||||||
|
uiOrdering.add(&includeFractures);
|
||||||
|
uiOrdering.add(&removeLateralsInMainBoreCells);
|
||||||
|
}
|
||||||
|
|
||||||
|
uiOrdering.skipRemainingFields();
|
||||||
|
}
|
||||||
|
@ -43,6 +43,13 @@ public:
|
|||||||
|
|
||||||
caf::PdmField<int> timeStep;
|
caf::PdmField<int> timeStep;
|
||||||
|
|
||||||
|
void showForSimWells();
|
||||||
|
void showForWellPath();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) override;
|
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) override;
|
||||||
|
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_displayForSimWell;
|
||||||
};
|
};
|
||||||
|
@ -18,33 +18,96 @@
|
|||||||
|
|
||||||
#include "RicExportFractureCompletionsImpl.h"
|
#include "RicExportFractureCompletionsImpl.h"
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include "RimEclipseCase.h"
|
|
||||||
#include "RicExportCompletionDataSettingsUi.h"
|
#include "RicExportCompletionDataSettingsUi.h"
|
||||||
|
|
||||||
|
#include "RimEclipseCase.h"
|
||||||
#include "RimFracture.h"
|
#include "RimFracture.h"
|
||||||
#include "RimWellPath.h"
|
#include "RimWellPath.h"
|
||||||
|
#include "RimFractureTemplate.h"
|
||||||
|
#include "RimEclipseWell.h"
|
||||||
|
#include "RimSimWellFractureCollection.h"
|
||||||
|
#include "RimSimWellFracture.h"
|
||||||
|
|
||||||
#include "RigEclipseCaseData.h"
|
#include "RigEclipseCaseData.h"
|
||||||
#include "RigTransmissibilityCondenser.h"
|
#include "RigTransmissibilityCondenser.h"
|
||||||
#include "RigFractureCell.h"
|
#include "RigFractureCell.h"
|
||||||
#include "RigFractureGrid.h"
|
#include "RigFractureGrid.h"
|
||||||
#include "RimFractureTemplate.h"
|
|
||||||
#include "RigEclipseToStimPlanCellTransmissibilityCalculator.h"
|
#include "RigEclipseToStimPlanCellTransmissibilityCalculator.h"
|
||||||
#include "RigFractureTransmissibilityEquations.h"
|
#include "RigFractureTransmissibilityEquations.h"
|
||||||
#include "RigWellPathStimplanIntersector.h"
|
#include "RigWellPathStimplanIntersector.h"
|
||||||
#include "RigMainGrid.h"
|
#include "RigMainGrid.h"
|
||||||
|
#include "RigSingleWellResultsData.h"
|
||||||
|
#include "RigSimulationWellCoordsAndMD.h"
|
||||||
|
#include "RigWellPath.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateFracturesCompdatValues(const RimWellPath* wellPath,
|
std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdatValuesForWellPath(const RimWellPath* wellPath,
|
||||||
const RicExportCompletionDataSettingsUi& settings,
|
const RicExportCompletionDataSettingsUi& settings,
|
||||||
QTextStream* outputStreamForIntermediateResultsText)
|
QTextStream* outputStreamForIntermediateResultsText)
|
||||||
{
|
{
|
||||||
const RimEclipseCase* caseToApply = settings.caseToApply();
|
const RimEclipseCase* caseToApply = settings.caseToApply();
|
||||||
|
|
||||||
std::vector<RimFracture*> fracturesAlongWellPath;
|
std::vector<RimFracture*> fracturesAlongWellPath;
|
||||||
wellPath->descendantsIncludingThisOfType(fracturesAlongWellPath);
|
wellPath->descendantsIncludingThisOfType(fracturesAlongWellPath);
|
||||||
|
|
||||||
|
return generateCompdatValues(caseToApply,
|
||||||
|
wellPath->name(),
|
||||||
|
wellPath->wellPathGeometry(),
|
||||||
|
fracturesAlongWellPath,
|
||||||
|
outputStreamForIntermediateResultsText);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdatValuesForSimWell(const RimEclipseCase* eclipseCase,
|
||||||
|
const RimEclipseWell* well,
|
||||||
|
size_t timeStep,
|
||||||
|
QTextStream* outputStreamForIntermediateResultsText)
|
||||||
|
{
|
||||||
|
std::vector<RigCompletionData> completionData;
|
||||||
|
|
||||||
|
std::vector< std::vector <cvf::Vec3d> > pipeBranchesCLCoords;
|
||||||
|
std::vector< std::vector <RigWellResultPoint> > pipeBranchesCellIds;
|
||||||
|
well->calculateWellPipeDynamicCenterLine(timeStep, pipeBranchesCLCoords, pipeBranchesCellIds);
|
||||||
|
|
||||||
|
for (size_t branchIndex = 0; branchIndex < pipeBranchesCLCoords.size(); ++branchIndex)
|
||||||
|
{
|
||||||
|
RigSimulationWellCoordsAndMD coordsAndMD(pipeBranchesCLCoords[branchIndex]);
|
||||||
|
RigWellPath wellPathGeometry;
|
||||||
|
wellPathGeometry.m_wellPathPoints = coordsAndMD.wellPathPoints();
|
||||||
|
wellPathGeometry.m_measuredDepths = coordsAndMD.measuredDepths();
|
||||||
|
|
||||||
|
std::vector<RimFracture*> fractures;
|
||||||
|
for (RimSimWellFracture* fracture : well->simwellFractureCollection->simwellFractures())
|
||||||
|
{
|
||||||
|
if (static_cast<size_t>(fracture->branchIndex()) == branchIndex)
|
||||||
|
{
|
||||||
|
fractures.push_back(fracture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<RigCompletionData> branchCompletions = generateCompdatValues(eclipseCase, well->name(), &wellPathGeometry, fractures, outputStreamForIntermediateResultsText);
|
||||||
|
|
||||||
|
completionData.insert(completionData.end(), branchCompletions.begin(), branchCompletions.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
return completionData;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateCompdatValues(const RimEclipseCase* caseToApply,
|
||||||
|
const QString& wellPathName,
|
||||||
|
const RigWellPath* wellPathGeometry,
|
||||||
|
const std::vector<RimFracture*> fractures,
|
||||||
|
QTextStream* outputStreamForIntermediateResultsText)
|
||||||
|
{
|
||||||
double cDarcyInCorrectUnit = caseToApply->eclipseCaseData()->darchysValue();
|
double cDarcyInCorrectUnit = caseToApply->eclipseCaseData()->darchysValue();
|
||||||
const RigMainGrid* mainGrid = caseToApply->eclipseCaseData()->mainGrid();
|
const RigMainGrid* mainGrid = caseToApply->eclipseCaseData()->mainGrid();
|
||||||
|
|
||||||
@ -54,7 +117,7 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateFractur
|
|||||||
std::map <size_t, std::map<RimFracture*, double> > eclCellIdxToTransPrFractureMap;
|
std::map <size_t, std::map<RimFracture*, double> > eclCellIdxToTransPrFractureMap;
|
||||||
std::vector<RigCompletionData> fractureCompletions;
|
std::vector<RigCompletionData> fractureCompletions;
|
||||||
|
|
||||||
for (RimFracture* fracture : fracturesAlongWellPath)
|
for (RimFracture* fracture : fractures)
|
||||||
{
|
{
|
||||||
|
|
||||||
bool fractureFiniteCond = (fracture->fractureTemplate()->conductivityType() == RimFractureTemplate::FINITE_CONDUCTIVITY);
|
bool fractureFiniteCond = (fracture->fractureTemplate()->conductivityType() == RimFractureTemplate::FINITE_CONDUCTIVITY);
|
||||||
@ -193,7 +256,7 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateFractur
|
|||||||
//If fracture has orientation along well, linear inflow along well and radial flow at endpoints
|
//If fracture has orientation along well, linear inflow along well and radial flow at endpoints
|
||||||
else if (fracture->fractureTemplate()->orientationType() == RimFractureTemplate::ALONG_WELL_PATH)
|
else if (fracture->fractureTemplate()->orientationType() == RimFractureTemplate::ALONG_WELL_PATH)
|
||||||
{
|
{
|
||||||
RigWellPathStimplanIntersector wellFractureIntersector(wellPath->wellPathGeometry(), fracture);
|
RigWellPathStimplanIntersector wellFractureIntersector(wellPathGeometry, fracture);
|
||||||
const std::map<size_t, RigWellPathStimplanIntersector::WellCellIntersection >& fractureWellCells = wellFractureIntersector.intersections();
|
const std::map<size_t, RigWellPathStimplanIntersector::WellCellIntersection >& fractureWellCells = wellFractureIntersector.intersections();
|
||||||
|
|
||||||
for (const auto& fracCellIdxIsectDataPair : fractureWellCells)
|
for (const auto& fracCellIdxIsectDataPair : fractureWellCells)
|
||||||
@ -250,7 +313,7 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateFractur
|
|||||||
size_t i, j, k;
|
size_t i, j, k;
|
||||||
mainGrid->ijkFromCellIndex(externalCell.m_globalCellIdx, &i, &j, &k);
|
mainGrid->ijkFromCellIndex(externalCell.m_globalCellIdx, &i, &j, &k);
|
||||||
|
|
||||||
RigCompletionData compDat(wellPath->name(), {i,j,k} );
|
RigCompletionData compDat(wellPathName, {i,j,k} );
|
||||||
compDat.setFromFracture(trans, fracture->fractureTemplate()->skinFactor());
|
compDat.setFromFracture(trans, fracture->fractureTemplate()->skinFactor());
|
||||||
compDat.addMetadata(fracture->name(), QString::number(trans));
|
compDat.addMetadata(fracture->name(), QString::number(trans));
|
||||||
fractureCompletions.push_back(compDat);
|
fractureCompletions.push_back(compDat);
|
||||||
@ -268,7 +331,6 @@ std::vector<RigCompletionData> RicExportFractureCompletionsImpl::generateFractur
|
|||||||
}
|
}
|
||||||
|
|
||||||
return fractureCompletions;
|
return fractureCompletions;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,13 +21,29 @@ class RicExportCompletionDataSettingsUi;
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "RigCompletionData.h"
|
#include "RigCompletionData.h"
|
||||||
|
|
||||||
class QTextStream;
|
class QTextStream;
|
||||||
|
class RigWellPath;
|
||||||
|
class RimEclipseCase;
|
||||||
|
class RimEclipseWell;
|
||||||
|
class RimFracture;
|
||||||
|
|
||||||
class RicExportFractureCompletionsImpl
|
class RicExportFractureCompletionsImpl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static std::vector<RigCompletionData> generateFracturesCompdatValues(const RimWellPath* wellPath,
|
static std::vector<RigCompletionData> generateCompdatValuesForWellPath(const RimWellPath* wellPath,
|
||||||
const RicExportCompletionDataSettingsUi& settings,
|
const RicExportCompletionDataSettingsUi& settings,
|
||||||
QTextStream* outputStreamForIntermediateResultsText);
|
QTextStream* outputStreamForIntermediateResultsText);
|
||||||
|
|
||||||
|
static std::vector<RigCompletionData> generateCompdatValuesForSimWell(const RimEclipseCase* eclipseCase,
|
||||||
|
const RimEclipseWell* well,
|
||||||
|
size_t timeStep,
|
||||||
|
QTextStream* outputStreamForIntermediateResultsText);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static std::vector<RigCompletionData> generateCompdatValues(const RimEclipseCase* caseToApply,
|
||||||
|
const QString& wellPathName,
|
||||||
|
const RigWellPath* wellPathGeometry,
|
||||||
|
const std::vector<RimFracture*> fractures,
|
||||||
|
QTextStream* outputStreamForIntermediateResultsText);
|
||||||
};
|
};
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
#include "RimPerforationInterval.h"
|
#include "RimPerforationInterval.h"
|
||||||
#include "RimPerforationCollection.h"
|
#include "RimPerforationCollection.h"
|
||||||
#include "RimReservoirCellResultsStorage.h"
|
#include "RimReservoirCellResultsStorage.h"
|
||||||
|
#include "RimEclipseWell.h"
|
||||||
|
#include "RimEclipseWellCollection.h"
|
||||||
|
|
||||||
#include "RicExportCompletionDataSettingsUi.h"
|
#include "RicExportCompletionDataSettingsUi.h"
|
||||||
|
|
||||||
@ -61,7 +63,32 @@ CAF_CMD_SOURCE_INIT(RicWellPathExportCompletionDataFeature, "RicWellPathExportCo
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RicWellPathExportCompletionDataFeature::isCommandEnabled()
|
bool RicWellPathExportCompletionDataFeature::isCommandEnabled()
|
||||||
{
|
{
|
||||||
return !selectedWellPaths().empty();
|
std::vector<RimWellPath*> wellPaths = selectedWellPaths();
|
||||||
|
std::vector<RimEclipseWell*> simWells = selectedSimWells();
|
||||||
|
|
||||||
|
if (wellPaths.empty() && simWells.empty())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!wellPaths.empty() && !simWells.empty())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::set<RimEclipseCase*> eclipseCases;
|
||||||
|
for (auto simWell : simWells)
|
||||||
|
{
|
||||||
|
RimEclipseCase* eclipseCase;
|
||||||
|
simWell->firstAncestorOrThisOfType(eclipseCase);
|
||||||
|
eclipseCases.insert(eclipseCase);
|
||||||
|
}
|
||||||
|
if (eclipseCases.size() > 1)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -70,8 +97,9 @@ bool RicWellPathExportCompletionDataFeature::isCommandEnabled()
|
|||||||
void RicWellPathExportCompletionDataFeature::onActionTriggered(bool isChecked)
|
void RicWellPathExportCompletionDataFeature::onActionTriggered(bool isChecked)
|
||||||
{
|
{
|
||||||
std::vector<RimWellPath*> wellPaths = selectedWellPaths();
|
std::vector<RimWellPath*> wellPaths = selectedWellPaths();
|
||||||
|
std::vector<RimEclipseWell*> simWells = selectedSimWells();
|
||||||
|
|
||||||
CVF_ASSERT(wellPaths.size() > 0);
|
CVF_ASSERT(wellPaths.size() > 0 || simWells.size() > 0);
|
||||||
|
|
||||||
RiaApplication* app = RiaApplication::instance();
|
RiaApplication* app = RiaApplication::instance();
|
||||||
|
|
||||||
@ -79,6 +107,16 @@ void RicWellPathExportCompletionDataFeature::onActionTriggered(bool isChecked)
|
|||||||
QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("COMPLETIONS", projectFolder);
|
QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("COMPLETIONS", projectFolder);
|
||||||
|
|
||||||
RicExportCompletionDataSettingsUi exportSettings;
|
RicExportCompletionDataSettingsUi exportSettings;
|
||||||
|
|
||||||
|
if (wellPaths.empty())
|
||||||
|
{
|
||||||
|
exportSettings.showForSimWells();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
exportSettings.showForWellPath();
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<RimCase*> cases;
|
std::vector<RimCase*> cases;
|
||||||
app->project()->allCases(cases);
|
app->project()->allCases(cases);
|
||||||
for (auto c : cases)
|
for (auto c : cases)
|
||||||
@ -98,7 +136,7 @@ void RicWellPathExportCompletionDataFeature::onActionTriggered(bool isChecked)
|
|||||||
{
|
{
|
||||||
RiaApplication::instance()->setLastUsedDialogDirectory("COMPLETIONS", QFileInfo(exportSettings.fileName).absolutePath());
|
RiaApplication::instance()->setLastUsedDialogDirectory("COMPLETIONS", QFileInfo(exportSettings.fileName).absolutePath());
|
||||||
|
|
||||||
exportCompletions(wellPaths, exportSettings);
|
exportCompletions(wellPaths, simWells, exportSettings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +175,32 @@ std::vector<RimWellPath*> RicWellPathExportCompletionDataFeature::selectedWellPa
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector<RimWellPath*>& wellPaths, const RicExportCompletionDataSettingsUi& exportSettings)
|
std::vector<RimEclipseWell*> RicWellPathExportCompletionDataFeature::selectedSimWells()
|
||||||
|
{
|
||||||
|
std::vector<RimEclipseWell*> simWells;
|
||||||
|
caf::SelectionManager::instance()->objectsByType(&simWells);
|
||||||
|
|
||||||
|
std::vector<RimEclipseWellCollection*> simWellCollections;
|
||||||
|
caf::SelectionManager::instance()->objectsByType(&simWellCollections);
|
||||||
|
|
||||||
|
for (auto simWellCollection : simWellCollections)
|
||||||
|
{
|
||||||
|
for (auto simWell : simWellCollection->wells())
|
||||||
|
{
|
||||||
|
simWells.push_back(simWell);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::set<RimEclipseWell*> uniqueSimWells(simWells.begin(), simWells.end());
|
||||||
|
simWells.assign(uniqueSimWells.begin(), uniqueSimWells.end());
|
||||||
|
|
||||||
|
return simWells;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector<RimWellPath*>& wellPaths, const std::vector<RimEclipseWell*>& simWells, const RicExportCompletionDataSettingsUi& exportSettings)
|
||||||
{
|
{
|
||||||
QFile exportFile(exportSettings.fileName());
|
QFile exportFile(exportSettings.fileName());
|
||||||
|
|
||||||
@ -168,6 +231,16 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (const RimEclipseWell* simWell : simWells)
|
||||||
|
{
|
||||||
|
RimEclipseCase* eclipseCase;
|
||||||
|
simWell->firstAncestorOrThisOfType(eclipseCase);
|
||||||
|
if (exportSettings.caseToApply->eclipseCaseData()->unitsType() != eclipseCase->eclipseCaseData()->unitsType())
|
||||||
|
{
|
||||||
|
unitSystemMismatch = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (unitSystemMismatch)
|
if (unitSystemMismatch)
|
||||||
{
|
{
|
||||||
RiaLogging::error("Well path unit systems must match unit system of chosen eclipse case.");
|
RiaLogging::error("Well path unit systems must match unit system of chosen eclipse case.");
|
||||||
@ -199,13 +272,18 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector
|
|||||||
|
|
||||||
if (exportSettings.includeFractures())
|
if (exportSettings.includeFractures())
|
||||||
{
|
{
|
||||||
std::vector<RigCompletionData> fractureCompletionData =
|
std::vector<RigCompletionData> fractureCompletionData = RicExportFractureCompletionsImpl::generateCompdatValuesForWellPath(wellPath, exportSettings, &stream);
|
||||||
RicExportFractureCompletionsImpl::generateFracturesCompdatValues(wellPath, exportSettings, &stream);
|
|
||||||
appendCompletionData(&completionData, fractureCompletionData);
|
appendCompletionData(&completionData, fractureCompletionData);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto simWell : simWells)
|
||||||
|
{
|
||||||
|
std::vector<RigCompletionData> fractureCompletionData = RicExportFractureCompletionsImpl::generateCompdatValuesForSimWell(exportSettings.caseToApply(), simWell, exportSettings.timeStep(), &stream);
|
||||||
|
appendCompletionData(&completionData, fractureCompletionData);
|
||||||
|
}
|
||||||
|
|
||||||
// Merge map into a vector of values
|
// Merge map into a vector of values
|
||||||
std::vector<RigCompletionData> completions;
|
std::vector<RigCompletionData> completions;
|
||||||
for (auto& data : completionData)
|
for (auto& data : completionData)
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
class RimWellPath;
|
class RimWellPath;
|
||||||
class RimEclipseCase;
|
class RimEclipseCase;
|
||||||
|
class RimEclipseWell;
|
||||||
class RigEclipseCaseData;
|
class RigEclipseCaseData;
|
||||||
class RigMainGrid;
|
class RigMainGrid;
|
||||||
class RigCell;
|
class RigCell;
|
||||||
@ -126,13 +127,14 @@ protected:
|
|||||||
virtual void setupActionLook(QAction* actionToSetup) override;
|
virtual void setupActionLook(QAction* actionToSetup) override;
|
||||||
|
|
||||||
std::vector<RimWellPath*> selectedWellPaths();
|
std::vector<RimWellPath*> selectedWellPaths();
|
||||||
|
std::vector<RimEclipseWell*> selectedSimWells();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static std::vector<WellSegmentLocation> findWellSegmentLocations(const RimEclipseCase* caseToApply, const RimWellPath* wellPath);
|
static std::vector<WellSegmentLocation> findWellSegmentLocations(const RimEclipseCase* caseToApply, const RimWellPath* wellPath);
|
||||||
static std::vector<WellSegmentLocation> findWellSegmentLocations(const RimEclipseCase* caseToApply, const RimWellPath* wellPath, const std::vector<RimFishbonesMultipleSubs*>& fishbonesSubs);
|
static std::vector<WellSegmentLocation> findWellSegmentLocations(const RimEclipseCase* caseToApply, const RimWellPath* wellPath, const std::vector<RimFishbonesMultipleSubs*>& fishbonesSubs);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void exportCompletions(const std::vector<RimWellPath*>& wellPaths, const RicExportCompletionDataSettingsUi& exportSettings);
|
static void exportCompletions(const std::vector<RimWellPath*>& wellPaths, const std::vector<RimEclipseWell*>& simWells, const RicExportCompletionDataSettingsUi& exportSettings);
|
||||||
|
|
||||||
static void generateCompdatTable(RifEclipseDataTableFormatter& formatter, const std::vector<RigCompletionData>& completionData);
|
static void generateCompdatTable(RifEclipseDataTableFormatter& formatter, const std::vector<RigCompletionData>& completionData);
|
||||||
static void generateWpimultTable(RifEclipseDataTableFormatter& formatter, const std::vector<RigCompletionData>& completionData);
|
static void generateWpimultTable(RifEclipseDataTableFormatter& formatter, const std::vector<RigCompletionData>& completionData);
|
||||||
|
@ -47,6 +47,7 @@ public:
|
|||||||
double wellAzimuthAtFracturePosition() override;
|
double wellAzimuthAtFracturePosition() override;
|
||||||
double wellDipAtFracturePosition();
|
double wellDipAtFracturePosition();
|
||||||
|
|
||||||
|
int branchIndex() const { return m_branchIndex(); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||||
|
@ -166,7 +166,7 @@ void RimEclipseWell::calculateWellPipeStaticCenterLine(std::vector< std::vector
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimEclipseWell::calculateWellPipeDynamicCenterLine(size_t timeStepIdx,
|
void RimEclipseWell::calculateWellPipeDynamicCenterLine(size_t timeStepIdx,
|
||||||
std::vector< std::vector <cvf::Vec3d> >& pipeBranchesCLCoords,
|
std::vector< std::vector <cvf::Vec3d> >& pipeBranchesCLCoords,
|
||||||
std::vector< std::vector <RigWellResultPoint> >& pipeBranchesCellIds)
|
std::vector< std::vector <RigWellResultPoint> >& pipeBranchesCellIds) const
|
||||||
{
|
{
|
||||||
RigSimulationWellCenterLineCalculator::calculateWellPipeDynamicCenterline(this, timeStepIdx, pipeBranchesCLCoords, pipeBranchesCellIds);
|
RigSimulationWellCenterLineCalculator::calculateWellPipeDynamicCenterline(this, timeStepIdx, pipeBranchesCLCoords, pipeBranchesCellIds);
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ public:
|
|||||||
|
|
||||||
void calculateWellPipeDynamicCenterLine(size_t timeStepIdx,
|
void calculateWellPipeDynamicCenterLine(size_t timeStepIdx,
|
||||||
std::vector< std::vector <cvf::Vec3d> >& pipeBranchesCLCoords,
|
std::vector< std::vector <cvf::Vec3d> >& pipeBranchesCLCoords,
|
||||||
std::vector< std::vector <RigWellResultPoint> >& pipeBranchesCellIds);
|
std::vector< std::vector <RigWellResultPoint> >& pipeBranchesCellIds) const;
|
||||||
|
|
||||||
void wellHeadTopBottomPosition(size_t frameIndex, cvf::Vec3d* top, cvf::Vec3d* bottom);
|
void wellHeadTopBottomPosition(size_t frameIndex, cvf::Vec3d* top, cvf::Vec3d* bottom);
|
||||||
double pipeRadius();
|
double pipeRadius();
|
||||||
|
@ -45,14 +45,14 @@ void RigSimulationWellCenterLineCalculator::calculateWellPipeStaticCenterline(Ri
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RigSimulationWellCenterLineCalculator::calculateWellPipeDynamicCenterline(RimEclipseWell* rimWell,
|
void RigSimulationWellCenterLineCalculator::calculateWellPipeDynamicCenterline(const RimEclipseWell* rimWell,
|
||||||
size_t timeStepIndex,
|
size_t timeStepIndex,
|
||||||
std::vector< std::vector <cvf::Vec3d> >& pipeBranchesCLCoords,
|
std::vector< std::vector <cvf::Vec3d> >& pipeBranchesCLCoords,
|
||||||
std::vector< std::vector <RigWellResultPoint> >& pipeBranchesCellIds)
|
std::vector< std::vector <RigWellResultPoint> >& pipeBranchesCellIds)
|
||||||
{
|
{
|
||||||
CVF_ASSERT(rimWell);
|
CVF_ASSERT(rimWell);
|
||||||
|
|
||||||
RigSingleWellResultsData* wellResults = rimWell->wellResults();
|
const RigSingleWellResultsData* wellResults = rimWell->wellResults();
|
||||||
|
|
||||||
RimEclipseView* eclipseView;
|
RimEclipseView* eclipseView;
|
||||||
rimWell->firstAncestorOrThisOfType(eclipseView);
|
rimWell->firstAncestorOrThisOfType(eclipseView);
|
||||||
|
@ -32,7 +32,7 @@ public:
|
|||||||
std::vector< std::vector <cvf::Vec3d> >& pipeBranchesCLCoords,
|
std::vector< std::vector <cvf::Vec3d> >& pipeBranchesCLCoords,
|
||||||
std::vector< std::vector <RigWellResultPoint> >& pipeBranchesCellIds) ;
|
std::vector< std::vector <RigWellResultPoint> >& pipeBranchesCellIds) ;
|
||||||
|
|
||||||
static void calculateWellPipeDynamicCenterline(RimEclipseWell* rimWell,
|
static void calculateWellPipeDynamicCenterline(const RimEclipseWell* rimWell,
|
||||||
size_t timeStepIndex,
|
size_t timeStepIndex,
|
||||||
std::vector< std::vector <cvf::Vec3d> >& pipeBranchesCLCoords,
|
std::vector< std::vector <cvf::Vec3d> >& pipeBranchesCLCoords,
|
||||||
std::vector< std::vector <RigWellResultPoint> >& pipeBranchesCellIds) ;
|
std::vector< std::vector <RigWellResultPoint> >& pipeBranchesCellIds) ;
|
||||||
|
Loading…
Reference in New Issue
Block a user