Ifpack2 Templated Preconditioning Package  Version 1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Member Functions | List of all members
Ifpack2::Details::NestedPreconditioner< PrecType > Class Template Referenceabstract

Mix-in interface for nested preconditioners. More...

#include <Ifpack2_Details_NestedPreconditioner.hpp>

Inheritance diagram for Ifpack2::Details::NestedPreconditioner< PrecType >:
Inheritance graph
[legend]

Public Member Functions

virtual void setInnerPreconditioner (const Teuchos::RCP< PrecType > &innerPrec)=0
 Set the inner preconditioner. More...
 

Detailed Description

template<class PrecType>
class Ifpack2::Details::NestedPreconditioner< PrecType >

Mix-in interface for nested preconditioners.

Template Parameters
PrecTypeSpecialization of Ifpack2::Preconditioner
Warning
This class is an implementation detail of Ifpack2. Users must not depend on this class.

An Ifpack2 preconditioner (a subclass of Ifpack2::Preconditioner) may inherit from this interface in order to express the following

  1. It has a nested structure (it is an "outer preconditioner" that uses an "inner preconditioner")
  2. It can accept an arbitrary "inner preconditioner" at any time.

For example, AdditiveSchwarz is an "outer preconditioner" that uses an "inner preconditioner" as the subdomain solver.

When an outer preconditioner gets a new inner preconditioner, it must pass the "inner matrix" (for example, a local filter of the overlap matrix, in the case of AdditiveSchwarz) to the inner preconditioner. This necessitates calling the inner preconditioner's setMatrix() method. That puts the inner preconditioner in a "pre-initialized" state (since the structure of the matrix may have changed). It is up to the outer preconditioner whether to call initialize() and compute() on the inner preconditioner. As a result, users should consider setInnerPreconditioner() a collective. Furthermore, implementations are responsible for making sure (by attempting a dynamic cast to CanChangeMatrix) that the inner preconditioner's matrix can be changed.

Warning
CIRCULAR DEPENDENCIES ARE FORBIDDEN. You may NOT give this object (*this) to itself as an inner solver. You MAY use an inner solver of the same TYPE as this object (as long as this makes sense mathematically), but it must be a different instance. Implementations are strongly encouraged to check for this case.

Member Function Documentation

template<class PrecType>
virtual void Ifpack2::Details::NestedPreconditioner< PrecType >::setInnerPreconditioner ( const Teuchos::RCP< PrecType > &  innerPrec)
pure virtual

Set the inner preconditioner.

Parameters
innerPrec[in/out] The inner preconditioner. Its matrix (if it has one) may be replaced by a matrix specified by the outer (this) preconditioner.
Warning
CIRCULAR DEPENDENCIES ARE FORBIDDEN. You may NOT give this object (*this) to itself as an inner solver. You MAY use an inner solver of the same TYPE as this object (as long as this makes sense mathematically), but it must be a different instance.
Precondition
&*innerPrec != this.

Implemented in Ifpack2::AdditiveSchwarz< MatrixType, LocalInverseType >.


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