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

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

#include <dumux/assembly/cvfelocalresidual.hh>

Inheritance diagram for Dumux::CVFELocalResidual< TypeTag >:

Description

template<class TypeTag>
class Dumux::CVFELocalResidual< TypeTag >
Template Parameters
TypeTagthe TypeTag

Public Types

using ElementResidualVector = typename ParentType::ElementResidualVector
 

Public Member Functions

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
 evaluate flux residuals for one sub control volume face and add to residual More...
 
NumEqVector evalFlux (const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const ElementBoundaryTypes &elemBcTypes, const ElementFluxVariablesCache &elemFluxVarsCache, const SubControlVolumeFace &scvf) const
 evaluate flux residuals for one sub control volume face More...
 
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...
 
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...
 
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...
 
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...
 
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
 
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...
 
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...
 
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::CVFELocalResidual< TypeTag >::ElementResidualVector = typename ParentType::ElementResidualVector

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
inlineinherited

◆ 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
inlineinherited

◆ 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
inlineinherited

◆ 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
inlineinherited

◆ 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
inlineinherited

◆ 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
inlineinherited

◆ asImp() [1/2]

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

◆ asImp() [2/2]

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

◆ 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
inlineinherited
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
inlineinherited
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
inlineinherited
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/4]

template<class TypeTag >
NumEqVector Dumux::CVFELocalResidual< TypeTag >::evalFlux ( const Problem &  problem,
const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  elemVolVars,
const ElementBoundaryTypes &  elemBcTypes,
const ElementFluxVariablesCache &  elemFluxVarsCache,
const SubControlVolumeFace &  scvf 
) const
inline

◆ evalFlux() [2/4]

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
inlineinherited
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() [3/4]

template<class TypeTag >
void Dumux::CVFELocalResidual< 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

◆ evalFlux() [4/4]

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
inlineinherited
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
inlineinherited

◆ 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
inlineinherited
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/6]

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/6]

template<class TypeTag >
ElementResidualVector Dumux::FVLocalResidual< TypeTag >::evalStorage ( const Element &  element,
const FVElementGeometry &  fvGeometry,
const ElementVolumeVariables &  prevElemVolVars,
const ElementVolumeVariables &  curElemVolVars 
) const
inlineinherited
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() [3/6]

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() [4/6]

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

◆ evalStorage() [5/6]

template<class TypeTag >
void Dumux::CVFELocalResidual< 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

◆ evalStorage() [6/6]

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
inlineinherited
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
inlineinherited

◆ problem()

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

◆ timeLoop()

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

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


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