|
|
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...
|
|
|
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...
|
|
|
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...
|
|
|
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...
|
|
|
enum | { doSkeletonTwoSided
} |
| Whether to visit the skeleton methods from both sides. More...
|
|
enum | { isLinear
} |
| Wheter the local operator describes a linear problem. More...
|
|
|
| BlockSORPreconditionerLocalOperator (JacobianLOP &jacobianlop, BlockOffDiagonalLOP &blockOffDiagonalLOP, const GridFunctionSpace &gridFunctionSpace, const double omega=1.0) |
|
bool | requireSetup () |
|
void | setRequireSetup (bool v) |
|
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. More...
|
|
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. More...
|
|
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. More...
|
|
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. More...
|
|
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 More...
|
|
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. More...
|
|
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. More...
|
|
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. More...
|
|
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 More...
|
|
template<typename LFSU , typename LFSV , typename LocalPattern > |
void | pattern_volume (const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern) const |
|
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
-
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. |