Opm::FlowDiagnostics Namespace Reference

Classes

class  CellSet
 
class  CellSetID
 
class  ConnectionValues
 
class  ConnectivityGraph
 
class  Solution
 Results from diagnostics computations. More...
 
class  Toolbox
 Toolbox for running flow diagnostics. More...
 
class  TracerTofSolver
 

Typedefs

using CellSetValues = std::map< int, double >
 
using Graph = std::pair< std::vector< double >, std::vector< double > >
 

Functions

Graph flowCapacityStorageCapacityCurve (const Toolbox::Forward &injector_solution, const Toolbox::Reverse &producer_solution, const std::vector< double > &pore_volume, const double max_pv_fraction=1.0)
 
Graph flowCapacityStorageCapacityCurve (const std::vector< double > &injector_tof, const std::vector< double > &producer_tof, const std::vector< double > &pore_volume, const double max_pv_fraction=1.0)
 
double lorenzCoefficient (const Graph &flowcap_storagecap_curve)
 
Graph sweepEfficiency (const Graph &flowcap_storagecap_curve)
 
double injectorProducerPairVolume (const Toolbox::Forward &injector_solution, const Toolbox::Reverse &producer_solution, const std::vector< double > &pore_volume, const CellSetID &injector, const CellSetID &producer)
 Compute pore volume associated with an injector-producer pair. More...
 
std::pair< double, double > injectorProducerPairFlux (const Toolbox::Forward &injector_solution, const Toolbox::Reverse &producer_solution, const CellSetID &injector, const CellSetID &producer, const std::map< CellSetID, CellSetValues > &inflow_flux)
 

Typedef Documentation

◆ CellSetValues

using Opm::FlowDiagnostics::CellSetValues = typedef std::map<int, double>

◆ Graph

using Opm::FlowDiagnostics::Graph = typedef std::pair< std::vector<double>, std::vector<double> >

Class used to return graph objects. For a graph g, the abscissa (x) values should go in g.first and the ordinate (y) values in g.second.

Function Documentation

◆ flowCapacityStorageCapacityCurve() [1/2]

Graph Opm::FlowDiagnostics::flowCapacityStorageCapacityCurve ( const std::vector< double > &  injector_tof,
const std::vector< double > &  producer_tof,
const std::vector< double > &  pore_volume,
const double  max_pv_fraction = 1.0 
)

This overload gets the injector and producer time-of-flight directly instead of extracting it from the solution objects. It otherwise behaves identically to the other overload.

◆ flowCapacityStorageCapacityCurve() [2/2]

Graph Opm::FlowDiagnostics::flowCapacityStorageCapacityCurve ( const Toolbox::Forward injector_solution,
const Toolbox::Reverse producer_solution,
const std::vector< double > &  pore_volume,
const double  max_pv_fraction = 1.0 
)

The F-Phi curve.

The F-Phi curve is an analogue to the fractional flow curve in a 1D displacement. It can be used to compute other interesting diagnostic quantities such as the Lorenz coefficient. For a technical description see Shavali et al. (SPE 146446), Shook and Mitchell (SPE 124625).

Single cells with a very large pore volume can be filtered out before creating the curve. The 'max_pv_fraction' parameter gives a fraction such that, if a cell's fraction of the total pore volume is above this number, that cell will be ignored. This can be used to disregard numerical aquifers for example.

Returns F (flow capacity) as a function of Phi (storage capacity), that is for the returned Graph g, g.first is Phi and g.second is F.

◆ injectorProducerPairFlux()

std::pair< double, double > Opm::FlowDiagnostics::injectorProducerPairFlux ( const Toolbox::Forward injector_solution,
const Toolbox::Reverse producer_solution,
const CellSetID injector,
const CellSetID producer,
const std::map< CellSetID, CellSetValues > &  inflow_flux 
)

Compute fluxes associated with an injector-producer pair.

The first flux returned is the injection flux associated with the given producers, (equal to the accumulated product of producer tracer values at the injector cells with the injection fluxes), the second is the production flux associated with the given injectors. In general, they will only be the same (up to sign) for incompressible cases.

Note: since we consider injecting fluxes positive and producing fluxes negative (for the inflow_flux), the first returned element will be positive and the second will be negative.

◆ injectorProducerPairVolume()

double Opm::FlowDiagnostics::injectorProducerPairVolume ( const Toolbox::Forward injector_solution,
const Toolbox::Reverse producer_solution,
const std::vector< double > &  pore_volume,
const CellSetID injector,
const CellSetID producer 
)

Compute pore volume associated with an injector-producer pair.

◆ lorenzCoefficient()

double Opm::FlowDiagnostics::lorenzCoefficient ( const Graph flowcap_storagecap_curve)

The Lorenz coefficient from the F-Phi curve.

The Lorenz coefficient is a measure of heterogeneity. It is equal to twice the area between the F-Phi curve and the F = Phi line. The coefficient can vary from zero to one. If the coefficient is zero (so the F-Phi curve is a straight line) we have perfect piston-like displacement while a coefficient of one indicates infinitely heterogenous displacement (essentially no sweep).

Note: The coefficient is analogous to the Gini coefficient of economic theory, where the name Lorenz curve is applied to what we call the F-Phi curve.

◆ sweepEfficiency()

Graph Opm::FlowDiagnostics::sweepEfficiency ( const Graph flowcap_storagecap_curve)

Compute sweep efficiency versus dimensionless time (pore volumes injected).

The sweep efficiency is analogue to 1D displacement using the F-Phi curve as flux function.