Merge branch 'dev' into pre-proto

This commit is contained in:
Bjørnar Grip Fjær 2017-06-21 16:38:57 +02:00
commit 8f06115730
12 changed files with 142 additions and 67 deletions

View File

@ -36,6 +36,14 @@ namespace caf
addItem(RicExportCompletionDataSettingsUi::CHECKED_WELLS, "CHECKED_WELLS", "Checked Wells");
setDefault(RicExportCompletionDataSettingsUi::ALL_WELLS);
}
template<>
void RicExportCompletionDataSettingsUi::CompdatExportType::setUp()
{
addItem(RicExportCompletionDataSettingsUi::TRANSMISSIBILITIES, "TRANSMISSIBILITIES", "Calculated Transmissibilities");
addItem(RicExportCompletionDataSettingsUi::WPIMULT_AND_DEFAULT_CONNECTION_FACTORS, "WPIMULT_AND_DEFAULT_CONNECTION_FACTORS", "Default Connection Factors and WPIMULT");
setDefault(RicExportCompletionDataSettingsUi::TRANSMISSIBILITIES);
}
}
@ -50,17 +58,15 @@ RicExportCompletionDataSettingsUi::RicExportCompletionDataSettingsUi()
CAF_PDM_InitFieldNoDefault(&fileSplit, "FileSplit", "File Split", "", "", "");
CAF_PDM_InitFieldNoDefault(&wellSelection, "WellSelection", "Well Selection", "", "", "");
CAF_PDM_InitFieldNoDefault(&compdatExport, "compdatExport", "Export", "", " ", "");
CAF_PDM_InitField(&timeStep, "TimeStepIndex", 0, "Time Step", "", "", "");
CAF_PDM_InitField(&computeTransmissibility, "ComputeTransmissibility", true, "Compute Transmissibility", "", "", "");
CAF_PDM_InitField(&includePerforations, "IncludePerforations", true, "Include Perforations", "", "", "");
CAF_PDM_InitField(&includeFishbones, "IncludeFishbones", true, "Include Fishbones", "", "", "");
CAF_PDM_InitField(&includeFractures, "IncludeFractures", true, "Include Fractures", "", "", "");
CAF_PDM_InitField(&includeWpimult, "IncludeWPIMULT", true, "Include WPIMLUT", "", "", "");
CAF_PDM_InitField(&removeLateralsInMainBoreCells, "RemoveLateralsInMainBoreCells", false, "Remove Laterals in Main Bore Cells", "", "", "");
CAF_PDM_InitField(&excludeMainBoreForFishbones, "ExcludeMainBoreForFishbones", false, "Exclude Main Bore Transmissibility For Fishbones", "", "", "");
}
//--------------------------------------------------------------------------------------------------
@ -111,19 +117,26 @@ QList<caf::PdmOptionItemInfo> RicExportCompletionDataSettingsUi::calculateValueO
//--------------------------------------------------------------------------------------------------
void RicExportCompletionDataSettingsUi::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
uiOrdering.add(&folder);
uiOrdering.add(&caseToApply);
uiOrdering.add(&timeStep);
uiOrdering.add(&computeTransmissibility);
uiOrdering.add(&includeWpimult);
caf::PdmUiGroup* generalExportSettings = uiOrdering.addNewGroup("General Export Settings");
generalExportSettings->add(&folder);
generalExportSettings->add(&caseToApply);
generalExportSettings->add(&timeStep);
generalExportSettings->add(&compdatExport);
generalExportSettings->add(&wellSelection);
generalExportSettings->add(&fileSplit);
if (!m_displayForSimWell)
{
uiOrdering.add(&includePerforations);
uiOrdering.add(&includeFishbones);
uiOrdering.add(&includeFractures);
uiOrdering.add(&removeLateralsInMainBoreCells);
}
caf::PdmUiGroup* fishboneGroup = uiOrdering.addNewGroup("Export of Fishbone Completions");
fishboneGroup->add(&includeFishbones);
fishboneGroup->add(&excludeMainBoreForFishbones);
caf::PdmUiGroup* perfIntervalGroup = uiOrdering.addNewGroup("Export of Perforation Completions");
perfIntervalGroup->add(&includePerforations);
caf::PdmUiGroup* fractureGroup = uiOrdering.addNewGroup("Export of Fracture Completions");
fractureGroup->add(&includeFractures);
}
uiOrdering.skipRemainingFields();
}

View File

@ -44,20 +44,26 @@ public:
};
typedef caf::AppEnum<WellSelection> WellSelectionType;
enum CompdatExport {
TRANSMISSIBILITIES,
WPIMULT_AND_DEFAULT_CONNECTION_FACTORS,
};
typedef caf::AppEnum<CompdatExport> CompdatExportType;
RicExportCompletionDataSettingsUi();
caf::PdmField<ExportSplitType> fileSplit;
caf::PdmField<WellSelectionType> wellSelection;
caf::PdmField<CompdatExportType> compdatExport;
caf::PdmField<bool> computeTransmissibility;
caf::PdmField<bool> includePerforations;
caf::PdmField<bool> includeFishbones;
caf::PdmField<bool> includeFractures;
caf::PdmField<bool> includeWpimult;
caf::PdmField<bool> removeLateralsInMainBoreCells;
caf::PdmField<bool> excludeMainBoreForFishbones;
caf::PdmField<int> timeStep;

View File

@ -76,6 +76,7 @@ void RicExportFishbonesWellSegmentsFeature::onActionTriggered(bool isChecked)
exportSettings.folder = defaultDir;
//Bjørnar: skal denne være noe annet?
caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Completion Data", "");
if (propertyDialog.exec() == QDialog::Accepted)
{

View File

@ -30,6 +30,7 @@
#include "RimFishbonesMultipleSubs.h"
#include "RimFishboneWellPathCollection.h"
#include "RimWellPathCompletions.h"
#include "RigCompletionData.h"
//--------------------------------------------------------------------------------------------------
///
@ -41,14 +42,6 @@ void RicFishbonesTransmissibilityCalculationFeatureImp::findFishboneLateralsWell
std::vector<WellSegmentLocation> locations = RicWellPathExportCompletionDataFeature::findWellSegmentLocations(settings.caseToApply, wellPath);
RiaEclipseUnitTools::UnitSystem unitSystem = caseData->unitsType();
// Filter out cells where main bore is present
if (settings.removeLateralsInMainBoreCells())
{
std::vector<size_t> wellPathCells = RicWellPathExportCompletionDataFeature::findIntersectingCells(caseData, wellPath->wellPathGeometry()->m_wellPathPoints);
RicWellPathExportCompletionDataFeature::markWellPathCells(wellPathCells, &locations);
}
bool isMainBore = false;
std::vector<RigCompletionData> completionData;
@ -59,10 +52,8 @@ void RicFishbonesTransmissibilityCalculationFeatureImp::findFishboneLateralsWell
{
for (const WellSegmentLateralIntersection& intersection : lateral.intersections)
{
if (intersection.mainBoreCell && settings.removeLateralsInMainBoreCells()) continue;
double diameter = location.fishbonesSubs->holeDiameter(unitSystem);
QString completionMetaData = (location.fishbonesSubs->name() + QString(" Sub: %1 Lateral: %2").arg(location.subIndex).arg(lateral.lateralIndex));
QString completionMetaData = (location.fishbonesSubs->name() + QString(": Sub: %1 Lateral: %2").arg(location.subIndex).arg(lateral.lateralIndex));
WellBorePartForTransCalc wellBorePart = WellBorePartForTransCalc(intersection.lengthsInCell,
diameter / 2,
location.fishbonesSubs->skinFactor(),
@ -120,13 +111,9 @@ std::vector<RigCompletionData> RicFishbonesTransmissibilityCalculationFeatureImp
}
}
//TODO: Find main bore direction and use this as direction in which to split cell
QString directionToSplitCellVolume = "DX";
for (WellBorePartForTransCalc wellBorePart : wellBoreParts)
{
RigCompletionData completion(wellPath->completions()->wellNameForExport(), IJKCellIndex(i, j, k));
completion.addMetadata(wellBorePart.metaData, "");
double transmissibility = 0.0;
if (wellBorePart.isMainBore)
@ -161,7 +148,11 @@ std::vector<RigCompletionData> RicFishbonesTransmissibilityCalculationFeatureImp
completion.setTransAndWPImultBackgroundDataFromFishbone(transmissibility,
wellBorePart.skinFactor,
wellBorePart.wellRadius *2,
direction);
direction,
wellBorePart.isMainBore);
completion.addMetadata(wellBorePart.metaData, QString::number(transmissibility));
completionData.push_back(completion);
}
}

View File

@ -304,7 +304,6 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector
for (auto& data : completionsPerEclipseCell)
{
//completions.push_back(RigCompletionData::combine(data.second));
completions.push_back(combineEclipseCellCompletions(data.second, exportSettings));
}
@ -314,7 +313,7 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector
if (exportSettings.fileSplit == RicExportCompletionDataSettingsUi::UNIFIED_FILE)
{
const QString fileName = QString("UnifiedCompletions_%1").arg(eclipseCaseName);
printCompletionsToFile(exportSettings.folder, fileName, completions, exportSettings.includeWpimult);
printCompletionsToFile(exportSettings.folder, fileName, completions, exportSettings.compdatExport);
}
else if (exportSettings.fileSplit == RicExportCompletionDataSettingsUi::SPLIT_ON_WELL)
{
@ -330,7 +329,7 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector
}
QString fileName = QString("%1_unifiedCompletions_%2").arg(wellPath->name()).arg(eclipseCaseName);
printCompletionsToFile(exportSettings.folder, fileName, wellCompletions, exportSettings.includeWpimult);
printCompletionsToFile(exportSettings.folder, fileName, wellCompletions, exportSettings.compdatExport);
}
}
else if (exportSettings.fileSplit == RicExportCompletionDataSettingsUi::SPLIT_ON_WELL_AND_COMPLETION_TYPE)
@ -340,12 +339,12 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector
{
std::vector<RigCompletionData> fishbonesCompletions = getCompletionsForWellAndCompletionType(completions, wellPath->completions()->wellNameForExport(), RigCompletionData::FISHBONES);
QString fileName = QString("%1_Fishbones_%2").arg(wellPath->name()).arg(eclipseCaseName);
printCompletionsToFile(exportSettings.folder, fileName, fishbonesCompletions, exportSettings.includeWpimult);
printCompletionsToFile(exportSettings.folder, fileName, fishbonesCompletions, exportSettings.compdatExport);
}
{
std::vector<RigCompletionData> perforationCompletions = getCompletionsForWellAndCompletionType(completions, wellPath->completions()->wellNameForExport(), RigCompletionData::PERFORATION);
QString fileName = QString("%1_Perforations_%2").arg(wellPath->name()).arg(eclipseCaseName);
printCompletionsToFile(exportSettings.folder, fileName, perforationCompletions, exportSettings.includeWpimult);
printCompletionsToFile(exportSettings.folder, fileName, perforationCompletions, exportSettings.compdatExport);
}
}
}
@ -405,16 +404,26 @@ RigCompletionData RicWellPathExportCompletionDataFeature::combineEclipseCellComp
RiaLogging::error(QString("Transmissibility calculation has failed for cell [%1, %2, %3]").arg(cellIndexIJK.i).arg(cellIndexIJK.j).arg(cellIndexIJK.k));
return resultCompletion; //Returning empty completion, should not be exported
}
if (settings.excludeMainBoreForFishbones && completionType == RigCompletionData::FISHBONES && completion.isMainBore())
{
continue;
}
totalTrans = totalTrans + completion.transmissibility();
resultCompletion.m_metadata.reserve(resultCompletion.m_metadata.size() + completion.m_metadata.size());
resultCompletion.m_metadata.insert(resultCompletion.m_metadata.end(), completion.m_metadata.begin(), completion.m_metadata.end());
}
if (settings.computeTransmissibility() && !settings.includeWpimult) //TODO: replace with explicitTransmissibilityExport setting
if (settings.compdatExport == RicExportCompletionDataSettingsUi::TRANSMISSIBILITIES)
{
resultCompletion.setCombinedValuesExplicitTrans(totalTrans, completionType);
}
if (settings.includeWpimult) //TODO: replace with implicitTransmissibilityExportByWPImult
if (settings.compdatExport == RicExportCompletionDataSettingsUi::WPIMULT_AND_DEFAULT_CONNECTION_FACTORS)
{
//calculate trans for main bore - but as Eclipse will do it!
double transmissibilityEclipseCalculation = RicWellPathExportCompletionDataFeature::calculateTransmissibilityAsEclipseDoes(settings.caseToApply(),
@ -437,10 +446,9 @@ RigCompletionData RicWellPathExportCompletionDataFeature::combineEclipseCellComp
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicWellPathExportCompletionDataFeature::printCompletionsToFile(const QString& exportFolder, const QString& fileName, std::vector<RigCompletionData>& completions, bool includeWpimult)
void RicWellPathExportCompletionDataFeature::printCompletionsToFile(const QString& exportFolder, const QString& fileName, std::vector<RigCompletionData>& completions, RicExportCompletionDataSettingsUi::CompdatExportType exportType)
{
//TODO: Check that completion is ready for export
//TODO: Use wpimult instead of count for export!
QString filePath = QDir(exportFolder).filePath(fileName);
QFile exportFile(filePath);
@ -460,7 +468,7 @@ void RicWellPathExportCompletionDataFeature::printCompletionsToFile(const QStrin
generateCompdatTable(formatter, completions);
if (includeWpimult)
if (exportType == RicExportCompletionDataSettingsUi::WPIMULT_AND_DEFAULT_CONNECTION_FACTORS)
{
generateWpimultTable(formatter, completions);
}
@ -499,7 +507,7 @@ void RicWellPathExportCompletionDataFeature::generateCompdatTable(RifEclipseData
RifEclipseOutputTableColumn("K2"),
RifEclipseOutputTableColumn("Status"),
RifEclipseOutputTableColumn("SAT"),
RifEclipseOutputTableColumn("TR"),
RifEclipseOutputTableColumn("TR", RifEclipseOutputTableDoubleFormatting(RifEclipseOutputTableDoubleFormat::SCIENTIFIC)),
RifEclipseOutputTableColumn("DIAM"),
RifEclipseOutputTableColumn("KH"),
RifEclipseOutputTableColumn("S"),
@ -513,6 +521,12 @@ void RicWellPathExportCompletionDataFeature::generateCompdatTable(RifEclipseData
for (const RigCompletionData& data : completionData)
{
if (data.transmissibility() == 0.0 || data.wpimult()==0.0)
{
//Don't export completions without transmissibility
continue;
}
for (const RigCompletionMetaData& metadata : data.metadata())
{
formatter.comment(QString("%1 : %2").arg(metadata.name).arg(metadata.comment));
@ -584,8 +598,13 @@ void RicWellPathExportCompletionDataFeature::generateWpimultTable(RifEclipseData
for (auto& completion : completionData)
{
if (completion.wpimult() == 0.0)
{
continue;
}
formatter.add(completion.wellName());
formatter.add(completion.count());
formatter.add(completion.wpimult());
formatter.addZeroBasedCellIndex(completion.cellIndex().i).addZeroBasedCellIndex(completion.cellIndex().j).addZeroBasedCellIndex(completion.cellIndex().k);
formatter.rowCompleted();
}
@ -618,7 +637,6 @@ std::vector<RigCompletionData> RicWellPathExportCompletionDataFeature::generateP
size_t i, j, k;
settings.caseToApply->eclipseCaseData()->mainGrid()->ijkFromCellIndex(cell.cellIndex, &i, &j, &k);
RigCompletionData completion(wellPath->completions()->wellNameForExport(), IJKCellIndex(i, j, k));
completion.addMetadata("Perforation", QString("StartMD: %1 - EndMD: %2").arg(interval->startMD()).arg(interval->endMD()));
CellDirection direction = calculateDirectionInCell(settings.caseToApply, cell.cellIndex, cell.internalCellLengths);
double transmissibility = RicWellPathExportCompletionDataFeature::calculateTransmissibility(settings.caseToApply,
@ -634,6 +652,7 @@ std::vector<RigCompletionData> RicWellPathExportCompletionDataFeature::generateP
interval->skinFactor(),
interval->diameter(unitSystem),
direction);
completion.addMetadata("Perforation", QString("StartMD: %1 - EndMD: %2").arg(interval->startMD()).arg(interval->endMD() + QString(" : ") + QString::number(transmissibility)));
completionData.push_back(completion);
}
}

View File

@ -156,7 +156,7 @@ private:
static RigCompletionData combineEclipseCellCompletions(const std::vector<RigCompletionData>& completions,
const RicExportCompletionDataSettingsUi& settings);
static void exportCompletions(const std::vector<RimWellPath*>& wellPaths, const std::vector<RimEclipseWell*>& simWells, const RicExportCompletionDataSettingsUi& exportSettings);
static void printCompletionsToFile(const QString& exportFolder, const QString& fileName, std::vector<RigCompletionData>& completions, bool includeWpimult);
static void printCompletionsToFile(const QString& exportFolder, const QString& fileName, std::vector<RigCompletionData>& completions, RicExportCompletionDataSettingsUi::CompdatExportType exportType);
static std::vector<RigCompletionData> getCompletionsForWellAndCompletionType(const std::vector<RigCompletionData>& completions, const QString& wellName, RigCompletionData::CompletionType completionType);
static void generateCompdatTable(RifEclipseDataTableFormatter& formatter, const std::vector<RigCompletionData>& completionData);

View File

@ -152,8 +152,8 @@ RifEclipseDataTableFormatter& RifEclipseDataTableFormatter::add(double num)
{
size_t column = m_lineBuffer.size();
CVF_ASSERT(column < m_columns.size());
m_columns[column].width = std::max(measure(num), m_columns[column].width);
m_lineBuffer.push_back(format(num));
m_columns[column].width = std::max(measure(num, m_columns[column].doubleFormat), m_columns[column].width);
m_lineBuffer.push_back(format(num, m_columns[column].doubleFormat));
return *this;
}
@ -220,9 +220,9 @@ int RifEclipseDataTableFormatter::measure(const QString str)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RifEclipseDataTableFormatter::measure(double num)
int RifEclipseDataTableFormatter::measure(double num, RifEclipseOutputTableDoubleFormatting doubleFormat)
{
return format(num).length();
return format(num, doubleFormat).length();
}
//--------------------------------------------------------------------------------------------------
@ -244,9 +244,17 @@ int RifEclipseDataTableFormatter::measure(size_t num)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RifEclipseDataTableFormatter::format(double num)
QString RifEclipseDataTableFormatter::format(double num, RifEclipseOutputTableDoubleFormatting doubleFormat)
{
return QString("%1").arg(num, 0, 'f', m_doubleDecimals);
switch (doubleFormat.format)
{
case RifEclipseOutputTableDoubleFormat::FLOAT:
return QString("%1").arg(num, 0, 'f', doubleFormat.width);
case RifEclipseOutputTableDoubleFormat::SCIENTIFIC:
return QString("%1").arg(num, 0, 'e');
default:
return QString("%1");
}
}
//--------------------------------------------------------------------------------------------------

View File

@ -41,6 +41,15 @@ enum RifEclipseOutputTableAlignment
RIGHT
};
//==================================================================================================
//
//==================================================================================================
enum RifEclipseOutputTableDoubleFormat
{
SCIENTIFIC,
FLOAT,
};
//==================================================================================================
//
//==================================================================================================
@ -50,21 +59,41 @@ struct RifEclipseOutputTableLine
std::vector< QString > data;
};
//==================================================================================================
//
//==================================================================================================
struct RifEclipseOutputTableDoubleFormatting
{
RifEclipseOutputTableDoubleFormatting(RifEclipseOutputTableDoubleFormat format = FLOAT, int width = 5)
: format(format),
width(width)
{}
RifEclipseOutputTableDoubleFormat format;
int width;
};
//==================================================================================================
//
//==================================================================================================
struct RifEclipseOutputTableColumn
{
RifEclipseOutputTableColumn(const QString& title, RifEclipseOutputTableAlignment alignment = LEFT, int width = -1)
RifEclipseOutputTableColumn(const QString& title,
RifEclipseOutputTableDoubleFormatting doubleFormat = RifEclipseOutputTableDoubleFormatting(),
RifEclipseOutputTableAlignment alignment = LEFT,
int width = -1)
: title(title),
doubleFormat(doubleFormat),
alignment(alignment),
width(width)
{
}
QString title;
RifEclipseOutputTableAlignment alignment;
int width;
QString title;
RifEclipseOutputTableDoubleFormatting doubleFormat;
RifEclipseOutputTableAlignment alignment;
int width;
};
@ -90,11 +119,11 @@ public:
private:
int measure(const QString str);
int measure(double num);
int measure(double num, RifEclipseOutputTableDoubleFormatting doubleFormat);
int measure(int num);
int measure(size_t num);
QString format(double num);
QString format(double num, RifEclipseOutputTableDoubleFormatting doubleFormat);
QString format(int num);
QString format(size_t num);
QString formatColumn(const QString str, RifEclipseOutputTableColumn column);
@ -107,6 +136,5 @@ private:
std::vector<RifEclipseOutputTableLine> m_buffer;
std::vector<QString> m_lineBuffer;
QTextStream& m_out;
int m_doubleDecimals = 5;
int m_colSpacing = 5;
};

View File

@ -1545,7 +1545,7 @@ bool RimReservoirCellResultsStorage::isDataPresent(size_t scalarResultIndex) con
return false;
}
const std::vector< std::vector<double> > data = m_cellResults->cellScalarResults(scalarResultIndex);
const std::vector< std::vector<double> >& data = m_cellResults->cellScalarResults(scalarResultIndex);
for (size_t tsIdx = 0; tsIdx < data.size(); ++tsIdx)
{

View File

@ -39,7 +39,7 @@ RigCompletionData::RigCompletionData(const QString wellName, const IJKCellIndex&
m_direction(DIR_UNDEF),
m_connectionState(OPEN),
m_count(1),
m_wpimult(1),
m_wpimult(HUGE_VAL),
m_isMainBore(false),
m_readyForExport(false)
{
@ -90,7 +90,6 @@ RigCompletionData RigCompletionData::combine(const std::vector<RigCompletionData
result.m_metadata.reserve(result.m_metadata.size() + it->m_metadata.size());
result.m_metadata.insert(result.m_metadata.end(), it->m_metadata.begin(), it->m_metadata.end());
//TODO: remove?
result.m_count += it->m_count;
}
@ -138,13 +137,15 @@ void RigCompletionData::setFromFracture(double transmissibility, double skinFact
void RigCompletionData::setTransAndWPImultBackgroundDataFromFishbone(double transmissibility,
double skinFactor,
double diameter,
CellDirection direction)
CellDirection direction,
bool isMainBore)
{
m_completionType = FISHBONES;
m_transmissibility = transmissibility;
m_skinFactor = skinFactor;
m_diameter = diameter;
m_direction = direction;
m_isMainBore = isMainBore;
}
//==================================================================================================
@ -184,6 +185,7 @@ void RigCompletionData::setCombinedValuesImplicitTransWPImult(double wpimult,
CompletionType completionType)
{
m_wpimult = wpimult;
m_direction = celldirection;
m_completionType = completionType;
m_skinFactor = skinFactor;
m_diameter = wellDiameter;
@ -250,6 +252,9 @@ void RigCompletionData::copy(RigCompletionData& target, const RigCompletionData&
target.m_skinFactor = from.m_skinFactor;
target.m_dFactor = from.m_dFactor;
target.m_direction = from.m_direction;
target.m_isMainBore = from.m_isMainBore;
target.m_readyForExport = from.m_readyForExport;
target.m_count = from.m_count;
target.m_wpimult = from.m_wpimult;
target.m_completionType = from.m_completionType;
}

View File

@ -111,7 +111,9 @@ public:
void setTransAndWPImultBackgroundDataFromFishbone(double transmissibility,
double skinFactor,
double diameter,
CellDirection direction);
CellDirection direction,
bool isMainBore);
void setTransAndWPImultBackgroundDataFromPerforation(double transmissibility,
double skinFactor,
double diameter,
@ -140,13 +142,14 @@ public:
double dFactor() const { return m_dFactor; }
CellDirection direction() const { return m_direction; }
size_t count() const { return m_count; }
double wpimult() const { return m_wpimult; }
CompletionType completionType() const { return m_completionType; }
bool isMainBore() const { return m_isMainBore; }
bool readyForExport() const { return m_readyForExport; }
std::vector<RigCompletionMetaData> m_metadata;
private:
std::vector<RigCompletionMetaData> m_metadata;
QString m_wellName;
IJKCellIndex m_cellIndex;
WellConnectionState m_connectionState;
@ -162,7 +165,7 @@ private:
bool m_readyForExport;
size_t m_count; //TODO: Remove, usage replaced by WPImult
size_t m_wpimult;
double m_wpimult;
CompletionType m_completionType;

View File

@ -197,6 +197,7 @@ std::vector<cvf::Vec3d> RigWellPath::clippedPointSubset(double startMD, double e
{
std::vector<cvf::Vec3d> points;
if (m_measuredDepths.empty()) return points;
if (startMD > endMD) return points;
size_t i = 0;
// Skip points below startMD