My Project
Loading...
Searching...
No Matches
Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT > Class Template Reference

A two-step version of an overlapping Schwarz preconditioner using one step ILU0 as. More...

#include <ParallelOverlappingILU0.hpp>

Inheritance diagram for Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >:
Dune::PreconditionerWithUpdate< Domain, Range >

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
 

Public Member Functions

virtual bool hasPerfectUpdate () const override
 
Dune::SolverCategory::Category category () const override
 
 ParallelOverlappingILU0 (const Matrix &A, const int n, const field_type w, MILU_VARIANT milu, bool redblack=false, bool reorder_sphere=true)
 Constructor.
 
 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.
 
 ParallelOverlappingILU0 (const Matrix &A, const field_type w, MILU_VARIANT milu, bool redblack=false, bool reorder_sphere=true)
 Constructor.
 
 ParallelOverlappingILU0 (const Matrix &A, const ParallelInfo &comm, const field_type w, MILU_VARIANT milu, bool redblack=false, bool reorder_sphere=true)
 Constructor.
 
 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.
 
void pre (Domain &, Range &) override
 Prepare the preconditioner.
 
void apply (Domain &v, const Range &d) override
 Apply the preconditoner.
 
template<class V >
void copyOwnerToAll (V &v) const
 
void post (Range &) override
 Clean up.
 
void update () override
 

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_
 

Detailed Description

template<class Matrix, class Domain, class Range, class ParallelInfoT>
class Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >

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.

Template Parameters
MatrixThe type of the Matrix.
DomainThe type of the Vector representing the domain.
RangeThe type of the Vector representing the range.
ParallelInfoThe type of the parallel information object used, e.g. Dune::OwnerOverlapCommunication

Constructor & Destructor Documentation

◆ ParallelOverlappingILU0() [1/5]

template<class Matrix , class Domain , class Range , class ParallelInfoT >
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.

Parameters
AThe matrix to operate on.
nILU fill in level (for testing). This does not work in parallel.
wThe relaxation factor.
miluThe modified ILU variant to use. 0 means traditional ILU.
See also
MILU_VARIANT.
Parameters
redblackWhether to use a red-black ordering.
reorder_sphereIf 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.

◆ ParallelOverlappingILU0() [2/5]

template<class Matrix , class Domain , class Range , class ParallelInfoT >
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.

Parameters
AThe matrix to operate on.
commcommunication object, e.g. Dune::OwnerOverlapCopyCommunication
nILU fill in level (for testing). This does not work in parallel.
wThe relaxation factor.
miluThe modified ILU variant to use. 0 means traditional ILU.
See also
MILU_VARIANT.
Parameters
redblackWhether to use a red-black ordering.
reorder_sphereIf 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.

◆ ParallelOverlappingILU0() [3/5]

template<class Matrix , class Domain , class Range , class ParallelInfoT >
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.

Parameters
AThe matrix to operate on.
wThe relaxation factor.
miluThe modified ILU variant to use. 0 means traditional ILU.
See also
MILU_VARIANT.
Parameters
redblackWhether to use a red-black ordering.
reorder_sphereIf 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.

◆ ParallelOverlappingILU0() [4/5]

template<class Matrix , class Domain , class Range , class ParallelInfoT >
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.

Parameters
AThe matrix to operate on.
commcommunication object, e.g. Dune::OwnerOverlapCopyCommunication
wThe relaxation factor.
miluThe modified ILU variant to use. 0 means traditional ILU.
See also
MILU_VARIANT.
Parameters
redblackWhether to use a red-black ordering.
reorder_sphereIf 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.

◆ ParallelOverlappingILU0() [5/5]

template<class Matrix , class Domain , class Range , class ParallelInfoT >
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.

Parameters
AThe matrix to operate on.
nILU fill in level (for testing). This does not work in parallel.
wThe relaxation factor.
miluThe modified ILU variant to use. 0 means traditional ILU.
See also
MILU_VARIANT.
Parameters
interiorSizeThe number of interior/owner rows in the matrix.
redblackWhether to use a red-black ordering.
reorder_sphereIf 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.

Member Function Documentation

◆ apply()

template<class Matrix , class Domain , class Range , class ParallelInfoT >
void Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::apply ( Domain &  v,
const Range &  d 
)
override

Apply the preconditoner.

◆ hasPerfectUpdate()

template<class Matrix , class Domain , class Range , class ParallelInfoT >
virtual bool Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::hasPerfectUpdate ( ) const
inlineoverridevirtual

◆ post()

template<class Matrix , class Domain , class Range , class ParallelInfoT >
void Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::post ( Range &  )
inlineoverride

Clean up.

◆ pre()

template<class Matrix , class Domain , class Range , class ParallelInfoT >
void Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::pre ( Domain &  ,
Range &   
)
inlineoverride

Prepare the preconditioner.

◆ update()

template<class Matrix , class Domain , class Range , class ParallelInfoT >
void Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::update ( )
overridevirtual

The documentation for this class was generated from the following files: