Ifpack2 Templated Preconditioning Package
Version 1.0
|
Mix-in interface for nested preconditioners. More...
#include <Ifpack2_Details_NestedPreconditioner.hpp>
Public Member Functions | |
virtual void | setInnerPreconditioner (const Teuchos::RCP< PrecType > &innerPrec)=0 |
Set the inner preconditioner. More... | |
Mix-in interface for nested preconditioners.
PrecType | Specialization of Ifpack2::Preconditioner |
An Ifpack2 preconditioner (a subclass of Ifpack2::Preconditioner) may inherit from this interface in order to express the following
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.
*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.
|
pure virtual |
Set the inner preconditioner.
innerPrec | [in/out] The inner preconditioner. Its matrix (if it has one) may be replaced by a matrix specified by the outer (this) preconditioner. |
*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.&*innerPrec != this
.