|
My Project
|
A two-step version of an overlapping Schwarz preconditioner using one step ILU0 as. More...
#include <ParallelOverlappingILU0.hpp>
Classes | |
| struct | CRS |
Public Types | |
| using | matrix_type = typename std::remove_const< Matrix >::type |
| The matrix type the preconditioner is for. | |
| using | domain_type = Domain |
| The domain type of the preconditioner. | |
| using | range_type = Range |
| The range type of the preconditioner. | |
| using | field_type = typename Domain::field_type |
| The field type of the preconditioner. | |
| using | block_type = typename matrix_type::block_type |
| using | size_type = typename matrix_type::size_type |
Protected Member Functions | |
| Range & | reorderD (const Range &d) |
| Reorder D if needed and return a reference to it. | |
| Domain & | reorderV (Domain &v) |
| Reorder V if needed and return a reference to it. | |
| void | reorderBack (const Range &reorderedV, Range &v) |
Protected Attributes | |
| std::unique_ptr< Matrix > | ILU_ |
| The ILU0 decomposition of the matrix. | |
| CRS | lower_ |
| CRS | upper_ |
| std::vector< block_type > | inv_ |
| std::vector< std::size_t > | ordering_ |
| the reordering of the unknowns | |
| Range | reorderedD_ |
| The reordered right hand side. | |
| Domain | reorderedV_ |
| The reordered left hand side. | |
| const ParallelInfo * | comm_ |
| const field_type | w_ |
| The relaxation factor to use. | |
| const bool | relaxation_ |
| size_type | interiorSize_ |
| const Matrix * | A_ |
| int | iluIteration_ |
| MILU_VARIANT | milu_ |
| bool | redBlack_ |
| bool | reorderSphere_ |
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 following way: During apply we make sure that the current residual is consistent (i.e. each process knows the same value for each index. Then 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 |
| Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::ParallelOverlappingILU0 | ( | const Matrix & | A, |
| const int | n, | ||
| const field_type | w, | ||
| MILU_VARIANT | milu, | ||
| bool | redblack = false, |
||
| bool | reorder_sphere = true |
||
| ) |
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. |
| milu | The modified ILU variant to use. 0 means traditional ILU. |
| redblack | Whether to use a red-black ordering. |
| reorder_sphere | If true, we start the reordering at a root node. The vertices on each layer aound it (same distance) are ordered consecutivly. If false, we preserver the order of the vertices with the same color. |
| Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::ParallelOverlappingILU0 | ( | const Matrix & | A, |
| const ParallelInfo & | comm, | ||
| const int | n, | ||
| const field_type | w, | ||
| MILU_VARIANT | milu, | ||
| bool | redblack = false, |
||
| bool | reorder_sphere = true |
||
| ) |
Constructor gets all parameters to operate the prec.
| A | The matrix to operate on. |
| comm | communication object, e.g. Dune::OwnerOverlapCopyCommunication |
| n | ILU fill in level (for testing). This does not work in parallel. |
| w | The relaxation factor. |
| milu | The modified ILU variant to use. 0 means traditional ILU. |
| redblack | Whether to use a red-black ordering. |
| reorder_sphere | If true, we start the reordering at a root node. The vertices on each layer aound it (same distance) are ordered consecutivly. If false, we preserver the order of the vertices with the same color. |
| Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::ParallelOverlappingILU0 | ( | const Matrix & | A, |
| const field_type | w, | ||
| MILU_VARIANT | milu, | ||
| bool | redblack = false, |
||
| bool | reorder_sphere = true |
||
| ) |
Constructor.
Constructor gets all parameters to operate the prec.
| A | The matrix to operate on. |
| w | The relaxation factor. |
| milu | The modified ILU variant to use. 0 means traditional ILU. |
| redblack | Whether to use a red-black ordering. |
| reorder_sphere | If true, we start the reordering at a root node. The vertices on each layer aound it (same distance) are ordered consecutivly. If false, we preserver the order of the vertices with the same color. |
| Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::ParallelOverlappingILU0 | ( | const Matrix & | A, |
| const ParallelInfo & | comm, | ||
| const field_type | w, | ||
| MILU_VARIANT | milu, | ||
| bool | redblack = false, |
||
| bool | reorder_sphere = true |
||
| ) |
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. |
| milu | The modified ILU variant to use. 0 means traditional ILU. |
| redblack | Whether to use a red-black ordering. |
| reorder_sphere | If true, we start the reordering at a root node. The vertices on each layer aound it (same distance) are ordered consecutivly. If false, we preserver the order of the vertices with the same color. |
| Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::ParallelOverlappingILU0 | ( | const Matrix & | A, |
| const ParallelInfo & | comm, | ||
| const field_type | w, | ||
| MILU_VARIANT | milu, | ||
| size_type | interiorSize, | ||
| bool | redblack = false, |
||
| bool | reorder_sphere = true |
||
| ) |
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. |
| milu | The modified ILU variant to use. 0 means traditional ILU. |
| interiorSize | The number of interior/owner rows in the matrix. |
| redblack | Whether to use a red-black ordering. |
| reorder_sphere | If true, we start the reordering at a root node. The vertices on each layer aound it (same distance) are ordered consecutivly. If false, we preserver the order of the vertices with the same color. |
|
override |
Apply the preconditoner.
|
inlineoverridevirtual |
Implements Dune::PreconditionerWithUpdate< Domain, Range >.
|
inlineoverride |
Clean up.
|
inlineoverride |
Prepare the preconditioner.
|
overridevirtual |
Implements Dune::PreconditionerWithUpdate< Domain, Range >.