Files
ResInsight/ApplicationLibCode/ReservoirDataModel/Well/RigWellTargetMapping.h
T
Kristian Bendiksen a789bdb4b4 Well target mapping: option to avoid growing across faults
Add AvoidFaults option that blocks cluster growth across fault faces and
fault NNCs, and generate a WELL_TARGET_FAULT_FACES result with the number
of fault faces per cell.
2026-10-15 12:56:18 +02:00

108 lines
4.7 KiB
C++

/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2024- Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "RigEclipseResultAddress.h"
#include "cvfVector3.h"
#include <vector>
class RigCaseCellResultsData;
class RimEclipseCase;
class RimCellFilter;
class RimRegularGridCase;
class RigFloodingSettings;
//==================================================================================================
///
///
//==================================================================================================
class RigWellTargetMapping
{
public:
enum class VolumeType
{
OIL,
GAS,
HYDROCARBON
};
enum class VolumeResultType
{
MOBILE,
TOTAL
};
enum class VolumesType
{
RESERVOIR_VOLUMES,
SURFACE_VOLUMES_SFIP,
SURFACE_VOLUMES_FIP,
RESERVOIR_VOLUMES_COMPUTED
};
struct ClusteringLimits
{
double saturationOil;
double saturationGas;
double permeability;
double pressure;
double transmissibility;
int maxNumTargets;
int maxIterations;
bool avoidFaults = false; // do not grow across fault faces and fault NNCs
RigEclipseResultAddress filterAddress;
RimCellFilter* startDataFilter = nullptr; // falls back to growDataFilter if null
RimCellFilter* growDataFilter = nullptr;
};
static void generateCandidates( RimEclipseCase* eclipseCase,
size_t timeStepIdx,
VolumeType volumeType,
VolumesType volumesType,
VolumeResultType volumeResultType,
const RigFloodingSettings& floodingSettings,
const ClusteringLimits& limits,
bool skipUndefinedResults,
bool setTimeStepInView );
static std::vector<double> getVolumeVector( RigCaseCellResultsData& resultsData,
RiaDefines::EclipseUnitSystem unitsType,
VolumeType volumeType,
VolumesType volumesType,
VolumeResultType volumeResultType,
size_t timeStepIdx,
const RigFloodingSettings& floodingSettings );
static RimRegularGridCase* generateEnsembleCandidates( const std::vector<RimEclipseCase*>& cases,
size_t timeStepIdx,
const cvf::Vec3st& resultGridCellCount,
VolumeType volumeType,
VolumesType volumesType,
VolumeResultType volumeResultType,
const RigFloodingSettings& floodingSettings,
const ClusteringLimits& limits,
double expandBoundingBoxXYPercent,
double expandBoundingBoxZPercent );
static QString wellTargetResultName();
static QString wellTargetFaultFacesResultName();
};