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>

List of all members.

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_

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 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.

Template Parameters:
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

Member Enumeration Documentation

template<class Matrix, class Domain, class Range, class ParallelInfoT>
anonymous enum
Enumerator:
category 

The category the preconditioner is part of.


Constructor & Destructor Documentation

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

Parameters:
A The matrix to operate on.
n ILU fill in level (for testing). This does not work in parallel.
w The relaxation factor.
template<class Matrix, class Domain, class Range, class ParallelInfoT>
template<class BlockType , class Alloc >
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.

Parameters:
A The matrix to operate on.
w The relaxation factor.
template<class Matrix, class Domain, class Range, class ParallelInfoT>
template<class BlockType , class Alloc >
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.

Parameters:
A The matrix to operate on.
comm communication object, e.g. Dune::OwnerOverlapCopyCommunication
w The relaxation factor.

Member Function Documentation

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

Apply the preconditoner.

template<class Matrix, class Domain, class Range, class ParallelInfoT>
virtual void Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::post ( Range &  x  )  [inline, virtual]

Clean up.

template<class Matrix, class Domain, class Range, class ParallelInfoT>
virtual void Opm::ParallelOverlappingILU0< Matrix, Domain, Range, ParallelInfoT >::pre ( Domain &  x,
Range &  b 
) [inline, virtual]

Prepare the preconditioner.


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

Generated on 26 Mar 2018 by  doxygen 1.6.1