DUNE PDELab (unstable)
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
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
 - 
  
JacobianLOP Type of the Jacobi preconditioner local operator BlockOffDiagonalLOP Type of the local operator for assembling the block off diagonal GridFunctionSpace The type of grid function space.  
Member Function Documentation
◆ 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:
- dune/pdelab/backend/istl/matrixfree/blocksorpreconditioner.hh
 
   | 
                                Legal Statements / Impressum  | 
                                Hosted by  TU Dresden & Uni Heidelberg  | 
				  generated with Hugo v0.111.3
								(Nov 3, 23:36, 2025)