mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3704 : Export completions : WELSPECL - one line per well
This commit is contained in:
parent
243633137a
commit
f6572e876d
@ -1260,7 +1260,7 @@ void RicWellPathExportCompletionDataFeatureImpl::exportWelspecsToFile(RimEclipse
|
|||||||
std::set<const RimWellPath*> wellPathSet;
|
std::set<const RimWellPath*> wellPathSet;
|
||||||
|
|
||||||
// Build list of unique RimWellPath
|
// Build list of unique RimWellPath
|
||||||
for (const auto completion : completions)
|
for (const auto& completion : completions)
|
||||||
{
|
{
|
||||||
const auto wellPath = findWellPathFromExportName(completion.wellName());
|
const auto wellPath = findWellPathFromExportName(completion.wellName());
|
||||||
if (wellPath)
|
if (wellPath)
|
||||||
@ -1272,13 +1272,13 @@ void RicWellPathExportCompletionDataFeatureImpl::exportWelspecsToFile(RimEclipse
|
|||||||
// Export
|
// Export
|
||||||
for (const auto wellPath : wellPathSet)
|
for (const auto wellPath : wellPathSet)
|
||||||
{
|
{
|
||||||
auto rimCcompletions = wellPath->completions();
|
auto rimCcompletions = wellPath->completions();
|
||||||
cvf::Vec2i ijIntersection = wellPathUpperGridIntersectionIJ(gridCase, wellPath);
|
auto ijIntersection = wellPathUpperGridIntersectionIJ(gridCase, wellPath);
|
||||||
|
|
||||||
formatter.add(rimCcompletions->wellNameForExport())
|
formatter.add(rimCcompletions->wellNameForExport())
|
||||||
.add(rimCcompletions->wellGroupNameForExport())
|
.add(rimCcompletions->wellGroupNameForExport())
|
||||||
.addOneBasedCellIndex(ijIntersection.x())
|
.addOneBasedCellIndex(ijIntersection.second.x())
|
||||||
.addOneBasedCellIndex(ijIntersection.y())
|
.addOneBasedCellIndex(ijIntersection.second.y())
|
||||||
.add(rimCcompletions->referenceDepthForExport())
|
.add(rimCcompletions->referenceDepthForExport())
|
||||||
.add(rimCcompletions->wellTypeNameForExport())
|
.add(rimCcompletions->wellTypeNameForExport())
|
||||||
.rowCompleted();
|
.rowCompleted();
|
||||||
@ -1311,32 +1311,44 @@ void RicWellPathExportCompletionDataFeatureImpl::exportWelspeclToFile(
|
|||||||
formatter.keyword("WELSPECL");
|
formatter.keyword("WELSPECL");
|
||||||
formatter.header(header);
|
formatter.header(header);
|
||||||
|
|
||||||
std::map<QString, std::set<const RimWellPath*>> wellPathMap;
|
std::map<const RimWellPath*, std::set<QString>> wellPathToLgrNameMap;
|
||||||
|
|
||||||
// Build list of unique RimWellPath for each LGR
|
for (const auto& completionsForLgr : completions)
|
||||||
for (const auto completionsForLgr : completions)
|
|
||||||
{
|
{
|
||||||
wellPathMap.insert(std::make_pair(completionsForLgr.first, std::set<const RimWellPath*>()));
|
for (const auto& completion : completionsForLgr.second)
|
||||||
|
|
||||||
for (const auto completion : completionsForLgr.second)
|
|
||||||
{
|
{
|
||||||
const auto wellPath = findWellPathFromExportName(completion.wellName());
|
const auto wellPath = findWellPathFromExportName(completion.wellName());
|
||||||
if (wellPath)
|
auto item = wellPathToLgrNameMap.find(wellPath);
|
||||||
{
|
wellPathToLgrNameMap[wellPath].insert(completionsForLgr.first);
|
||||||
wellPathMap[completionsForLgr.first].insert(wellPath);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto wellPathsForLgr : wellPathMap)
|
for (const auto& wellPathsForLgr : wellPathToLgrNameMap)
|
||||||
{
|
{
|
||||||
QString lgrName = wellPathsForLgr.first;
|
const RimWellPath* wellPath = wellPathsForLgr.first;
|
||||||
|
|
||||||
// Export
|
std::tuple<double, cvf::Vec2i, QString> itemWithLowestMD =
|
||||||
for (const auto wellPath : wellPathsForLgr.second)
|
std::make_tuple(std::numeric_limits<double>::max(), cvf::Vec2i(), "");
|
||||||
|
|
||||||
|
// Find first LGR-intersection along the well path
|
||||||
|
|
||||||
|
for (const auto& lgrName : wellPathsForLgr.second)
|
||||||
{
|
{
|
||||||
auto rimCompletions = wellPath->completions();
|
auto ijIntersection = wellPathUpperGridIntersectionIJ(gridCase, wellPath, lgrName);
|
||||||
cvf::Vec2i ijIntersection = wellPathUpperGridIntersectionIJ(gridCase, wellPath, lgrName);
|
if (ijIntersection.first < std::get<0>(itemWithLowestMD))
|
||||||
|
{
|
||||||
|
itemWithLowestMD = std::make_tuple(ijIntersection.first, ijIntersection.second, lgrName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
double measuredDepth = 0.0;
|
||||||
|
cvf::Vec2i ijIntersection;
|
||||||
|
QString lgrName;
|
||||||
|
|
||||||
|
std::tie(measuredDepth, ijIntersection, lgrName) = itemWithLowestMD;
|
||||||
|
|
||||||
|
auto rimCompletions = wellPath->completions();
|
||||||
|
|
||||||
formatter.add(rimCompletions->wellNameForExport())
|
formatter.add(rimCompletions->wellNameForExport())
|
||||||
.add(rimCompletions->wellGroupNameForExport())
|
.add(rimCompletions->wellGroupNameForExport())
|
||||||
@ -1348,7 +1360,6 @@ void RicWellPathExportCompletionDataFeatureImpl::exportWelspeclToFile(
|
|||||||
.rowCompleted();
|
.rowCompleted();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
formatter.tableCompleted();
|
formatter.tableCompleted();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2529,9 +2540,10 @@ double RicWellPathExportCompletionDataFeatureImpl::calculateTransmissibilityAsEc
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
cvf::Vec2i RicWellPathExportCompletionDataFeatureImpl::wellPathUpperGridIntersectionIJ(const RimEclipseCase* gridCase,
|
std::pair<double, cvf::Vec2i>
|
||||||
const RimWellPath* wellPath,
|
RicWellPathExportCompletionDataFeatureImpl::wellPathUpperGridIntersectionIJ(const RimEclipseCase* gridCase,
|
||||||
const QString& gridName)
|
const RimWellPath* wellPath,
|
||||||
|
const QString& gridName)
|
||||||
{
|
{
|
||||||
const RigEclipseCaseData* caseData = gridCase->eclipseCaseData();
|
const RigEclipseCaseData* caseData = gridCase->eclipseCaseData();
|
||||||
const RigMainGrid* mainGrid = caseData->mainGrid();
|
const RigMainGrid* mainGrid = caseData->mainGrid();
|
||||||
@ -2562,11 +2574,11 @@ cvf::Vec2i RicWellPathExportCompletionDataFeatureImpl::wellPathUpperGridIntersec
|
|||||||
size_t i, j, k;
|
size_t i, j, k;
|
||||||
if (grid->ijkFromCellIndex(gridLocalCellIndex, &i, &j, &k))
|
if (grid->ijkFromCellIndex(gridLocalCellIndex, &i, &j, &k))
|
||||||
{
|
{
|
||||||
return cvf::Vec2i((int)i, (int)j);
|
return std::make_pair(intersection.startMD, cvf::Vec2i((int)i, (int)j));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cvf::Vec2i();
|
return std::make_pair(cvf::UNDEFINED_DOUBLE, cvf::Vec2i());
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
#include "cvfBase.h"
|
#include "cvfBase.h"
|
||||||
#include "cvfVector3.h"
|
#include "cvfVector3.h"
|
||||||
|
#include "cvfVector2.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -268,7 +269,9 @@ private:
|
|||||||
static void appendCompletionData(std::map<size_t, std::vector<RigCompletionData>>* completionData,
|
static void appendCompletionData(std::map<size_t, std::vector<RigCompletionData>>* completionData,
|
||||||
const std::vector<RigCompletionData>& data);
|
const std::vector<RigCompletionData>& data);
|
||||||
|
|
||||||
static cvf::Vec2i wellPathUpperGridIntersectionIJ(const RimEclipseCase* gridCase, const RimWellPath* wellPath, const QString& gridName = "");
|
static std::pair<double, cvf::Vec2i> wellPathUpperGridIntersectionIJ(const RimEclipseCase* gridCase,
|
||||||
|
const RimWellPath* wellPath,
|
||||||
|
const QString& gridName = "");
|
||||||
|
|
||||||
static void exportWellSegments(RimEclipseCase* eclipseCase,
|
static void exportWellSegments(RimEclipseCase* eclipseCase,
|
||||||
QFilePtr exportFile,
|
QFilePtr exportFile,
|
||||||
|
Loading…
Reference in New Issue
Block a user