Finite volume MPFA L-method discretization of a two-phase flow pressure equation of the sequential IMPES model. More...
#include <dumux/porousmediumflow/2p/sequential/diffusion/mpfa/lmethod/2dpressure.hh>
Finite volume MPFA L-method discretization of a two-phase flow pressure equation of the sequential IMPES model.
Finite volume MPFA L-method discretization of the equations
\[ - \text{div}\, \boldsymbol v_t = - \text{div}\, (\lambda_t \boldsymbol K \textbf{grad}\, \Phi_w + f_n \lambda_t \boldsymbol K \textbf{grad}\, \Phi_{cap} ) = 0, \]
or
\[ - \text{div}\, \boldsymbol v_t = - \text{div}\, (\lambda_t \boldsymbol K \textbf{grad}\, \Phi_n - f_w \lambda_t \boldsymbol K \textbf{grad}\, \Phi_{cap} ) = 0. \]
At Dirichlet boundaries a two-point flux approximation is used.
\[ \Phi = g \; \text{on} \; \Gamma_1, \quad \text{and} \quad -\text{div}\, \boldsymbol v_t \cdot \mathbf{n} = J \; \text{on} \; \Gamma_2. \]
Here, \( \Phi_\alpha \) denotes the potential of phase \( \alpha \), \( \boldsymbol K \) the intrinsic permeability, \( \lambda_t \) the total mobility, \( f_\alpha \) the phase fractional flow function.
More details on the equations can be found in
Wolff 2013: http://elib.uni-stuttgart.de/opus/volltexte/2013/8661/
M. Wolff, Y. Cao, B. Flemisch, R. Helmig, and B. Wohlmuth (2013a). Multi-point flux approximation L-method in 3D: numerical convergence and application to two-phase flow through porous media. In P. Bastian, J. Kraus, R. Scheichl, and M. Wheeler, editors, Simulation of Flow in Porous Media - Applications in Energy and Environment. De Gruyter.
M. Wolff, B. Flemisch, R. Helmig, I. Aavatsmark. Treatment of tensorial relative permeabilities with multipoint flux approximation. International Journal of Numerical Analysis and Modeling (9), pp. 725-744, 2012.
Remark1: only for 2-D quadrilateral grid
Remark2: implemented for UGGrid, ALUGrid, or YaspGrid
TypeTag | The problem Type Tag |
Public Types | |
using | InteractionVolume = FVMPFALInteractionVolume< TypeTag > |
Type of the interaction volume objects. More... | |
using | TransmissibilityCalculator = FvMpfaL2dTransmissibilityCalculator< TypeTag > |
Public Member Functions | |
void | updateMaterialLaws () |
constitutive functions are initialized and stored in the variables object More... | |
void | updateInteractionVolumeInfo () |
Updates interaction volumes. More... | |
void | initialize () |
Initializes the pressure model. More... | |
void | storePressureSolution () |
Globally stores the pressure solution. More... | |
void | storePressureSolution (const Element &element) |
Stores the pressure solution of a cell. More... | |
void | update () |
Pressure update. More... | |
template<class MultiWriter > | |
void | addOutputVtkFields (MultiWriter &writer) |
Adds pressure output to the output file. More... | |
FvMpfaL2dPressure2p (Problem &problem) | |
Constructs a FvMpfaL2dPressure2p object. More... | |
const Scalar | pressure (const int eIdxGlobal) const |
Public access function for the primary pressure variable. More... | |
void | getSource (EntryType &entry, const Element &element, const CellData &cellData, const bool first) |
Function which calculates the source entry. More... | |
void | getStorage (EntryType &entry, const Element &element, const CellData &cellData, const bool first) |
Function which calculates the storage entry. More... | |
void | getFlux (EntryType &entry, const Intersection &intersection, const CellData &cellData, const bool first) |
Function which calculates the flux entry. More... | |
void | getFluxOnBoundary (EntryType &entry, const Intersection &intersection, const CellData &cellData, const bool first) |
Function which calculates the boundary flux entry. More... | |
const Matrix & | globalMatrix () |
Returns the global matrix of the last pressure solution step. More... | |
const RHSVector & | rightHandSide () |
Returns the right hand side vector of the last pressure solution step. More... | |
void | calculateVelocity () |
void | updateVelocity () |
void | serializeEntity (std::ostream &outstream, const Element &element) |
Function for serialization of the pressure field. More... | |
void | deserializeEntity (std::istream &instream, const Element &element) |
Function for deserialization of the pressure field. More... | |
void | setFixPressureAtIndex (Scalar pressure, int eIdxGlobal) |
Set a pressure to be fixed at a certain cell. More... | |
void | unsetFixPressureAtIndex (int eIdxGlobal) |
Reset the fixed pressure state. More... | |
void | resetFixPressureAtIndex () |
Protected Types | |
enum | { rhs = 1 , matrix = 0 } |
Indices of matrix and rhs entries. More... | |
enum | { pressEqIdx = Indices::pressureEqIdx } |
using | EntryType = Dune::FieldVector< Scalar, 2 > |
Protected Member Functions | |
void | initializeMatrixRowSize () |
Initialize the global matrix of the system of equations to solve. More... | |
void | initializeMatrixIndices () |
Initialize the global matrix of the system of equations to solve. More... | |
void | assemble (bool first) |
Function which assembles the system of equations to be solved. More... | |
void | solve () |
Solves the global system of equations to get the spatial distribution of the pressure. More... | |
PressureSolution & | pressure () |
Returns the vector containing the pressure solution. More... | |
const PressureSolution & | pressure () const |
Returns the vector containing the pressure solution. More... | |
void | initializePressure () |
Initialization of the pressure solution vector: Initialization with meaningful values may. More... | |
Protected Attributes | |
GlobalInteractionVolumeVector | interactionVolumes_ |
Global Vector of interaction volumes. More... | |
InnerBoundaryVolumeFaces | innerBoundaryVolumeFaces_ |
Vector marking faces which intersect the boundary. More... | |
Matrix | A_ |
Global stiffnes matrix (sparse matrix which is build by the initializeMatrix() function) More... | |
RHSVector | f_ |
Right hand side vector. More... | |
|
protectedinherited |
Type of the vector of entries
Contains the return values of the get*()-functions (matrix or right-hand side entry).
using Dumux::FvMpfaL2dPressure2p< TypeTag >::InteractionVolume = FVMPFALInteractionVolume<TypeTag> |
Type of the interaction volume objects.
Type of the interaction volume objects used to store the geometric information which is needed to calculated the transmissibility matrices of one MPFA interaction volume.
using Dumux::FvMpfaL2dPressure2p< TypeTag >::TransmissibilityCalculator = FvMpfaL2dTransmissibilityCalculator<TypeTag> |
|
protectedinherited |
Indices of matrix and rhs entries.
During the assembling of the global system of equations get-functions are called (getSource(), getFlux(), etc.), which return global matrix or right hand side entries in a vector. These can be accessed using following indices:
Enumerator | |
---|---|
rhs | index for the right hand side entry |
matrix | index for the global matrix entry |
|
inline |
Constructs a FvMpfaL2dPressure2p object.
problem | A problem class object |
|
inline |
Adds pressure output to the output file.
Adds the potential, the potential and the capillary pressure to the output. If the VtkOutputLevel is equal to zero (default) only primary variables are written, if it is larger than zero also secondary variables are written.
MultiWriter | Class defining the output writer |
writer | The output writer (usually a VTKMultiWriter object) |
|
protectedinherited |
Function which assembles the system of equations to be solved.
This function assembles the Matrix and the right hand side (RHS) vector to solve for a pressure field with a Finite-Volume (FV) discretization. Implementations of this base class have to provide the methods getSource()
, getStorage()
, getFlux()
and getFluxOnBoundary()
if the assemble() method is called!
first | Indicates if function is called at the initialization step or during the simulation (If first is true , no pressure field of previous iterations is required) |
|
inlineinherited |
|
inlineinherited |
Function for deserialization of the pressure field.
Function needed for restart option. Reads the pressure of a grid element from a restart file.
instream | Stream from the restart file. |
element | Grid element |
|
inherited |
Function which calculates the flux entry.
Function computes the inter-cell flux term and writes it to the corresponding entry of the entry vector
entry | Vector containing return values of the function |
intersection | Intersection of two grid elements |
cellData | Object containing all model relevant cell data |
first | Indicates if function is called in the initialization step or during the simulation |
|
inherited |
Function which calculates the boundary flux entry.
Function computes the boundary-flux term and writes it to the corresponding entry of the entry vector
entry | Vector containing return values of the function |
intersection | Intersection of two grid elements |
cellData | Object containing all model relevant cell data |
first | Indicates if function is called in the initialization step or during the simulation |
|
inherited |
Function which calculates the source entry.
Function computes the source term and writes it to the corresponding entry of the entry vector
entry | Vector containing return values of the function |
element | Grid element |
cellData | Object containing all model relevant cell data |
first | Indicates if function is called in the initialization step or during the simulation |
|
inherited |
Function which calculates the storage entry.
Function computes the storage term and writes it to the corresponding entry of the entry vector
entry | Vector containing return values of the function |
element | Grid element |
cellData | Object containing all model relevant cell data |
first | Indicates if function is called in the initialization step or during the simulation |
|
inlineinherited |
Returns the global matrix of the last pressure solution step.
|
inline |
Initializes the pressure model.
|
protectedinherited |
Initialize the global matrix of the system of equations to solve.
|
protectedinherited |
Initialize the global matrix of the system of equations to solve.
|
inlineprotectedinherited |
Initialization of the pressure solution vector: Initialization with meaningful values may.
|
inlineprotectedinherited |
Returns the vector containing the pressure solution.
|
inlineprotectedinherited |
Returns the vector containing the pressure solution.
|
inlineinherited |
Public access function for the primary pressure variable.
Function returns the cell pressure value at index eIdxGlobal
eIdxGlobal | Global index of a grid cell |
|
inlineinherited |
|
inlineinherited |
Returns the right hand side vector of the last pressure solution step.
|
inlineinherited |
Function for serialization of the pressure field.
Function needed for restart option. Writes the pressure of a grid element to a restart file.
outstream | Stream into the restart file. |
element | Grid element |
|
inlineinherited |
Set a pressure to be fixed at a certain cell.
Allows to fix a pressure somewhere (at one certain cell) in the domain. This can be necessary e.g. if only Neumann boundary conditions are defined. The pressure is fixed until the unsetFixPressureAtIndex()
function is called
pressure | Pressure value at eIdxGlobal |
eIdxGlobal | Global index of a grid cell |
|
protectedinherited |
Solves the global system of equations to get the spatial distribution of the pressure.
|
inline |
Globally stores the pressure solution.
|
inline |
Stores the pressure solution of a cell.
element | Dune grid element |
|
inlineinherited |
Reset the fixed pressure state.
No pressure is fixed inside the domain until setFixPressureAtIndex()
function is called again.
eIdxGlobal | Global index of a grid cell |
|
inline |
Pressure update.
|
inline |
Updates interaction volumes.
Globally rebuilds the MPFA interaction volumes.
void Dumux::FvMpfaL2dPressure2p< TypeTag >::updateMaterialLaws |
constitutive functions are initialized and stored in the variables object
Updates constitutive relations and stores them in the variable class.
Stores mobility, fractional flow function and capillary pressure for all grid cells.
|
inlineinherited |
|
protectedinherited |
Global stiffnes matrix (sparse matrix which is build by the initializeMatrix()
function)
|
protectedinherited |
Right hand side vector.
|
protected |
Vector marking faces which intersect the boundary.
|
protected |
Global Vector of interaction volumes.