mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3230 Repeat COMPSEGS for each completion type.
This commit is contained in:
@@ -447,7 +447,6 @@ void RicWellPathExportCompletionDataFeatureImpl::generateWelsegsTable(RifEclipse
|
||||
}
|
||||
|
||||
{
|
||||
formatter.comment("Main stem");
|
||||
double prevMD = exportInfo.initialMD();
|
||||
double prevTVD = exportInfo.initialTVD();
|
||||
for (const RicMswSegment& location : exportInfo.wellSegmentLocations())
|
||||
@@ -485,25 +484,41 @@ void RicWellPathExportCompletionDataFeatureImpl::generateWelsegsTable(RifEclipse
|
||||
}
|
||||
|
||||
{
|
||||
formatter.comment("Laterals");
|
||||
formatter.comment("Diam: MSW - Tubing Radius");
|
||||
formatter.comment("Rough: MSW - Open Hole Roughness Factor");
|
||||
for (const RicMswSegment& location : exportInfo.wellSegmentLocations())
|
||||
{
|
||||
if (location.completions().empty())
|
||||
{
|
||||
continue;
|
||||
generateWelsegsSegments(formatter, exportInfo, { RigCompletionData::ICD, RigCompletionData::FISHBONES});
|
||||
generateWelsegsSegments(formatter, exportInfo, { RigCompletionData::FRACTURE });
|
||||
}
|
||||
|
||||
for (const RicMswCompletion& completion : location.completions())
|
||||
formatter.tableCompleted();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicWellPathExportCompletionDataFeatureImpl::generateWelsegsSegments(
|
||||
RifEclipseDataTableFormatter& formatter,
|
||||
const RicMswExportInfo& exportInfo,
|
||||
const std::set<RigCompletionData::CompletionType>& exportCompletionTypes)
|
||||
{
|
||||
bool generatedHeader = false;
|
||||
for (const RicMswSegment& segment : exportInfo.wellSegmentLocations())
|
||||
{
|
||||
for (const RicMswCompletion& completion : segment.completions())
|
||||
{
|
||||
if (exportCompletionTypes.count(completion.completionType()))
|
||||
{
|
||||
if (!generatedHeader)
|
||||
{
|
||||
generateWelsegsCompletionCommentHeader(formatter, completion.completionType());
|
||||
generatedHeader = true;
|
||||
}
|
||||
|
||||
if (completion.completionType() == RigCompletionData::ICD) // Found ICD
|
||||
{
|
||||
formatter.comment(completion.label());
|
||||
formatter.add(completion.subSegments().front().segmentNumber());
|
||||
formatter.add(completion.subSegments().front().segmentNumber());
|
||||
formatter.add(completion.branchNumber());
|
||||
formatter.add(location.segmentNumber());
|
||||
formatter.add(segment.segmentNumber());
|
||||
formatter.add(0.1); // ICDs have 0.1 length
|
||||
formatter.add(0); // Depth change
|
||||
formatter.add(exportInfo.linerDiameter());
|
||||
@@ -515,14 +530,15 @@ void RicWellPathExportCompletionDataFeatureImpl::generateWelsegsTable(RifEclipse
|
||||
if (completion.completionType() == RigCompletionData::FISHBONES)
|
||||
{
|
||||
formatter.comment(QString("%1 : Sub index %2 - %3")
|
||||
.arg(location.label())
|
||||
.arg(location.subIndex())
|
||||
.arg(segment.label())
|
||||
.arg(segment.subIndex())
|
||||
.arg(completion.label()));
|
||||
}
|
||||
else if (completion.completionType() == RigCompletionData::FRACTURE)
|
||||
{
|
||||
formatter.comment(QString("%1 connected to %2").arg(completion.label()).arg(location.label()));
|
||||
formatter.comment(QString("%1 connected to %2").arg(completion.label()).arg(segment.label()));
|
||||
}
|
||||
|
||||
for (const RicMswSubSegment& subSegment : completion.subSegments())
|
||||
{
|
||||
double depth = 0;
|
||||
@@ -538,7 +554,7 @@ void RicWellPathExportCompletionDataFeatureImpl::generateWelsegsTable(RifEclipse
|
||||
depth = subSegment.startTVD() + subSegment.deltaTVD();
|
||||
length = subSegment.startMD() + subSegment.deltaMD();
|
||||
}
|
||||
double diameter = location.effectiveDiameter();
|
||||
double diameter = segment.effectiveDiameter();
|
||||
formatter.add(subSegment.segmentNumber());
|
||||
formatter.add(subSegment.segmentNumber());
|
||||
formatter.add(completion.branchNumber());
|
||||
@@ -546,15 +562,36 @@ void RicWellPathExportCompletionDataFeatureImpl::generateWelsegsTable(RifEclipse
|
||||
formatter.add(length);
|
||||
formatter.add(depth);
|
||||
formatter.add(diameter);
|
||||
formatter.add(location.openHoleRoughnessFactor());
|
||||
formatter.add(segment.openHoleRoughnessFactor());
|
||||
formatter.rowCompleted();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
formatter.tableCompleted();
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicWellPathExportCompletionDataFeatureImpl::generateWelsegsCompletionCommentHeader(RifEclipseDataTableFormatter &formatter, RigCompletionData::CompletionType completionType)
|
||||
{
|
||||
if (completionType == RigCompletionData::CT_UNDEFINED)
|
||||
{
|
||||
formatter.comment("Main stem");
|
||||
}
|
||||
else if (completionType == RigCompletionData::ICD)
|
||||
{
|
||||
formatter.comment("Fishbone Laterals");
|
||||
formatter.comment("Diam: MSW - Tubing Radius");
|
||||
formatter.comment("Rough: MSW - Open Hole Roughness Factor");
|
||||
}
|
||||
else if (completionType == RigCompletionData::FRACTURE)
|
||||
{
|
||||
formatter.comment("Fracture Segments");
|
||||
formatter.comment("Diam: MSW - Default Dummy");
|
||||
formatter.comment("Rough: MSW - Default Dummy");
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -563,10 +600,27 @@ void RicWellPathExportCompletionDataFeatureImpl::generateWelsegsTable(RifEclipse
|
||||
void RicWellPathExportCompletionDataFeatureImpl::generateCompsegTables(RifEclipseDataTableFormatter& formatter,
|
||||
const RicMswExportInfo& exportInfo)
|
||||
{
|
||||
generateCompsegTable(formatter, exportInfo, false);
|
||||
/*
|
||||
* TODO: Creating the regular perforation COMPSEGS table should come in here, before the others
|
||||
* should take precedence by appearing later in the output. See #3230.
|
||||
*/
|
||||
|
||||
{
|
||||
std::set<RigCompletionData::CompletionType> fishbonesTypes = { RigCompletionData::ICD, RigCompletionData::FISHBONES };
|
||||
generateCompsegTable(formatter, exportInfo, false, fishbonesTypes);
|
||||
if (exportInfo.hasSubGridIntersections())
|
||||
{
|
||||
generateCompsegTable(formatter, exportInfo, true);
|
||||
generateCompsegTable(formatter, exportInfo, true, fishbonesTypes);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
std::set<RigCompletionData::CompletionType> fractureTypes = { RigCompletionData::FRACTURE };
|
||||
generateCompsegTable(formatter, exportInfo, false, fractureTypes);
|
||||
if (exportInfo.hasSubGridIntersections())
|
||||
{
|
||||
generateCompsegTable(formatter, exportInfo, true, fractureTypes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -575,43 +629,10 @@ void RicWellPathExportCompletionDataFeatureImpl::generateCompsegTables(RifEclips
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicWellPathExportCompletionDataFeatureImpl::generateCompsegTable(RifEclipseDataTableFormatter& formatter,
|
||||
const RicMswExportInfo& exportInfo,
|
||||
bool exportSubGridIntersections)
|
||||
bool exportSubGridIntersections,
|
||||
const std::set<RigCompletionData::CompletionType>& exportCompletionTypes)
|
||||
{
|
||||
if (exportSubGridIntersections)
|
||||
{
|
||||
formatter.keyword("COMPSEGL");
|
||||
}
|
||||
else
|
||||
{
|
||||
formatter.keyword("COMPSEGS");
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<RifEclipseOutputTableColumn> header = {RifEclipseOutputTableColumn("Name")};
|
||||
formatter.header(header);
|
||||
formatter.add(exportInfo.wellPath()->name());
|
||||
formatter.rowCompleted();
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<RifEclipseOutputTableColumn> allHeaders;
|
||||
if (exportSubGridIntersections)
|
||||
{
|
||||
allHeaders.push_back(RifEclipseOutputTableColumn("Grid"));
|
||||
}
|
||||
|
||||
std::vector<RifEclipseOutputTableColumn> commonHeaders = {RifEclipseOutputTableColumn("I"),
|
||||
RifEclipseOutputTableColumn("J"),
|
||||
RifEclipseOutputTableColumn("K"),
|
||||
RifEclipseOutputTableColumn("Branch no"),
|
||||
RifEclipseOutputTableColumn("Start Length"),
|
||||
RifEclipseOutputTableColumn("End Length"),
|
||||
RifEclipseOutputTableColumn("Dir Pen"),
|
||||
RifEclipseOutputTableColumn("End Range"),
|
||||
RifEclipseOutputTableColumn("Connection Depth")};
|
||||
allHeaders.insert(allHeaders.end(), commonHeaders.begin(), commonHeaders.end());
|
||||
formatter.header(allHeaders);
|
||||
}
|
||||
bool generatedHeader = false;
|
||||
|
||||
for (const RicMswSegment& location : exportInfo.wellSegmentLocations())
|
||||
{
|
||||
@@ -619,6 +640,14 @@ void RicWellPathExportCompletionDataFeatureImpl::generateCompsegTable(RifEclipse
|
||||
|
||||
for (const RicMswCompletion& completion : location.completions())
|
||||
{
|
||||
if (exportCompletionTypes.count(completion.completionType()))
|
||||
{
|
||||
if (!generatedHeader)
|
||||
{
|
||||
generateCompsegHeader(formatter, exportInfo, completion.completionType(), exportSubGridIntersections);
|
||||
generatedHeader = true;
|
||||
}
|
||||
|
||||
for (const RicMswSubSegment& segment : completion.subSegments())
|
||||
{
|
||||
if (completion.completionType() == RigCompletionData::ICD)
|
||||
@@ -653,10 +682,65 @@ void RicWellPathExportCompletionDataFeatureImpl::generateCompsegTable(RifEclipse
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
formatter.tableCompleted();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicWellPathExportCompletionDataFeatureImpl::generateCompsegHeader(RifEclipseDataTableFormatter& formatter,
|
||||
const RicMswExportInfo& exportInfo,
|
||||
RigCompletionData::CompletionType completionType,
|
||||
bool exportSubGridIntersections)
|
||||
{
|
||||
if (exportSubGridIntersections)
|
||||
{
|
||||
formatter.keyword("COMPSEGL");
|
||||
}
|
||||
else
|
||||
{
|
||||
formatter.keyword("COMPSEGS");
|
||||
}
|
||||
|
||||
if (completionType == RigCompletionData::ICD)
|
||||
{
|
||||
formatter.comment("Fishbones");
|
||||
}
|
||||
else if (completionType == RigCompletionData::FRACTURE)
|
||||
{
|
||||
formatter.comment("Fractures");
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<RifEclipseOutputTableColumn> header = { RifEclipseOutputTableColumn("Name") };
|
||||
formatter.header(header);
|
||||
formatter.add(exportInfo.wellPath()->name());
|
||||
formatter.rowCompleted();
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<RifEclipseOutputTableColumn> allHeaders;
|
||||
if (exportSubGridIntersections)
|
||||
{
|
||||
allHeaders.push_back(RifEclipseOutputTableColumn("Grid"));
|
||||
}
|
||||
|
||||
std::vector<RifEclipseOutputTableColumn> commonHeaders = { RifEclipseOutputTableColumn("I"),
|
||||
RifEclipseOutputTableColumn("J"),
|
||||
RifEclipseOutputTableColumn("K"),
|
||||
RifEclipseOutputTableColumn("Branch no"),
|
||||
RifEclipseOutputTableColumn("Start Length"),
|
||||
RifEclipseOutputTableColumn("End Length"),
|
||||
RifEclipseOutputTableColumn("Dir Pen"),
|
||||
RifEclipseOutputTableColumn("End Range"),
|
||||
RifEclipseOutputTableColumn("Connection Depth") };
|
||||
allHeaders.insert(allHeaders.end(), commonHeaders.begin(), commonHeaders.end());
|
||||
formatter.header(allHeaders);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -89,10 +89,21 @@ public:
|
||||
|
||||
static void generateWelsegsTable(RifEclipseDataTableFormatter& formatter,
|
||||
const RicMswExportInfo& exportInfo);
|
||||
|
||||
static void generateWelsegsSegments(RifEclipseDataTableFormatter &formatter,
|
||||
const RicMswExportInfo &exportInfo,
|
||||
const std::set<RigCompletionData::CompletionType>& exportCompletionTypes);
|
||||
static void generateWelsegsCompletionCommentHeader(RifEclipseDataTableFormatter &formatter,
|
||||
RigCompletionData::CompletionType completionType);
|
||||
static void generateCompsegTables(RifEclipseDataTableFormatter& formatter,
|
||||
const RicMswExportInfo& exportInfo);
|
||||
static void generateCompsegTable(RifEclipseDataTableFormatter& formatter,
|
||||
const RicMswExportInfo& exportInfo,
|
||||
bool exportSubGridIntersections,
|
||||
const std::set<RigCompletionData::CompletionType>& exportCompletionTypes);
|
||||
static void generateCompsegHeader(RifEclipseDataTableFormatter& formatter,
|
||||
const RicMswExportInfo& exportInfo,
|
||||
RigCompletionData::CompletionType completionType,
|
||||
bool exportSubGridIntersections);
|
||||
static void generateWsegvalvTable(RifEclipseDataTableFormatter& formatter,
|
||||
const RicMswExportInfo& exportInfo);
|
||||
|
||||
Reference in New Issue
Block a user