Vertical Equilibrium Upscaling. More...

#include <verteq.hpp>

Public Member Functions

virtual ~VertEq ()
 
virtual const UnstructuredGrid & grid ()=0
 Accessor method for the upscaled grid. More...
 
virtual const Wells * wells ()=0
 Accessor method for the list of upscaled wells. More...
 
virtual const
IncompPropertiesInterface & 
props ()=0
 props Accessor method for the upscaled "fluid" objects More...
 
virtual const std::vector
< double > & 
src ()=0
 Accessor method for the upscaled source terms. More...
 
virtual const
FlowBoundaryConditions * 
bcs ()=0
 Accessor method for the list of boundary conditions in the upscaled grid. More...
 
virtual const double * gravity ()=0
 Gravity that should be used in the upscaled, two- dimensional model. More...
 
virtual void upscale (const TwophaseState &fineScale, TwophaseState &coarseScale)=0
 
virtual void downscale (const TwophaseState &coarseScale, TwophaseState &fineScale)=0
 
virtual void notify (const TwophaseState &coarseScale)=0
 

Static Public Member Functions

static VertEqcreate (const std::string &title, const Opm::parameter::ParameterGroup &args, const UnstructuredGrid &fullGrid, const IncompPropertiesInterface &fullProps, const Wells *fullWells, const std::vector< double > &fullSrc, const FlowBoundaryConditions *fullBcs, const double *fullGravity)
 Pseudo-constructor of VertEqUpscaling objects. More...
 

Protected Member Functions

 VertEq ()
 

Detailed Description

Vertical Equilibrium Upscaling.

This class acts like a wrapper around a three-dimensional setup of grid, fluid and rock properties and provide a view of a two- dimensional upscaling based on the vertical equilibrium model.

The objects provided by the upscaling may be passed into the simulator as if read from a deck, and the results translated back into a full model afterwards.

Notice that the following constraints apply on the grid:

  • It must be structured, i.e. every element is (i,j,k)-addressable
  • No degenerate faces (on the top), i.e. no crossing grid axes
  • It must have no horizontal faults

Constructor & Destructor Documentation

Opm::VertEq::VertEq ( )
inlineprotected
virtual Opm::VertEq::~VertEq ( )
inlinevirtual

Member Function Documentation

virtual const FlowBoundaryConditions* Opm::VertEq::bcs ( )
pure virtual

Accessor method for the list of boundary conditions in the upscaled grid.

Returns
A structure containing the boundary conditions on the upscaled grid.
Note
The lifetime of the returned object is no longer than that of the upscaling object. You do NOT own this object; do not dispose of the pointer.
static VertEq* Opm::VertEq::create ( const std::string &  title,
const Opm::parameter::ParameterGroup &  args,
const UnstructuredGrid &  fullGrid,
const IncompPropertiesInterface &  fullProps,
const Wells *  fullWells,
const std::vector< double > &  fullSrc,
const FlowBoundaryConditions *  fullBcs,
const double *  fullGravity 
)
static

Pseudo-constructor of VertEqUpscaling objects.

You own the object that is returned, and is responsible for calling delete on the pointer.

Parameters
titleName of the case, gotten from getTITLE().name(); this may be used to set grid-specific properties.
argsParameters
fullGridGrid obtained elsewhere. This object is not adopted, but is assumed to be live over the lifetime of the upscaling.
fullWellsWells list with indices in the three-dimensional grid. This is typically initialized from a deck.
fullSrcList of volumetric source term for each element in the grid.
fullBcsStructure containing a list of boundary conditions (defined in opm/core/pressure/flow_bc.h). Currently, only no-flow boundary conditions are supported (i.e. wells must be the driving force).
gravityGravity vector (three-dimensional); must contain three elements, whereas the last is for depth. Usually this is {0., 0., Opm::unit::gravity}.
Returns
A new instance implementing this interface.
virtual void Opm::VertEq::downscale ( const TwophaseState &  coarseScale,
TwophaseState &  fineScale 
)
pure virtual

Report the fine-scale state of the simulation which corresponds to the current coarse-scale state.

Parameters
coarseScale[in]State maintained by the underlaying (2D) simulator.
fineScale[out]Object that will receive the corresponding state for the original domain. This should be the same object which was passed to initialization, to be overwritten.
Note
This method will make the state you pass "current" in order to calculate various internal quantities. Use this method for reporting after a timestep and avoid downscaling unrelated states during simulation.
The facepressure and faceflux members are currently ignored.
virtual const double* Opm::VertEq::gravity ( )
pure virtual

Gravity that should be used in the upscaled, two- dimensional model.

Returns
Pointer to an array of two double, describing the gravity in x- and y- directions (z has been upscaled away).
Note
The lifetime of the returned array is no longer than that of the upscaling object. You do NOT own this pointer and should NOT dispose of it.
virtual const UnstructuredGrid& Opm::VertEq::grid ( )
pure virtual

Accessor method for the upscaled grid.

This method is inexpensive; the grid is not constructed upon every invocation.

Returns
Grid that may be passed to other components in the simulator. You do NOT own this object!
virtual void Opm::VertEq::notify ( const TwophaseState &  coarseScale)
pure virtual

Update the internal variables based on the state.

Logically, the VE model is bound to a certain state because it needs to know where the plume has been in order to get the aggregate saturation correct.

Prefer to use the VertEqState object instead of calling this method yourself.

Parameters
coarseScaleState of the upscaled domain. This should have been initialized with the upscale method.
See also
VertEqState, VertEq::upscale

Referenced by Opm::VertEqState::notify().

virtual const IncompPropertiesInterface& Opm::VertEq::props ( )
pure virtual

props Accessor method for the upscaled "fluid" objects

This method is inexpensive; upscaling is not done upon every invocation.

Returns
Rock and hydrological properties that may be passed other components in the simulator. You do NOT own this object!
virtual const std::vector<double>& Opm::VertEq::src ( )
pure virtual

Accessor method for the upscaled source terms.

This method is inexpensive; upscaling is not done upon every invocation.

Returns
A volumetric flux in the metric units (cubic meters/second) for each grid block in the upscaled grid.
virtual void Opm::VertEq::upscale ( const TwophaseState &  fineScale,
TwophaseState &  coarseScale 
)
pure virtual

Create an upscaled view of the domain state.

This must be done in a separate method since the state is not available at construction of the simulator. Prefer to use the VertEqState object instead of calling this method yourself.

Parameters
fineScaleInitialized state for the fine-scale domain.
coarseScaleObject that will receive the corresponding state for the upscaled domain. This should be a constructed object but where the init method has not yet been called.
See also
VertEqState
Note
This method will make the state you pass "current" in order to calculate various internal quantities. Use this method for initialization and avoid upscaling unrelated states during simulation.

Referenced by Opm::VertEqState::VertEqState().

virtual const Wells* Opm::VertEq::wells ( )
pure virtual

Accessor method for the list of upscaled wells.

This method is inexpensive; the listis not constructed upon every invocation.

Returns
List of wells that may be passed to other components in the simulator. You do NOT own this object!

The documentation for this class was generated from the following file: