Ifpack2 Templated Preconditioning Package  Version 1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
Public Member Functions
Ifpack2::Details::NestedPreconditioner< PrecType > Class Template Reference

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

#include <Ifpack2_Details_NestedPreconditioner.hpp>

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

List of all members.

Public Member Functions

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

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:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends