DUNE PDELab (git)
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