Loading...
Searching...
No Matches
Opm::ParallelRestrictedOverlappingSchwarz< Range, Domain, ParallelInfo, SeqPreconditioner > Class Template Reference

Block parallel preconditioner. More...

`#include <ParallelRestrictedAdditiveSchwarz.hpp>`

Inheritance diagram for Opm::ParallelRestrictedOverlappingSchwarz< Range, Domain, ParallelInfo, SeqPreconditioner >:

## Public Types

enum | { category =Dune::SolverCategory::overlapping }
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 ParallelInfo | communication_type
| The type of the communication object.

## Public Member Functions

| ParallelRestrictedOverlappingSchwarz (SeqPreconditioner &p, const communication_type &c)
| Constructor.
virtual void | pre (Domain &x, Range &b)
| Prepare the preconditioner.
virtual void | apply (Domain &v, const Range &d)
| Apply the preconditioner.
template<bool forward>
void | apply (Domain &v, const Range &d)
virtual void | post (Range &x)
| Clean up.

## Friends

class | Dune::Amg ::ConstructionTraits< ParallelRestrictedOverlappingSchwarz< Range, Domain, ParallelInfo, SeqPreconditioner > >

## Detailed Description

template<class Range, class Domain, class ParallelInfo, class SeqPreconditioner = Dune::Preconditioner<Range,Domain>>
class Opm::ParallelRestrictedOverlappingSchwarz< Range, Domain, ParallelInfo, SeqPreconditioner >

Block parallel preconditioner.

This is essentially a wrapper that takes a sequential preconditioner. In each step the sequential preconditioner is applied to the whole subdomain and then all owner data points are updated on all other processes from the processor that knows the complete matrix row for this data point (in dune-istl speak that is the one that owns the data).

Note that this is different from the usual approach in dune-istl where the application of the sequential preconditioner only takes place on the (owner) partition of the process disregarding any overlap/ghost region.

For more information see https://www.cs.colorado.edu/~cai/papers/rash.pdf

Template Parameters

  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
  SeqPreconditioner | The underlying sequential preconditioner to use.

## Member Enumeration Documentation

## anonymous enum

template<class Range, class Domain, class ParallelInfo, class SeqPreconditioner = Dune::Preconditioner<Range,Domain>>

anonymous enum

Enumerator
category | The category the precondtioner is part of.

## Constructor & Destructor Documentation

## ParallelRestrictedOverlappingSchwarz()

template<class Range, class Domain, class ParallelInfo, class SeqPreconditioner = Dune::Preconditioner<Range,Domain>>

Opm::ParallelRestrictedOverlappingSchwarz< Range, Domain, ParallelInfo, SeqPreconditioner >::ParallelRestrictedOverlappingSchwarz | ( | SeqPreconditioner & | p,
|  | const communication_type & | c )

inline

Constructor.

constructor gets all parameters to operate the prec.

Parameters

  p | The sequential preconditioner.
  c | The communication object for syncing overlap and copy data points. (E.~g. OwnerOverlapCommunication )

## Member Function Documentation

## apply()

template<class Range, class Domain, class ParallelInfo, class SeqPreconditioner = Dune::Preconditioner<Range,Domain>>

virtual void Opm::ParallelRestrictedOverlappingSchwarz< Range, Domain, ParallelInfo, SeqPreconditioner >::apply | ( | Domain & | v,
|  | const Range & | d )

inline virtual

Apply the preconditioner.

## post()

template<class Range, class Domain, class ParallelInfo, class SeqPreconditioner = Dune::Preconditioner<Range,Domain>>

virtual void Opm::ParallelRestrictedOverlappingSchwarz< Range, Domain, ParallelInfo, SeqPreconditioner >::post | ( | Range & | x | ) |

inline virtual

Clean up.

## pre()

template<class Range, class Domain, class ParallelInfo, class SeqPreconditioner = Dune::Preconditioner<Range,Domain>>

virtual void Opm::ParallelRestrictedOverlappingSchwarz< Range, Domain, ParallelInfo, SeqPreconditioner >::pre | ( | Domain & | x,
|  | Range & | b )

inline virtual

Prepare the preconditioner.

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

- opm/simulators/linalg/ParallelRestrictedAdditiveSchwarz.hpp