Calculates the Jacobian of the local residual for finite volume spatial discretizations using a finite difference method. More...

#include <fvbasefdlocallinearizer.hh>

Public Member Functions

 FvBaseFdLocalLinearizer ()
 
 ~FvBaseFdLocalLinearizer ()
 
void init (Simulator &simulator)
 Initialize the local Jacobian object. More...
 
void linearize (const Element &element)
 Compute an element's local Jacobian matrix and evaluate its residual. More...
 
void linearize (ElementContext &elemCtx)
 Compute an element's local Jacobian matrix and evaluate its residual. More...
 
Scalar numericEpsilon (const ElementContext &elemCtx, int dofIdx, int pvIdx) const
 Returns the epsilon value which is added and removed from the current solution. More...
 
LocalResidual & localResidual ()
 Return reference to the local residual. More...
 
const LocalResidual & localResidual () const
 Return reference to the local residual. More...
 
const MatrixBlock & jacobian (int domainScvIdx, int rangeScvIdx) const
 Returns the local Jacobian matrix of the residual of a sub-control volume. More...
 
const MatrixBlock & jacobianStorage (int dofIdx) const
 Returns the local Jacobian matrix the storage term of a sub-control volume. More...
 
const VectorBlock & residual (int dofIdx) const
 Returns the local residual of a sub-control volume. More...
 
const VectorBlock & residualStorage (int dofIdx) const
 Returns the local storage term of a sub-control volume. More...
 

Static Public Member Functions

static void registerParameters ()
 Register all run-time parameters for the local jacobian. More...
 
static Scalar baseEpsilon ()
 Returns the unweighted epsilon value used to calculate the local derivatives. More...
 

Protected Member Functions

Implementation & asImp_ ()
 
const Implementation & asImp_ () const
 
const Simulatorsimulator_ () const
 
const Problem & problem_ () const
 
const Model & model_ () const
 
void resize_ (const ElementContext &elemCtx)
 Resize all internal attributes to the size of the element. More...
 
void reset_ (const ElementContext &elemCtx)
 Reset the all relevant internal attributes to 0. More...
 
void evalPartialDerivative_ (ElementContext &elemCtx, int dofIdx, int pvIdx)
 Compute the partial derivatives of a context's residual functions. More...
 
void updateLocalLinearizer_ (const ElementContext &elemCtx, int primaryDofIdx, int pvIdx)
 Updates the current local Jacobian matrix with the partial derivatives of all equations in regard to the primary variable 'pvIdx' at vertex 'dofIdx' . More...
 

Static Protected Member Functions

static int numericDifferenceMethod_ ()
 Returns the numeric difference method which is applied. More...
 

Protected Attributes

SimulatorsimulatorPtr_
 
Model * modelPtr_
 
ElementContext * internalElemContext_
 
LocalBlockMatrix jacobian_
 
LocalStorageMatrix jacobianStorage_
 
LocalBlockVector residual_
 
LocalBlockVector residualStorage_
 
LocalBlockVector derivResidual_
 
LocalBlockVector derivStorage_
 
LocalResidual localResidual_
 

Detailed Description

template<class TypeTag>
class Ewoms::FvBaseFdLocalLinearizer< TypeTag >

Calculates the Jacobian of the local residual for finite volume spatial discretizations using a finite difference method.

The local Jacobian for a given context is defined as the derivatives of the residuals of all degrees of freedom featured by the stencil with regard to the primary variables of the stencil's "primary" degrees of freedom.

This class implements numeric differentiation using finite difference methods, i.e. forward or backward differences (2nd order), or central differences (3rd order). The method used is determined by the "NumericDifferenceMethod" property:

  • If the value of this property is smaller than 0, backward differences are used, i.e.:

    \[ \frac{\partial f(x)}{\partial x} \approx \frac{f(x) - f(x - \epsilon)}{\epsilon} \]

  • If the value of this property is 0, central differences are used, i.e.:

    \[ \frac{\partial f(x)}{\partial x} \approx \frac{f(x + \epsilon) - f(x - \epsilon)}{2 \epsilon} \]

  • if the value of this property is larger than 0, forward differences are used, i.e.:

    \[ \frac{\partial f(x)}{\partial x} \approx \frac{f(x + \epsilon) - f(x)}{\epsilon} \]

Here, $ f $ is the residual function for all equations, $x$ is the value of a sub-control volume's primary variable at the evaluation point and $\epsilon$ is a small scalar value larger than 0.

Constructor & Destructor Documentation

template<class TypeTag >
Ewoms::FvBaseFdLocalLinearizer< TypeTag >::FvBaseFdLocalLinearizer ( )
inline

Member Function Documentation

template<class TypeTag >
Implementation& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::asImp_ ( )
inlineprotected
template<class TypeTag >
const Implementation& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::asImp_ ( ) const
inlineprotected
template<class TypeTag >
static Scalar Ewoms::FvBaseFdLocalLinearizer< TypeTag >::baseEpsilon ( )
inlinestatic

Returns the unweighted epsilon value used to calculate the local derivatives.

References GET_PROP_VALUE.

Referenced by Ewoms::FvBaseFdLocalLinearizer< TypeTag >::numericEpsilon().

template<class TypeTag >
void Ewoms::FvBaseFdLocalLinearizer< TypeTag >::evalPartialDerivative_ ( ElementContext &  elemCtx,
int  dofIdx,
int  pvIdx 
)
inlineprotected

Compute the partial derivatives of a context's residual functions.

This method can be overwritten by the implementation if a better scheme than numerical differentiation is available.

The default implementation of this method uses numeric differentiation, i.e. forward or backward differences (2nd order), or central differences (3rd order). The method used is determined by the "NumericDifferenceMethod" property:

  • If the value of this property is smaller than 0, backward differences are used, i.e.:

    \[ \frac{\partial f(x)}{\partial x} \approx \frac{f(x) - f(x - \epsilon)}{\epsilon} \]

  • If the value of this property is 0, central differences are used, i.e.:

    \[ \frac{\partial f(x)}{\partial x} \approx \frac{f(x + \epsilon) - f(x - \epsilon)}{2 \epsilon} \]

  • if the value of this property is larger than 0, forward differences are used, i.e.:

    \[ \frac{\partial f(x)}{\partial x} \approx \frac{f(x + \epsilon) - f(x)}{\epsilon} \]

Here, $ f $ is the residual function for all equations, $x$ is the value of a sub-control volume's primary variable at the evaluation point and $\epsilon$ is a small value larger than 0.

Parameters
elemCtxThe element context for which the local partial derivative ought to be calculated
dofIdxThe sub-control volume index of the current finite element for which the partial derivative ought to be calculated
pvIdxThe index of the primary variable at the dofIdx' sub-control volume of the current finite element for which the partial derivative ought to be calculated

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::asImp_(), Ewoms::FvBaseFdLocalLinearizer< TypeTag >::derivResidual_, Ewoms::FvBaseFdLocalLinearizer< TypeTag >::derivStorage_, Ewoms::FvBaseFdLocalLinearizer< TypeTag >::localResidual_, Ewoms::FvBaseFdLocalLinearizer< TypeTag >::numericDifferenceMethod_(), Ewoms::FvBaseFdLocalLinearizer< TypeTag >::residual_, and Ewoms::FvBaseFdLocalLinearizer< TypeTag >::residualStorage_.

template<class TypeTag >
void Ewoms::FvBaseFdLocalLinearizer< TypeTag >::init ( Simulator simulator)
inline

Initialize the local Jacobian object.

At this point we can assume that everything has been allocated, although some objects may not yet be completely initialized.

Parameters
simulatorThe simulator object of the simulation.

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::internalElemContext_, and Ewoms::FvBaseFdLocalLinearizer< TypeTag >::simulatorPtr_.

template<class TypeTag >
const MatrixBlock& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::jacobian ( int  domainScvIdx,
int  rangeScvIdx 
) const
inline

Returns the local Jacobian matrix of the residual of a sub-control volume.

Parameters
domainScvIdxThe local index of the sub control volume which contains the independents
rangeScvIdxThe local index of the sub control volume which contains the local residual

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::jacobian_.

template<class TypeTag >
const MatrixBlock& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::jacobianStorage ( int  dofIdx) const
inline

Returns the local Jacobian matrix the storage term of a sub-control volume.

Parameters
dofIdxThe local index of sub control volume

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::jacobianStorage_.

template<class TypeTag >
void Ewoms::FvBaseFdLocalLinearizer< TypeTag >::linearize ( const Element &  element)
inline

Compute an element's local Jacobian matrix and evaluate its residual.

The local Jacobian for a given context is defined as the derivatives of the residuals of all degrees of freedom featured by the stencil with regard to the primary variables of the stencil's "primary" degrees of freedom. Adding the local Jacobians for all elements in the grid will give the global Jacobian 'grad f(x)'.

Parameters
elementThe grid element for which the local residual and its local Jacobian should be calculated.

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::internalElemContext_.

template<class TypeTag >
void Ewoms::FvBaseFdLocalLinearizer< TypeTag >::linearize ( ElementContext &  elemCtx)
inline

Compute an element's local Jacobian matrix and evaluate its residual.

The local Jacobian for a given context is defined as the derivatives of the residuals of all degrees of freedom featured by the stencil with regard to the primary variables of the stencil's "primary" degrees of freedom. Adding the local Jacobians for all elements in the grid will give the global Jacobian 'grad f(x)'.

After calling this method the ElementContext is in an undefined state, so do not use it anymore!

Parameters
elemCtxThe element execution context for which the local residual and its local Jacobian should be calculated.

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::asImp_(), Ewoms::FvBaseFdLocalLinearizer< TypeTag >::localResidual_, Ewoms::FvBaseFdLocalLinearizer< TypeTag >::model_(), Ewoms::FvBaseFdLocalLinearizer< TypeTag >::reset_(), Ewoms::FvBaseFdLocalLinearizer< TypeTag >::residual_, Ewoms::FvBaseFdLocalLinearizer< TypeTag >::residualStorage_, Ewoms::FvBaseFdLocalLinearizer< TypeTag >::resize_(), and Ewoms::FvBaseFdLocalLinearizer< TypeTag >::updateLocalLinearizer_().

template<class TypeTag >
LocalResidual& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::localResidual ( )
inline

Return reference to the local residual.

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::localResidual_.

template<class TypeTag >
const LocalResidual& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::localResidual ( ) const
inline

Return reference to the local residual.

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::localResidual_.

template<class TypeTag >
const Model& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::model_ ( ) const
inlineprotected
template<class TypeTag >
static int Ewoms::FvBaseFdLocalLinearizer< TypeTag >::numericDifferenceMethod_ ( )
inlinestaticprotected

Returns the numeric difference method which is applied.

References EWOMS_GET_PARAM.

Referenced by Ewoms::FvBaseFdLocalLinearizer< TypeTag >::evalPartialDerivative_().

template<class TypeTag >
Scalar Ewoms::FvBaseFdLocalLinearizer< TypeTag >::numericEpsilon ( const ElementContext &  elemCtx,
int  dofIdx,
int  pvIdx 
) const
inline

Returns the epsilon value which is added and removed from the current solution.

Parameters
elemCtxThe element execution context for which the local residual and its gradient should be calculated.
dofIdxThe local index of the element's vertex for which the local derivative ought to be calculated.
pvIdxThe index of the primary variable which gets varied

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::baseEpsilon().

template<class TypeTag >
const Problem& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::problem_ ( ) const
inlineprotected
template<class TypeTag >
static void Ewoms::FvBaseFdLocalLinearizer< TypeTag >::registerParameters ( )
inlinestatic

Register all run-time parameters for the local jacobian.

References EWOMS_REGISTER_PARAM.

template<class TypeTag >
const VectorBlock& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::residual ( int  dofIdx) const
inline

Returns the local residual of a sub-control volume.

Parameters
dofIdxThe local index of the sub control volume

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::residual_.

template<class TypeTag >
const VectorBlock& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::residualStorage ( int  dofIdx) const
inline

Returns the local storage term of a sub-control volume.

Parameters
dofIdxThe local index of the sub control volume

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::residualStorage_.

template<class TypeTag >
const Simulator& Ewoms::FvBaseFdLocalLinearizer< TypeTag >::simulator_ ( ) const
inlineprotected
template<class TypeTag >
void Ewoms::FvBaseFdLocalLinearizer< TypeTag >::updateLocalLinearizer_ ( const ElementContext &  elemCtx,
int  primaryDofIdx,
int  pvIdx 
)
inlineprotected

Updates the current local Jacobian matrix with the partial derivatives of all equations in regard to the primary variable 'pvIdx' at vertex 'dofIdx' .

References Ewoms::FvBaseFdLocalLinearizer< TypeTag >::derivResidual_, Ewoms::FvBaseFdLocalLinearizer< TypeTag >::derivStorage_, Ewoms::FvBaseFdLocalLinearizer< TypeTag >::jacobian_, and Ewoms::FvBaseFdLocalLinearizer< TypeTag >::jacobianStorage_.

Referenced by Ewoms::FvBaseFdLocalLinearizer< TypeTag >::linearize().

Member Data Documentation

template<class TypeTag >
Model* Ewoms::FvBaseFdLocalLinearizer< TypeTag >::modelPtr_
protected

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