DUNE PDELab (git)

Dune::PDELab::BlockSORPreconditionerLocalOperator< JacobianLOP, BlockOffDiagonalLOP, GridFunctionSpace > Class Template Reference

Turn a matrix-free Jacobi-type local preconditioner to a SOR one. More...

#include <dune/pdelab/backend/istl/matrixfree/blocksorpreconditioner.hh>

Public Types

Flags selective assembly
enum  
 Whether to do selective assembly on the elements, i.e. whether or not skip_entity() should be called.
 
enum  
 Whether to do selective assembly on the intersections, i.e. whether or not skip_intersection() should be called.
 
Flags for the sparsity pattern
enum  
 Whether to assemble the pattern on the elements, i.e. whether or not pattern_volume() should be called.
 
enum  
 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.
 
enum  
 Whether to assemble the pattern on the interior intersections, i.e. whether or not pattern_skeleton() should be called.
 
enum  
 Whether to assemble the pattern on the boundary intersections, i.e. whether or not pattern_boundary() should be called.
 
Flags for the non-constant part of the residual and the jacobian
enum  
 Whether to call the local operator's alpha_volume(), jacobian_apply_volume() and jacobian_volume().
 
enum  
 Whether to call the local operator's alpha_volume_post_skeleton(), jacobian_apply_volume_post_skeleton() and jacobian_volume_post_skeleton().
 
enum  
 Whether to call the local operator's alpha_skeleton(), jacobian_apply_skeleton() and jacobian_skeleton().
 
enum  
 Whether to call the local operator's alpha_boundary(), jacobian_apply_boundary() and jacobian_boundary().
 
Flags for the constant part of the residual
enum  
 Whether to call the local operator's lambda_volume().
 
enum  
 Whether to call the local operator's lambda_volume_post_skeleton().
 
enum  
 Whether to call the local operator's lambda_skeleton().
 
enum  
 Whether to call the local operator's lambda_boundary().
 
Special flags
enum  
 Whether to visit the skeleton methods from both sides.
 
enum  
 Wheter the local operator describes a linear problem.
 

Public Member Functions

bool requireSetup ()
 
template<typename EG , typename LFSU , typename X , typename LFSV , typename Y >
void alpha_volume (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, Y &y) const
 Prepare underlying diagonal block preconditioner.
 
template<typename IG , typename LFSU , typename X , typename LFSV , typename Y >
void alpha_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, Y &y_s, Y &y_n) const
 Provide this method, but it actually does not nothing.
 
template<typename EG , typename LFSU , typename X , typename LFSV , typename Y >
void alpha_volume_post_skeleton (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, Y &y) const
 Provide this method, but it actually does nothing.
 
template<typename EG , typename LFSU , typename X , typename LFSV , typename Y >
void jacobian_apply_volume (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, Y &y) const
 Linear operator application, volume terms.
 
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
 linearized operator application, volume terms
 
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
 Gather off-block-diagonals in Gauss-Seidel process of linear operator.
 
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
 Gather off-block-diagonals in Gauss-Seidel process of linearized operator.
 
template<typename EG , typename LFSU , typename X , typename LFSV , typename Y >
void jacobian_apply_volume_post_skeleton (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, Y &y) const
 Apply preconditioner after skeleton terms, linear version.
 
template<typename EG , typename LFSU , typename X , typename Z , typename LFSV , typename Y >
void jacobian_apply_volume_post_skeleton (const EG &eg, const LFSU &lfsu, const X &x, const Z &z, const LFSV &lfsv, Y &y) const
 apply preconditioner after skeleton terms, linearized version
 

Detailed Description

template<typename JacobianLOP, typename BlockOffDiagonalLOP, typename GridFunctionSpace>
class Dune::PDELab::BlockSORPreconditionerLocalOperator< JacobianLOP, BlockOffDiagonalLOP, GridFunctionSpace >

Turn a matrix-free Jacobi-type local preconditioner to a SOR one.

This preconditioner assumes that we have a discretization that leads to a block structure, e.g. DG methods. It can be used to do a matrix-free block-SOR preconditioner step.

Given a linear system of equations Ax=b, a preconditioner step solves Wv=d for a given vector d and an approximation $W \approx A$.

Using the block decomposition $A=D+L+U$ block-SOR can be implemented in the following way (approximately solving Av=d).

for element T_i, i=1,...,m do: (1) a_i = d_i - \sum_{j<i} A_{ij} v_j^{(k)} - \sum_{j>i} A_{ij} v_j^{(k-1)} (2) Solve D_i b_i = a_i (3) Update v_i^{(k)} = (1-\omega) v_i^{(k-1)} + \omega b_i

Here d_i, a_i, ... denote a local vector from the global block vector and A_{ij} is the block (i,j) of the global block matrix A.

See the artice "Matrix-free multigrid block-preconditioners for higher order discontinuous Galerkin discretisations" by P. Bastian, E. Mueller, S. Muething and M. Piatkowski.

Template Parameters
JacobianLOPType of the Jacobi preconditioner local operator
BlockOffDiagonalLOPType of the local operator for assembling the block off diagonal
GridFunctionSpaceThe type of grid function space.

Member Function Documentation

◆ requireSetup()

template<typename JacobianLOP , typename BlockOffDiagonalLOP , typename GridFunctionSpace >
bool Dune::PDELab::BlockSORPreconditionerLocalOperator< JacobianLOP, BlockOffDiagonalLOP, GridFunctionSpace >::requireSetup ( )
inline

We use a Jacobi preconditioner that requires a setup. The setup will be done in the alpha-volume method and later be used during the apply methods.


The documentation for this class was generated from the following file:
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Jul 15, 22:36, 2024)