dune-pdelab  2.7-git
Public Member Functions | Static Public Attributes | List of all members
Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator > Class Template Reference

A local operator that accumulates the block diagonal. More...

#include <dune/pdelab/localoperator/blockdiagonalwrapper.hh>

Inheritance diagram for Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >:
Inheritance graph

Public Types

Flags selective assembly
enum  { doSkipEntity }
 Whether to do selective assembly on the elements, i.e. whether or not skip_entity() should be called. More...
 
enum  { doSkipIntersection }
 Whether to do selective assembly on the intersections, i.e. whether or not skip_intersection() should be called. More...
 
Flags for the sparsity pattern
enum  { doPatternVolume }
 Whether to assemble the pattern on the elements, i.e. whether or not pattern_volume() should be called. More...
 
enum  { doPatternVolumePostSkeleton }
 Whether to assemble the pattern on the elements after the skeleton has been handled, i.e. whether or not pattern_volume_post_skeleton() should be called. More...
 
enum  { doPatternSkeleton }
 Whether to assemble the pattern on the interior intersections, i.e. whether or not pattern_skeleton() should be called. More...
 
enum  { doPatternBoundary }
 Whether to assemble the pattern on the boundary intersections, i.e. whether or not pattern_boundary() should be called. More...
 
Flags for the non-constant part of the residual and the jacobian
enum  { doAlphaVolume }
 Whether to call the local operator's alpha_volume(), jacobian_apply_volume() and jacobian_volume(). More...
 
enum  { doAlphaVolumePostSkeleton }
 Whether to call the local operator's alpha_volume_post_skeleton(), jacobian_apply_volume_post_skeleton() and jacobian_volume_post_skeleton(). More...
 
enum  { doAlphaSkeleton }
 Whether to call the local operator's alpha_skeleton(), jacobian_apply_skeleton() and jacobian_skeleton(). More...
 
enum  { doAlphaBoundary }
 Whether to call the local operator's alpha_boundary(), jacobian_apply_boundary() and jacobian_boundary(). More...
 
Flags for the constant part of the residual
enum  { doLambdaVolume }
 Whether to call the local operator's lambda_volume(). More...
 
enum  { doLambdaVolumePostSkeleton }
 Whether to call the local operator's lambda_volume_post_skeleton(). More...
 
enum  { doLambdaSkeleton }
 Whether to call the local operator's lambda_skeleton(). More...
 
enum  { doLambdaBoundary }
 Whether to call the local operator's lambda_boundary(). More...
 
Special flags
enum  { doSkeletonTwoSided }
 Whether to visit the skeleton methods from both sides. More...
 
enum  { isLinear }
 Wheter the local operator describes a linear problem. More...
 

Public Member Functions

 BlockDiagonalLocalOperatorWrapper (const LocalOperator &localOperator)
 Construct new instance of class. More...
 
 BlockDiagonalLocalOperatorWrapper (const BlockDiagonalLocalOperatorWrapper &other)
 Copy constructor. More...
 
template<typename LFSU , typename LFSV , typename LocalPattern >
void pattern_volume (const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern) const
 
template<typename EG , typename LFSU , typename X , typename LFSV , typename MAT >
void jacobian_volume (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, MAT &mat) const
 
template<typename IG , typename LFSU , typename X , typename LFSV , typename MAT >
void jacobian_skeleton (const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, MAT &mat_ss, MAT &mat_sn, MAT &mat_ns, MAT &mat_nn) const
 
template<typename IG , typename LFSU , typename X , typename LFSV , typename MAT >
void jacobian_boundary (const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, MAT &mat_ss) const
 
template<typename EG , typename LFSU , typename X , typename LFSV , typename Y >
void jacobian_apply_volume (const EG &eg, const LFSU &lfsu, const X &z, const LFSV &lfsv, Y &y) const
 
template<typename EG , typename LFSU , typename X , typename Z , typename LFSV , typename Y >
void jacobian_apply_volume (const EG &eg, const LFSU &lfsu, const X &x, const Z &z, const LFSV &lfsv, Y &y) const
 
template<typename IG , typename LFSU , typename Z , typename LFSV , typename Y >
void jacobian_apply_skeleton (const IG &ig, const LFSU &lfsu_s, const Z &z_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const Z &z_n, const LFSV &lfsv_n, Y &y_s, Y &y_n) const
 
template<typename IG , typename LFSU , typename X , typename Z , typename LFSV , typename Y >
void jacobian_apply_skeleton (const IG &ig, const LFSU &lfsu_s, const X &x_s, const Z &z_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const Z &z_n, const LFSV &lfsv_n, Y &y_s, Y &y_n) const
 
template<typename IG , typename LFSU , typename X , typename LFSV , typename Y >
void jacobian_apply_boundary (const IG &ig, const LFSU &lfsu_s, const X &z_s, const LFSV &lfsv_s, Y &y_s) const
 
template<typename IG , typename LFSU , typename X , typename Z , typename LFSV , typename Y >
void jacobian_apply_boundary (const IG &ig, const LFSU &lfsu_s, const X &x_s, const Z &z_s, const LFSV &lfsv_s, Y &y_s) const
 

Static Public Attributes

static constexpr bool doPatternVolume = true
 
static constexpr bool doAlphaVolume = LocalOperator::doAlphaVolume
 
static constexpr bool doAlphaSkeleton = LocalOperator::doAlphaSkeleton
 
static constexpr bool doAlphaBoundary = LocalOperator::doAlphaBoundary
 
static constexpr bool isLinear = LocalOperator::isLinear
 
static constexpr bool doSkeletonTwoSided = true
 

Detailed Description

template<class LocalOperator>
class Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >

A local operator that accumulates the block diagonal.

This makes only sense for methods that have a block structure like Discontinuous Galerking methods or Finite Vvolume methods. For those the resulting operator assembles only the diagonal blocks when the jacobian methods are called.

Note: This operator does skeletons in a one sided fashion. This means that every skeleton-intersection is visited twice for assembling the whole block diagonal. Once from one side and once from the other. This behavior is needed for the implementation of matrix-free block preconditioners.

Template Parameters

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
inherited

Whether to do selective assembly on the elements, i.e. whether or not skip_entity() should be called.

Enumerator
doSkipEntity 

◆ anonymous enum

anonymous enum
inherited

Whether to do selective assembly on the intersections, i.e. whether or not skip_intersection() should be called.

Enumerator
doSkipIntersection 

◆ anonymous enum

anonymous enum
inherited

Whether to assemble the pattern on the elements, i.e. whether or not pattern_volume() should be called.

Enumerator
doPatternVolume 

◆ anonymous enum

anonymous enum
inherited

Whether to assemble the pattern on the elements after the skeleton has been handled, i.e. whether or not pattern_volume_post_skeleton() should be called.

Enumerator
doPatternVolumePostSkeleton 

◆ anonymous enum

anonymous enum
inherited

Whether to assemble the pattern on the interior intersections, i.e. whether or not pattern_skeleton() should be called.

Enumerator
doPatternSkeleton 

◆ anonymous enum

anonymous enum
inherited

Whether to assemble the pattern on the boundary intersections, i.e. whether or not pattern_boundary() should be called.

Enumerator
doPatternBoundary 

◆ anonymous enum

anonymous enum
inherited

Whether to call the local operator's alpha_volume(), jacobian_apply_volume() and jacobian_volume().

Enumerator
doAlphaVolume 

◆ anonymous enum

anonymous enum
inherited

Whether to call the local operator's alpha_volume_post_skeleton(), jacobian_apply_volume_post_skeleton() and jacobian_volume_post_skeleton().

Enumerator
doAlphaVolumePostSkeleton 

◆ anonymous enum

anonymous enum
inherited

Whether to call the local operator's alpha_skeleton(), jacobian_apply_skeleton() and jacobian_skeleton().

Enumerator
doAlphaSkeleton 

◆ anonymous enum

anonymous enum
inherited

Whether to call the local operator's alpha_boundary(), jacobian_apply_boundary() and jacobian_boundary().

Enumerator
doAlphaBoundary 

◆ anonymous enum

anonymous enum
inherited

Whether to call the local operator's lambda_volume().

Enumerator
doLambdaVolume 

◆ anonymous enum

anonymous enum
inherited

Whether to call the local operator's lambda_volume_post_skeleton().

Enumerator
doLambdaVolumePostSkeleton 

◆ anonymous enum

anonymous enum
inherited

Whether to call the local operator's lambda_skeleton().

Enumerator
doLambdaSkeleton 

◆ anonymous enum

anonymous enum
inherited

Whether to call the local operator's lambda_boundary().

Enumerator
doLambdaBoundary 

◆ anonymous enum

anonymous enum
inherited

Whether to visit the skeleton methods from both sides.

Enumerator
doSkeletonTwoSided 

◆ anonymous enum

anonymous enum
inherited

Wheter the local operator describes a linear problem.

Enumerator
isLinear 

Constructor & Destructor Documentation

◆ BlockDiagonalLocalOperatorWrapper() [1/2]

template<class LocalOperator >
Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::BlockDiagonalLocalOperatorWrapper ( const LocalOperator &  localOperator)
inline

Construct new instance of class.

Parameters
[in]_localOperatorWrapped local operator instance

◆ BlockDiagonalLocalOperatorWrapper() [2/2]

template<class LocalOperator >
Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::BlockDiagonalLocalOperatorWrapper ( const BlockDiagonalLocalOperatorWrapper< LocalOperator > &  other)
inline

Copy constructor.

Member Function Documentation

◆ jacobian_apply_boundary() [1/2]

template<class LocalOperator >
template<typename IG , typename LFSU , typename X , typename Z , typename LFSV , typename Y >
void Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::jacobian_apply_boundary ( const IG &  ig,
const LFSU &  lfsu_s,
const X &  x_s,
const Z &  z_s,
const LFSV &  lfsv_s,
Y &  y_s 
) const
inline

◆ jacobian_apply_boundary() [2/2]

template<class LocalOperator >
template<typename IG , typename LFSU , typename X , typename LFSV , typename Y >
void Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::jacobian_apply_boundary ( const IG &  ig,
const LFSU &  lfsu_s,
const X &  z_s,
const LFSV &  lfsv_s,
Y &  y_s 
) const
inline

◆ jacobian_apply_skeleton() [1/2]

template<class LocalOperator >
template<typename IG , typename LFSU , typename X , typename Z , typename LFSV , typename Y >
void Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::jacobian_apply_skeleton ( const IG &  ig,
const LFSU &  lfsu_s,
const X &  x_s,
const Z &  z_s,
const LFSV &  lfsv_s,
const LFSU &  lfsu_n,
const X &  x_n,
const Z &  z_n,
const LFSV &  lfsv_n,
Y &  y_s,
Y &  y_n 
) const
inline

◆ jacobian_apply_skeleton() [2/2]

template<class LocalOperator >
template<typename IG , typename LFSU , typename Z , typename LFSV , typename Y >
void Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::jacobian_apply_skeleton ( const IG &  ig,
const LFSU &  lfsu_s,
const Z &  z_s,
const LFSV &  lfsv_s,
const LFSU &  lfsu_n,
const Z &  z_n,
const LFSV &  lfsv_n,
Y &  y_s,
Y &  y_n 
) const
inline

◆ jacobian_apply_volume() [1/2]

template<class LocalOperator >
template<typename EG , typename LFSU , typename X , typename Z , typename LFSV , typename Y >
void Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::jacobian_apply_volume ( const EG &  eg,
const LFSU &  lfsu,
const X &  x,
const Z &  z,
const LFSV &  lfsv,
Y &  y 
) const
inline

◆ jacobian_apply_volume() [2/2]

template<class LocalOperator >
template<typename EG , typename LFSU , typename X , typename LFSV , typename Y >
void Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::jacobian_apply_volume ( const EG &  eg,
const LFSU &  lfsu,
const X &  z,
const LFSV &  lfsv,
Y &  y 
) const
inline

◆ jacobian_boundary()

template<class LocalOperator >
template<typename IG , typename LFSU , typename X , typename LFSV , typename MAT >
void Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::jacobian_boundary ( const IG &  ig,
const LFSU &  lfsu_s,
const X &  x_s,
const LFSV &  lfsv_s,
MAT &  mat_ss 
) const
inline

◆ jacobian_skeleton()

template<class LocalOperator >
template<typename IG , typename LFSU , typename X , typename LFSV , typename MAT >
void Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::jacobian_skeleton ( const IG &  ig,
const LFSU &  lfsu_s,
const X &  x_s,
const LFSV &  lfsv_s,
const LFSU &  lfsu_n,
const X &  x_n,
const LFSV &  lfsv_n,
MAT &  mat_ss,
MAT &  mat_sn,
MAT &  mat_ns,
MAT &  mat_nn 
) const
inline

◆ jacobian_volume()

template<class LocalOperator >
template<typename EG , typename LFSU , typename X , typename LFSV , typename MAT >
void Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::jacobian_volume ( const EG &  eg,
const LFSU &  lfsu,
const X &  x,
const LFSV &  lfsv,
MAT &  mat 
) const
inline

◆ pattern_volume()

template<class LocalOperator >
template<typename LFSU , typename LFSV , typename LocalPattern >
void Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::pattern_volume ( const LFSU &  lfsu,
const LFSV &  lfsv,
LocalPattern &  pattern 
) const
inline

Member Data Documentation

◆ doAlphaBoundary

template<class LocalOperator >
constexpr bool Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::doAlphaBoundary = LocalOperator::doAlphaBoundary
staticconstexpr

◆ doAlphaSkeleton

template<class LocalOperator >
constexpr bool Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::doAlphaSkeleton = LocalOperator::doAlphaSkeleton
staticconstexpr

◆ doAlphaVolume

template<class LocalOperator >
constexpr bool Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::doAlphaVolume = LocalOperator::doAlphaVolume
staticconstexpr

◆ doPatternVolume

template<class LocalOperator >
constexpr bool Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::doPatternVolume = true
staticconstexpr

◆ doSkeletonTwoSided

template<class LocalOperator >
constexpr bool Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::doSkeletonTwoSided = true
staticconstexpr

◆ isLinear

template<class LocalOperator >
constexpr bool Dune::PDELab::BlockDiagonalLocalOperatorWrapper< LocalOperator >::isLinear = LocalOperator::isLinear
staticconstexpr

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