version 3.10-dev
Dumux::FVLocalResidual< TypeTag > Class Template Reference

The element-wise residual for finite volume schemes. More...

#include <dumux/assembly/fvlocalresidual.hh>

Inheritance diagram for Dumux::FVLocalResidual< TypeTag >:

Description

template<class TypeTag>
class Dumux::FVLocalResidual< TypeTag >
Note
This class defines the interface used by the assembler using static polymorphism. Implementations are specialized for a certain discretization scheme

Public Types

using ElementResidualVector = ReservedBlockVector< NumEqVector, FVElementGeometry::maxNumElementScvs >
 the container storing all element residuals More...
 

Public Member Functions

 FVLocalResidual (const Problem *problem, const TimeLoop *timeLoop=nullptr)
 the constructor More...
 
User interface
Note
The following methods are usually expensive to evaluate They are useful for outputting / postprocessing residual information.
ElementResidualVector evalStorage (const Problem &problem, const Element &element, const GridGeometry &gridGeometry, const GridVariables &gridVariables, const SolutionVector &sol) const
 Compute the storage term for the current solution. More...
 
Main interface
Note
Methods used by the assembler to compute derivatives and residual
ElementResidualVector evalStorage (const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &prevElemVolVars, const ElementVolumeVariables &curElemVolVars) const
 Compute the storage local residual, i.e. the deviation of the storage term from zero for instationary problems. More...
 
ElementResidualVector evalFluxAndSource (const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const ElementFluxVariablesCache &elemFluxVarsCache, const ElementBoundaryTypes &bcTypes) const
 
Model specific interface
Note
The following method are the model specific implementations of the local residual
NumEqVector computeStorage (const Problem &problem, const SubControlVolume &scv, const VolumeVariables &volVars) const
 Calculate the source term of the equation. More...
 
NumEqVector computeSource (const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolume &scv) const
 Calculate the source term of the equation. More...
 
NumEqVector computeFlux (const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolumeFace &scvf, const ElementFluxVariablesCache &elemFluxVarsCache) const
 Calculate the flux term of the equation. More...
 
Discretization specific interface
Note
The following method are the discretization specific wrapper methods
void evalStorage (ElementResidualVector &residual, const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &prevElemVolVars, const ElementVolumeVariables &curElemVolVars, const SubControlVolume &scv) const
 Compute the storage local residual, i.e. the deviation of the storage term from zero for instationary problems. More...
 
void evalSource (ElementResidualVector &residual, const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &curElemVolVars, const SubControlVolume &scv) const
 Compute the source local residual, i.e. the deviation of the source term from zero. More...
 
void evalFlux (ElementResidualVector &residual, const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const ElementBoundaryTypes &elemBcTypes, const ElementFluxVariablesCache &elemFluxVarsCache, const SubControlVolumeFace &scvf) const
 Compute the flux local residual, i.e. the deviation of the flux term from zero. More...
 
NumEqVector evalFlux (const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const ElementFluxVariablesCache &elemFluxVarsCache, const SubControlVolumeFace &scvf) const
 Compute the flux local residual, i.e. the deviation of the flux term from zero. More...
 
Interfaces for analytic Jacobian computation
template<class PartialDerivativeMatrix >
void addStorageDerivatives (PartialDerivativeMatrix &partialDerivatives, const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const VolumeVariables &curVolVars, const SubControlVolume &scv) const
 Compute the derivative of the storage residual. More...
 
template<class PartialDerivativeMatrix >
void addSourceDerivatives (PartialDerivativeMatrix &partialDerivatives, const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const VolumeVariables &curVolVars, const SubControlVolume &scv) const
 Compute the derivative of the source residual. More...
 
template<class PartialDerivativeMatrices , class T = TypeTag>
std::enable_if_t< GetPropType< T, Properties::GridGeometry >::discMethod !=DiscretizationMethods::box, void > addFluxDerivatives (PartialDerivativeMatrices &derivativeMatrices, const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &curElemVolVars, const ElementFluxVariablesCache &elemFluxVarsCache, const SubControlVolumeFace &scvf) const
 Compute the derivative of the flux residual. More...
 
template<class JacobianMatrix , class T = TypeTag>
std::enable_if_t< GetPropType< T, Properties::GridGeometry >::discMethod==DiscretizationMethods::box, void > addFluxDerivatives (JacobianMatrix &A, const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &curElemVolVars, const ElementFluxVariablesCache &elemFluxVarsCache, const SubControlVolumeFace &scvf) const
 Compute the derivative of the flux residual for the box method. More...
 
template<class PartialDerivativeMatrices >
void addCCDirichletFluxDerivatives (PartialDerivativeMatrices &derivativeMatrices, const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &curElemVolVars, const ElementFluxVariablesCache &elemFluxVarsCache, const SubControlVolumeFace &scvf) const
 Compute the derivative of the Dirichlet flux residual for cell-centered schemes. More...
 
template<class PartialDerivativeMatrices >
void addRobinFluxDerivatives (PartialDerivativeMatrices &derivativeMatrices, const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &curElemVolVars, const ElementFluxVariablesCache &elemFluxVarsCache, const SubControlVolumeFace &scvf) const
 Compute the derivative of Robin type boundary conditions ("solution dependent Neumann") More...
 

Interfaces accessed by local residual implementations

const Problem & problem () const
 the problem More...
 
const TimeLooptimeLoop () const
 
bool isStationary () const
 returns true if the residual is stationary More...
 
Implementation & asImp ()
 
const Implementation & asImp () const
 

Member Typedef Documentation

◆ ElementResidualVector

template<class TypeTag >
using Dumux::FVLocalResidual< TypeTag >::ElementResidualVector = ReservedBlockVector<NumEqVector, FVElementGeometry::maxNumElementScvs>

Constructor & Destructor Documentation

◆ FVLocalResidual()

template<class TypeTag >
Dumux::FVLocalResidual< TypeTag >::FVLocalResidual ( const Problem *  problem,
const TimeLoop timeLoop = nullptr 
)
inline

Member Function Documentation

◆ addCCDirichletFluxDerivatives()

template<class TypeTag >
template<class PartialDerivativeMatrices >
void Dumux::FVLocalResidual< TypeTag >::addCCDirichletFluxDerivatives ( PartialDerivativeMatrices &  derivativeMatrices,
const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  curElemVolVars,
const ElementFluxVariablesCache &  elemFluxVarsCache,
const SubControlVolumeFace &  scvf 
) const
inline

◆ addFluxDerivatives() [1/2]

template<class TypeTag >
template<class JacobianMatrix , class T = TypeTag>
std::enable_if_t< GetPropType< T, Properties::GridGeometry >::discMethod==DiscretizationMethods::box, void > Dumux::FVLocalResidual< TypeTag >::addFluxDerivatives ( JacobianMatrix &  A,
const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  curElemVolVars,
const ElementFluxVariablesCache &  elemFluxVarsCache,
const SubControlVolumeFace &  scvf 
) const
inline

◆ addFluxDerivatives() [2/2]

template<class TypeTag >
template<class PartialDerivativeMatrices , class T = TypeTag>
std::enable_if_t< GetPropType< T, Properties::GridGeometry >::discMethod !=DiscretizationMethods::box, void > Dumux::FVLocalResidual< TypeTag >::addFluxDerivatives ( PartialDerivativeMatrices &  derivativeMatrices,
const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  curElemVolVars,
const ElementFluxVariablesCache &  elemFluxVarsCache,
const SubControlVolumeFace &  scvf 
) const
inline

◆ addRobinFluxDerivatives()

template<class TypeTag >
template<class PartialDerivativeMatrices >
void Dumux::FVLocalResidual< TypeTag >::addRobinFluxDerivatives ( PartialDerivativeMatrices &  derivativeMatrices,
const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  curElemVolVars,
const ElementFluxVariablesCache &  elemFluxVarsCache,
const SubControlVolumeFace &  scvf 
) const
inline

◆ addSourceDerivatives()

template<class TypeTag >
template<class PartialDerivativeMatrix >
void Dumux::FVLocalResidual< TypeTag >::addSourceDerivatives ( PartialDerivativeMatrix &  partialDerivatives,
const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const VolumeVariables &  curVolVars,
const SubControlVolume &  scv 
) const
inline

◆ addStorageDerivatives()

template<class TypeTag >
template<class PartialDerivativeMatrix >
void Dumux::FVLocalResidual< TypeTag >::addStorageDerivatives ( PartialDerivativeMatrix &  partialDerivatives,
const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const VolumeVariables &  curVolVars,
const SubControlVolume &  scv 
) const
inline

◆ asImp() [1/2]

template<class TypeTag >
Implementation & Dumux::FVLocalResidual< TypeTag >::asImp ( )
inlineprotected

◆ asImp() [2/2]

template<class TypeTag >
const Implementation & Dumux::FVLocalResidual< TypeTag >::asImp ( ) const
inlineprotected

◆ computeFlux()

template<class TypeTag >
NumEqVector Dumux::FVLocalResidual< TypeTag >::computeFlux ( const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  elemVolVars,
const SubControlVolumeFace &  scvf,
const ElementFluxVariablesCache &  elemFluxVarsCache 
) const
inline
Parameters
problemThe problem to solve
elementThe DUNE Codim<0> entity for which the residual ought to be calculated
fvGeometryThe finite-volume geometry of the element
elemVolVarsThe volume variables associated with the element stencil
scvfThe sub-control volume over which we integrate the flux
elemFluxVarsCachethe flux variable caches for the element's flux stencils
Note
has to be implemented by the model specific residual class

◆ computeSource()

template<class TypeTag >
NumEqVector Dumux::FVLocalResidual< TypeTag >::computeSource ( const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  elemVolVars,
const SubControlVolume &  scv 
) const
inline
Parameters
problemThe problem to solve
elementThe DUNE Codim<0> entity for which the residual ought to be calculated
fvGeometryThe finite-volume geometry of the element
elemVolVarsThe volume variables associated with the element stencil
scvThe sub-control volume over which we integrate the source term
Note
This is the default implementation for all models as sources are computed in the user interface of the problem

◆ computeStorage()

template<class TypeTag >
NumEqVector Dumux::FVLocalResidual< TypeTag >::computeStorage ( const Problem &  problem,
const SubControlVolume &  scv,
const VolumeVariables &  volVars 
) const
inline
Parameters
problemThe problem to solve
scvThe sub-control volume over which we integrate the storage term
volVarsThe volume variables associated with the scv
Note
has to be implemented by the model specific residual class

◆ evalFlux() [1/2]

template<class TypeTag >
NumEqVector Dumux::FVLocalResidual< TypeTag >::evalFlux ( const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  elemVolVars,
const ElementFluxVariablesCache &  elemFluxVarsCache,
const SubControlVolumeFace &  scvf 
) const
inline
Parameters
problemThe problem to solve
elementThe DUNE Codim<0> entity for which the residual ought to be calculated
fvGeometryThe finite-volume geometry of the element
elemVolVarsThe volume averaged variables for all sub-control volumes of the element at the current time level
elemFluxVarsCacheThe flux variable caches for the element stencil
scvfThe sub control volume face the flux term is integrated over

◆ evalFlux() [2/2]

template<class TypeTag >
void Dumux::FVLocalResidual< TypeTag >::evalFlux ( ElementResidualVector residual,
const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  elemVolVars,
const ElementBoundaryTypes &  elemBcTypes,
const ElementFluxVariablesCache &  elemFluxVarsCache,
const SubControlVolumeFace &  scvf 
) const
inline
Parameters
residualThe residual vector to fill
problemThe problem to solve
elementThe DUNE Codim<0> entity for which the residual ought to be calculated
fvGeometryThe finite-volume geometry of the element
elemVolVarsThe volume averaged variables for all sub-control volumes of the element at the current time level
elemBcTypesthe boundary types for the boundary entities of an elements
elemFluxVarsCacheThe flux variable caches for the element stencil
scvfThe sub control volume face the flux term is integrated over

◆ evalFluxAndSource()

template<class TypeTag >
ElementResidualVector Dumux::FVLocalResidual< TypeTag >::evalFluxAndSource ( const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  elemVolVars,
const ElementFluxVariablesCache &  elemFluxVarsCache,
const ElementBoundaryTypes &  bcTypes 
) const
inline

◆ evalSource()

template<class TypeTag >
void Dumux::FVLocalResidual< TypeTag >::evalSource ( ElementResidualVector residual,
const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  curElemVolVars,
const SubControlVolume &  scv 
) const
inline
Parameters
residualThe residual vector to fill
problemThe problem to solve
elementThe DUNE Codim<0> entity for which the residual ought to be calculated
fvGeometryThe finite-volume geometry of the element
curElemVolVarsThe volume averaged variables for all sub-control volumes of the element at the current time level
scvThe sub control volume the source term is integrated over

Compute source with the model specific storage residual

subtract source from local rate (sign convention in user interface)

◆ evalStorage() [1/3]

template<class TypeTag >
ElementResidualVector Dumux::FVLocalResidual< TypeTag >::evalStorage ( const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  prevElemVolVars,
const ElementVolumeVariables &  curElemVolVars 
) const
inline
Parameters
elementThe DUNE Codim<0> entity for which the residual ought to be calculated
fvGeometryThe finite-volume geometry of the element
prevElemVolVarsThe volume averaged variables for all sub-control volumes of the element at the previous time level
curElemVolVarsThe volume averaged variables for all sub-control volumes of the element at the current time level

◆ evalStorage() [2/3]

template<class TypeTag >
ElementResidualVector Dumux::FVLocalResidual< TypeTag >::evalStorage ( const Problem &  problem,
const Element &  element,
const GridGeometry &  gridGeometry,
const GridVariables &  gridVariables,
const SolutionVector &  sol 
) const
inline

This can be used to figure out how much of each conservation quantity is inside the element.

Parameters
problemThe problem to solve
elementThe DUNE Codim<0> entity for which the storage term ought to be calculated
gridGeometryThe finite-volume grid geometry
gridVariablesThe grid variables (volume and flux variables)
solThe solution vector

◆ evalStorage() [3/3]

template<class TypeTag >
void Dumux::FVLocalResidual< TypeTag >::evalStorage ( ElementResidualVector residual,
const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  prevElemVolVars,
const ElementVolumeVariables &  curElemVolVars,
const SubControlVolume &  scv 
) const
inline
Parameters
residualThe residual vector to fill
problemThe problem to solve
elementThe DUNE Codim<0> entity for which the residual ought to be calculated
fvGeometryThe finite-volume geometry of the element
prevElemVolVarsThe volume averaged variables for all sub-control volumes of the element at the previous time level
curElemVolVarsThe volume averaged variables for all sub-control volumes of the element at the current time level
scvThe sub control volume the storage term is integrated over

Compute storage with the model specific storage residual

◆ isStationary()

template<class TypeTag >
bool Dumux::FVLocalResidual< TypeTag >::isStationary ( ) const
inline

◆ problem()

template<class TypeTag >
const Problem & Dumux::FVLocalResidual< TypeTag >::problem ( ) const
inline

◆ timeLoop()

template<class TypeTag >
const TimeLoop & Dumux::FVLocalResidual< TypeTag >::timeLoop ( ) const
inline

the timeloop for instationary problems calling this for stationary leads to undefined behaviour


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