Local operator that can be used to create a fully matrix-free Jacobi preconditioner.
More...
|
|
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...
|
|
|
| IterativeBlockJacobiPreconditionerLocalOperator (const BlockDiagonalLocalOperator &blockDiagonalLocalOperator, const PointDiagonalLocalOperator &pointDiagonalLocalOperator, const GridFunctionSpace &gridFunctionSpace, SolverStatistics< int > &solverStatiscits, BlockSolverOptions solveroptions, const bool verbose=0) |
| Constructor.
|
|
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 fully matrix-free preconditioner.
|
|
template<typename EG , typename LFSU , typename Z , typename LFSV , typename Y > |
void | jacobian_apply_volume (const EG &eg, const LFSU &lfsu, const Z &z, const LFSV &lfsv, Y &y) const |
| Apply fully matrix-free preconditioner - linear case.
|
|
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 |
| Apply fully matrix-free preconditioner - nonlinear case.
|
|
template<typename LFSU , typename LFSV , typename LocalPattern > |
void | pattern_volume (const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern) const |
|
template<typename BlockDiagonalLocalOperator, typename PointDiagonalLocalOperator, typename
GridFunctionSpace, typename DomainField, template< typename > class IterativeSolver>
class Dune::PDELab::IterativeBlockJacobiPreconditionerLocalOperator< BlockDiagonalLocalOperator, PointDiagonalLocalOperator, GridFunctionSpace, DomainField, IterativeSolver >
Local operator that can be used to create a fully matrix-free Jacobi preconditioner.
Similar to the partial matrix-free class AssembledBlockJacobiPreconditionerLocalOperator this implements a local operator that can be used to implement a matrix-free Jacobi preconditioner. In contrast to the other class this implementation will be fully matrix-free.
A matrix-free Jacobi preconditioner needs to be able to apply the inverse of the block diagonal D to a vector. In the partial matrix-free class mentioned above this was done by assembling the diagonal blocks and inverting this matrix. In order to get a fully matrix-free version we instead use a Krylow solver on the diagonal block. This can once again be done in a matrix-free way but we will need a preconditioner for iterative solver. For this purpose we use another Jacobi preconditioner that operates on a single block. This means we need to assemble the point diagonal of this block and apply the inverse.
For examples see dune-pdelab/dune/pdelab/test/matrixfree/.
- Template Parameters
-
BlockDiagonalLocalOperator | A lop for local application of diagonal blocks |
PointDiagonalLocalOperator | A lop for local assembly of point diagonal |
GridFunctionSpace | A grid function space |
DomainField | Domain field |
IterativeSolver | Solver that will be used to 'invert' the diagonal blocks |