A two-step version of an overlapping Schwarz preconditioner using one step ILU0 as. More...
#include <ParallelOverlappingILU0.hpp>
Classes | |
struct | CRS |
Public Types | |
enum | { category = std::is_same<ParallelInfoT, overlapping } |
typedef std::remove_const < Matrix >::type | matrix_type |
The matrix type the preconditioner is for. | |
typedef Domain | domain_type |
The domain type of the preconditioner. | |
typedef Range | range_type |
The range type of the preconditioner. | |
typedef Domain::field_type | field_type |
The field type of the preconditioner. | |
typedef matrix_type::block_type | block_type |
typedef matrix_type::size_type | size_type |
Public Member Functions | |
template<class BlockType , class Alloc > | |
ParallelOverlappingILU0 (const Dune::BCRSMatrix< BlockType, Alloc > &A, const int n, const field_type w) | |
Constructor. | |
template<class BlockType , class Alloc > | |
ParallelOverlappingILU0 (const Dune::BCRSMatrix< BlockType, Alloc > &A, const field_type w) | |
Constructor. | |
template<class BlockType , class Alloc > | |
ParallelOverlappingILU0 (const Dune::BCRSMatrix< BlockType, Alloc > &A, const ParallelInfo &comm, const field_type w) | |
Constructor. | |
virtual void | pre (Domain &x, Range &b) |
Prepare the preconditioner. | |
virtual void | apply (Domain &v, const Range &d) |
Apply the preconditoner. | |
template<class V > | |
void | copyOwnerToAll (V &v) const |
virtual void | post (Range &x) |
Clean up. | |
Protected Member Functions | |
void | init (const Matrix &A, const int iluIteration) |
Protected Attributes | |
CRS | lower_ |
The ILU0 decomposition of the matrix. | |
CRS | upper_ |
std::vector< block_type > | inv_ |
const ParallelInfo * | comm_ |
const field_type | w_ |
The relaxation factor to use. | |
const bool | relaxation_ |
A two-step version of an overlapping Schwarz preconditioner using one step ILU0 as.
This preconditioner differs from a ParallelRestrictedOverlappingSchwarz with Dune:SeqILU0 in the follwing way: During apply we make sure that the current residual is consistent (i.e. each process knows the same value for each index. The we solve Ly= d for y and make y consistent again. Last we solve Ux = y and make sure that x is consistent. In contrast for ParallelRestrictedOverlappingSchwarz we solve (LU)x = d for x without forcing consistency between the two steps.
Matrix | The type of the Matrix. | |
Domain | The type of the Vector representing the domain. | |
Range | The type of the Vector representing the range. | |
ParallelInfo | The type of the parallel information object used, e.g. Dune::OwnerOverlapCommunication |
anonymous enum |
Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::ParallelOverlappingILU0 | ( | const Dune::BCRSMatrix< BlockType, Alloc > & | A, | |
const int | n, | |||
const field_type | w | |||
) | [inline] |
Constructor.
Constructor gets all parameters to operate the prec.
A | The matrix to operate on. | |
n | ILU fill in level (for testing). This does not work in parallel. | |
w | The relaxation factor. |
Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::ParallelOverlappingILU0 | ( | const Dune::BCRSMatrix< BlockType, Alloc > & | A, | |
const field_type | w | |||
) | [inline] |
Constructor.
Constructor gets all parameters to operate the prec.
A | The matrix to operate on. | |
w | The relaxation factor. |
Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::ParallelOverlappingILU0 | ( | const Dune::BCRSMatrix< BlockType, Alloc > & | A, | |
const ParallelInfo & | comm, | |||
const field_type | w | |||
) | [inline] |
Constructor.
Constructor gets all parameters to operate the prec.
A | The matrix to operate on. | |
comm | communication object, e.g. Dune::OwnerOverlapCopyCommunication | |
w | The relaxation factor. |
virtual void Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::apply | ( | Domain & | v, | |
const Range & | d | |||
) | [inline, virtual] |
Apply the preconditoner.
virtual void Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::post | ( | Range & | x | ) | [inline, virtual] |
Clean up.
virtual void Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::pre | ( | Domain & | x, | |
Range & | b | |||
) | [inline, virtual] |
Prepare the preconditioner.