mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Merge branch 'dev' into well-path-restructure
This commit is contained in:
commit
845b1acbbd
@ -36,6 +36,14 @@ namespace caf
|
|||||||
addItem(RicExportCompletionDataSettingsUi::CHECKED_WELLS, "CHECKED_WELLS", "Checked Wells");
|
addItem(RicExportCompletionDataSettingsUi::CHECKED_WELLS, "CHECKED_WELLS", "Checked Wells");
|
||||||
setDefault(RicExportCompletionDataSettingsUi::ALL_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,16 +58,14 @@ RicExportCompletionDataSettingsUi::RicExportCompletionDataSettingsUi()
|
|||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&fileSplit, "FileSplit", "File Split", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&fileSplit, "FileSplit", "File Split", "", "", "");
|
||||||
CAF_PDM_InitFieldNoDefault(&wellSelection, "WellSelection", "Well Selection", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&wellSelection, "WellSelection", "Well Selection", "", "", "");
|
||||||
|
CAF_PDM_InitFieldNoDefault(&compdatExport, "compdatExport", "Export", "", " ", "");
|
||||||
|
|
||||||
CAF_PDM_InitField(&timeStep, "TimeStepIndex", 0, "Time Step", "", "", "");
|
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(&includePerforations, "IncludePerforations", true, "Include Perforations", "", "", "");
|
||||||
CAF_PDM_InitField(&includeFishbones, "IncludeFishbones", true, "Include Fishbones", "", "", "");
|
CAF_PDM_InitField(&includeFishbones, "IncludeFishbones", true, "Include Fishbones", "", "", "");
|
||||||
|
|
||||||
CAF_PDM_InitField(&includeWpimult, "IncludeWPIMULT", true, "Include WPIMLUT", "", "", "");
|
CAF_PDM_InitField(&excludeMainBoreForFishbones, "ExcludeMainBoreForFishbones", false, "Exclude Main Bore Transmissibility For Fishbones", "", "", "");
|
||||||
CAF_PDM_InitField(&removeLateralsInMainBoreCells, "RemoveLateralsInMainBoreCells", false, "Remove Laterals in Main Bore Cells", "", "", "");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -88,3 +94,25 @@ QList<caf::PdmOptionItemInfo> RicExportCompletionDataSettingsUi::calculateValueO
|
|||||||
}
|
}
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RicExportCompletionDataSettingsUi::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
@ -44,22 +44,33 @@ public:
|
|||||||
};
|
};
|
||||||
typedef caf::AppEnum<WellSelection> WellSelectionType;
|
typedef caf::AppEnum<WellSelection> WellSelectionType;
|
||||||
|
|
||||||
|
enum CompdatExport {
|
||||||
|
TRANSMISSIBILITIES,
|
||||||
|
WPIMULT_AND_DEFAULT_CONNECTION_FACTORS,
|
||||||
|
};
|
||||||
|
typedef caf::AppEnum<CompdatExport> CompdatExportType;
|
||||||
|
|
||||||
|
|
||||||
RicExportCompletionDataSettingsUi();
|
RicExportCompletionDataSettingsUi();
|
||||||
|
|
||||||
|
|
||||||
caf::PdmField<ExportSplitType> fileSplit;
|
caf::PdmField<ExportSplitType> fileSplit;
|
||||||
caf::PdmField<WellSelectionType> wellSelection;
|
caf::PdmField<WellSelectionType> wellSelection;
|
||||||
|
caf::PdmField<CompdatExportType> compdatExport;
|
||||||
|
|
||||||
|
|
||||||
caf::PdmField<bool> computeTransmissibility;
|
|
||||||
caf::PdmField<bool> includePerforations;
|
caf::PdmField<bool> includePerforations;
|
||||||
caf::PdmField<bool> includeFishbones;
|
caf::PdmField<bool> includeFishbones;
|
||||||
|
|
||||||
caf::PdmField<bool> includeWpimult;
|
caf::PdmField<bool> excludeMainBoreForFishbones;
|
||||||
caf::PdmField<bool> removeLateralsInMainBoreCells;
|
|
||||||
|
|
||||||
caf::PdmField<int> timeStep;
|
caf::PdmField<int> timeStep;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -76,6 +76,7 @@ void RicExportFishbonesWellSegmentsFeature::onActionTriggered(bool isChecked)
|
|||||||
|
|
||||||
exportSettings.folder = defaultDir;
|
exportSettings.folder = defaultDir;
|
||||||
|
|
||||||
|
//Bjørnar: skal denne være noe annet?
|
||||||
caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Completion Data", "");
|
caf::PdmUiPropertyViewDialog propertyDialog(RiuMainWindow::instance(), &exportSettings, "Export Completion Data", "");
|
||||||
if (propertyDialog.exec() == QDialog::Accepted)
|
if (propertyDialog.exec() == QDialog::Accepted)
|
||||||
{
|
{
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "RimFishbonesMultipleSubs.h"
|
#include "RimFishbonesMultipleSubs.h"
|
||||||
#include "RimFishboneWellPathCollection.h"
|
#include "RimFishboneWellPathCollection.h"
|
||||||
#include "RimWellPathCompletions.h"
|
#include "RimWellPathCompletions.h"
|
||||||
|
#include "RigCompletionData.h"
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
@ -41,14 +42,6 @@ void RicFishbonesTransmissibilityCalculationFeatureImp::findFishboneLateralsWell
|
|||||||
std::vector<WellSegmentLocation> locations = RicWellPathExportCompletionDataFeature::findWellSegmentLocations(settings.caseToApply, wellPath);
|
std::vector<WellSegmentLocation> locations = RicWellPathExportCompletionDataFeature::findWellSegmentLocations(settings.caseToApply, wellPath);
|
||||||
|
|
||||||
RiaEclipseUnitTools::UnitSystem unitSystem = caseData->unitsType();
|
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;
|
bool isMainBore = false;
|
||||||
|
|
||||||
std::vector<RigCompletionData> completionData;
|
std::vector<RigCompletionData> completionData;
|
||||||
@ -59,8 +52,6 @@ void RicFishbonesTransmissibilityCalculationFeatureImp::findFishboneLateralsWell
|
|||||||
{
|
{
|
||||||
for (const WellSegmentLateralIntersection& intersection : lateral.intersections)
|
for (const WellSegmentLateralIntersection& intersection : lateral.intersections)
|
||||||
{
|
{
|
||||||
if (intersection.mainBoreCell && settings.removeLateralsInMainBoreCells()) continue;
|
|
||||||
|
|
||||||
double diameter = location.fishbonesSubs->holeDiameter(unitSystem);
|
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,
|
WellBorePartForTransCalc wellBorePart = WellBorePartForTransCalc(intersection.lengthsInCell,
|
||||||
@ -159,7 +150,9 @@ std::vector<RigCompletionData> RicFishbonesTransmissibilityCalculationFeatureImp
|
|||||||
wellBorePart.wellRadius *2,
|
wellBorePart.wellRadius *2,
|
||||||
direction,
|
direction,
|
||||||
wellBorePart.isMainBore);
|
wellBorePart.isMainBore);
|
||||||
|
|
||||||
completion.addMetadata(wellBorePart.metaData, QString::number(transmissibility));
|
completion.addMetadata(wellBorePart.metaData, QString::number(transmissibility));
|
||||||
|
|
||||||
completionData.push_back(completion);
|
completionData.push_back(completion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,7 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector
|
|||||||
if (exportSettings.fileSplit == RicExportCompletionDataSettingsUi::UNIFIED_FILE)
|
if (exportSettings.fileSplit == RicExportCompletionDataSettingsUi::UNIFIED_FILE)
|
||||||
{
|
{
|
||||||
const QString fileName = QString("UnifiedCompletions_%1").arg(eclipseCaseName);
|
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)
|
else if (exportSettings.fileSplit == RicExportCompletionDataSettingsUi::SPLIT_ON_WELL)
|
||||||
{
|
{
|
||||||
@ -231,7 +231,7 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector
|
|||||||
}
|
}
|
||||||
|
|
||||||
QString fileName = QString("%1_unifiedCompletions_%2").arg(wellPath->name()).arg(eclipseCaseName);
|
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)
|
else if (exportSettings.fileSplit == RicExportCompletionDataSettingsUi::SPLIT_ON_WELL_AND_COMPLETION_TYPE)
|
||||||
@ -241,12 +241,12 @@ void RicWellPathExportCompletionDataFeature::exportCompletions(const std::vector
|
|||||||
{
|
{
|
||||||
std::vector<RigCompletionData> fishbonesCompletions = getCompletionsForWellAndCompletionType(completions, wellPath->completions()->wellNameForExport(), RigCompletionData::FISHBONES);
|
std::vector<RigCompletionData> fishbonesCompletions = getCompletionsForWellAndCompletionType(completions, wellPath->completions()->wellNameForExport(), RigCompletionData::FISHBONES);
|
||||||
QString fileName = QString("%1_Fishbones_%2").arg(wellPath->name()).arg(eclipseCaseName);
|
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);
|
std::vector<RigCompletionData> perforationCompletions = getCompletionsForWellAndCompletionType(completions, wellPath->completions()->wellNameForExport(), RigCompletionData::PERFORATION);
|
||||||
QString fileName = QString("%1_Perforations_%2").arg(wellPath->name()).arg(eclipseCaseName);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -307,6 +307,11 @@ RigCompletionData RicWellPathExportCompletionDataFeature::combineEclipseCellComp
|
|||||||
return resultCompletion; //Returning empty completion, should not be exported
|
return resultCompletion; //Returning empty completion, should not be exported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings.excludeMainBoreForFishbones && completionType == RigCompletionData::FISHBONES && completion.isMainBore())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
totalTrans = totalTrans + completion.transmissibility();
|
totalTrans = totalTrans + completion.transmissibility();
|
||||||
|
|
||||||
resultCompletion.m_metadata.reserve(resultCompletion.m_metadata.size() + completion.m_metadata.size());
|
resultCompletion.m_metadata.reserve(resultCompletion.m_metadata.size() + completion.m_metadata.size());
|
||||||
@ -315,12 +320,12 @@ RigCompletionData RicWellPathExportCompletionDataFeature::combineEclipseCellComp
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (settings.computeTransmissibility() && !settings.includeWpimult) //TODO: replace with explicitTransmissibilityExport setting
|
if (settings.compdatExport == RicExportCompletionDataSettingsUi::TRANSMISSIBILITIES)
|
||||||
{
|
{
|
||||||
resultCompletion.setCombinedValuesExplicitTrans(totalTrans, completionType);
|
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!
|
//calculate trans for main bore - but as Eclipse will do it!
|
||||||
double transmissibilityEclipseCalculation = RicWellPathExportCompletionDataFeature::calculateTransmissibilityAsEclipseDoes(settings.caseToApply(),
|
double transmissibilityEclipseCalculation = RicWellPathExportCompletionDataFeature::calculateTransmissibilityAsEclipseDoes(settings.caseToApply(),
|
||||||
@ -343,10 +348,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: Check that completion is ready for export
|
||||||
//TODO: Use wpimult instead of count for export!
|
|
||||||
|
|
||||||
QString filePath = QDir(exportFolder).filePath(fileName);
|
QString filePath = QDir(exportFolder).filePath(fileName);
|
||||||
QFile exportFile(filePath);
|
QFile exportFile(filePath);
|
||||||
@ -366,7 +370,7 @@ void RicWellPathExportCompletionDataFeature::printCompletionsToFile(const QStrin
|
|||||||
generateCompdatTable(formatter, completions);
|
generateCompdatTable(formatter, completions);
|
||||||
|
|
||||||
|
|
||||||
if (includeWpimult)
|
if (exportType == RicExportCompletionDataSettingsUi::WPIMULT_AND_DEFAULT_CONNECTION_FACTORS)
|
||||||
{
|
{
|
||||||
generateWpimultTable(formatter, completions);
|
generateWpimultTable(formatter, completions);
|
||||||
}
|
}
|
||||||
@ -405,7 +409,7 @@ void RicWellPathExportCompletionDataFeature::generateCompdatTable(RifEclipseData
|
|||||||
RifEclipseOutputTableColumn("K2"),
|
RifEclipseOutputTableColumn("K2"),
|
||||||
RifEclipseOutputTableColumn("Status"),
|
RifEclipseOutputTableColumn("Status"),
|
||||||
RifEclipseOutputTableColumn("SAT"),
|
RifEclipseOutputTableColumn("SAT"),
|
||||||
RifEclipseOutputTableColumn("TR"),
|
RifEclipseOutputTableColumn("TR", RifEclipseOutputTableDoubleFormatting(RifEclipseOutputTableDoubleFormat::SCIENTIFIC)),
|
||||||
RifEclipseOutputTableColumn("DIAM"),
|
RifEclipseOutputTableColumn("DIAM"),
|
||||||
RifEclipseOutputTableColumn("KH"),
|
RifEclipseOutputTableColumn("KH"),
|
||||||
RifEclipseOutputTableColumn("S"),
|
RifEclipseOutputTableColumn("S"),
|
||||||
@ -419,6 +423,12 @@ void RicWellPathExportCompletionDataFeature::generateCompdatTable(RifEclipseData
|
|||||||
|
|
||||||
for (const RigCompletionData& data : completionData)
|
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())
|
for (const RigCompletionMetaData& metadata : data.metadata())
|
||||||
{
|
{
|
||||||
formatter.comment(QString("%1 : %2").arg(metadata.name).arg(metadata.comment));
|
formatter.comment(QString("%1 : %2").arg(metadata.name).arg(metadata.comment));
|
||||||
@ -490,8 +500,13 @@ void RicWellPathExportCompletionDataFeature::generateWpimultTable(RifEclipseData
|
|||||||
|
|
||||||
for (auto& completion : completionData)
|
for (auto& completion : completionData)
|
||||||
{
|
{
|
||||||
|
if (completion.wpimult() == 0.0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
formatter.add(completion.wellName());
|
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.addZeroBasedCellIndex(completion.cellIndex().i).addZeroBasedCellIndex(completion.cellIndex().j).addZeroBasedCellIndex(completion.cellIndex().k);
|
||||||
formatter.rowCompleted();
|
formatter.rowCompleted();
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,7 @@ private:
|
|||||||
static RigCompletionData combineEclipseCellCompletions(const std::vector<RigCompletionData>& completions,
|
static RigCompletionData combineEclipseCellCompletions(const std::vector<RigCompletionData>& completions,
|
||||||
const RicExportCompletionDataSettingsUi& settings);
|
const RicExportCompletionDataSettingsUi& settings);
|
||||||
static void exportCompletions(const std::vector<RimWellPath*>& wellPaths, const RicExportCompletionDataSettingsUi& exportSettings);
|
static void exportCompletions(const std::vector<RimWellPath*>& wellPaths, 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 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);
|
static void generateCompdatTable(RifEclipseDataTableFormatter& formatter, const std::vector<RigCompletionData>& completionData);
|
||||||
|
@ -152,8 +152,8 @@ RifEclipseDataTableFormatter& RifEclipseDataTableFormatter::add(double num)
|
|||||||
{
|
{
|
||||||
size_t column = m_lineBuffer.size();
|
size_t column = m_lineBuffer.size();
|
||||||
CVF_ASSERT(column < m_columns.size());
|
CVF_ASSERT(column < m_columns.size());
|
||||||
m_columns[column].width = std::max(measure(num), m_columns[column].width);
|
m_columns[column].width = std::max(measure(num, m_columns[column].doubleFormat), m_columns[column].width);
|
||||||
m_lineBuffer.push_back(format(num));
|
m_lineBuffer.push_back(format(num, m_columns[column].doubleFormat));
|
||||||
return *this;
|
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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -41,6 +41,15 @@ enum RifEclipseOutputTableAlignment
|
|||||||
RIGHT
|
RIGHT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//==================================================================================================
|
||||||
|
//
|
||||||
|
//==================================================================================================
|
||||||
|
enum RifEclipseOutputTableDoubleFormat
|
||||||
|
{
|
||||||
|
SCIENTIFIC,
|
||||||
|
FLOAT,
|
||||||
|
};
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
//
|
//
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
@ -50,21 +59,41 @@ struct RifEclipseOutputTableLine
|
|||||||
std::vector< QString > data;
|
std::vector< QString > data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//==================================================================================================
|
||||||
|
//
|
||||||
|
//==================================================================================================
|
||||||
|
struct RifEclipseOutputTableDoubleFormatting
|
||||||
|
{
|
||||||
|
RifEclipseOutputTableDoubleFormatting(RifEclipseOutputTableDoubleFormat format = FLOAT, int width = 5)
|
||||||
|
: format(format),
|
||||||
|
width(width)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
RifEclipseOutputTableDoubleFormat format;
|
||||||
|
int width;
|
||||||
|
};
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
//
|
//
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
struct RifEclipseOutputTableColumn
|
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),
|
: title(title),
|
||||||
|
doubleFormat(doubleFormat),
|
||||||
alignment(alignment),
|
alignment(alignment),
|
||||||
width(width)
|
width(width)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
QString title;
|
QString title;
|
||||||
RifEclipseOutputTableAlignment alignment;
|
RifEclipseOutputTableDoubleFormatting doubleFormat;
|
||||||
int width;
|
RifEclipseOutputTableAlignment alignment;
|
||||||
|
int width;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -90,11 +119,11 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
int measure(const QString str);
|
int measure(const QString str);
|
||||||
int measure(double num);
|
int measure(double num, RifEclipseOutputTableDoubleFormatting doubleFormat);
|
||||||
int measure(int num);
|
int measure(int num);
|
||||||
int measure(size_t num);
|
int measure(size_t num);
|
||||||
|
|
||||||
QString format(double num);
|
QString format(double num, RifEclipseOutputTableDoubleFormatting doubleFormat);
|
||||||
QString format(int num);
|
QString format(int num);
|
||||||
QString format(size_t num);
|
QString format(size_t num);
|
||||||
QString formatColumn(const QString str, RifEclipseOutputTableColumn column);
|
QString formatColumn(const QString str, RifEclipseOutputTableColumn column);
|
||||||
@ -107,6 +136,5 @@ private:
|
|||||||
std::vector<RifEclipseOutputTableLine> m_buffer;
|
std::vector<RifEclipseOutputTableLine> m_buffer;
|
||||||
std::vector<QString> m_lineBuffer;
|
std::vector<QString> m_lineBuffer;
|
||||||
QTextStream& m_out;
|
QTextStream& m_out;
|
||||||
int m_doubleDecimals = 5;
|
|
||||||
int m_colSpacing = 5;
|
int m_colSpacing = 5;
|
||||||
};
|
};
|
||||||
|
@ -252,6 +252,9 @@ void RigCompletionData::copy(RigCompletionData& target, const RigCompletionData&
|
|||||||
target.m_skinFactor = from.m_skinFactor;
|
target.m_skinFactor = from.m_skinFactor;
|
||||||
target.m_dFactor = from.m_dFactor;
|
target.m_dFactor = from.m_dFactor;
|
||||||
target.m_direction = from.m_direction;
|
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_count = from.m_count;
|
||||||
|
target.m_wpimult = from.m_wpimult;
|
||||||
target.m_completionType = from.m_completionType;
|
target.m_completionType = from.m_completionType;
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ public:
|
|||||||
bool isMainBore() const { return m_isMainBore; }
|
bool isMainBore() const { return m_isMainBore; }
|
||||||
bool readyForExport() const { return m_readyForExport; }
|
bool readyForExport() const { return m_readyForExport; }
|
||||||
|
|
||||||
std::vector<RigCompletionMetaData> m_metadata; //TODO: Is this OK?
|
std::vector<RigCompletionMetaData> m_metadata;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_wellName;
|
QString m_wellName;
|
||||||
|
@ -164,6 +164,7 @@ std::vector<cvf::Vec3d> RigWellPath::clippedPointSubset(double startMD, double e
|
|||||||
{
|
{
|
||||||
std::vector<cvf::Vec3d> points;
|
std::vector<cvf::Vec3d> points;
|
||||||
if (m_measuredDepths.empty()) return points;
|
if (m_measuredDepths.empty()) return points;
|
||||||
|
if (startMD > endMD) return points;
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
// Skip points below startMD
|
// Skip points below startMD
|
||||||
|
Loading…
Reference in New Issue
Block a user