47#ifndef __Teko_SmootherPreconditionerFactory_hpp__
48#define __Teko_SmootherPreconditionerFactory_hpp__
51#include "Teko_PreconditionerFactory.hpp"
52#include "Teko_ImplicitLinearOp.hpp"
53#include "Teko_RequestHandlerContainer.hpp"
63 SmootherLinearOp(
const LinearOp & A,
const LinearOp & invM,
unsigned int applications,
bool useDestAsInitialGuess=
false);
64 SmootherLinearOp(
const LinearOp & A,
const LinearOp & invM,
unsigned int applications,
unsigned int block);
67 virtual VectorSpace
range()
const
68 {
return invM_->range(); }
72 {
return invM_->domain(); }
87 virtual void implicitApply(
const MultiVector & x, MultiVector & y,
88 const double alpha = 1.0,
const double beta = 0.0)
const;
98 typedef enum {Unspecified, RequestInitialGuess, DestAsInitialGuess, NoInitialGuess} InitialGuessType;
102 unsigned int applications_;
103 InitialGuessType initialGuessType_;
106 Teuchos::RCP<RequestMesg> requestMesg_;
109 Teuchos::RCP<RequestHandler> requestHandler_;
112 SmootherLinearOp(
const SmootherLinearOp &);
115LinearOp buildSmootherLinearOp(
const LinearOp & A,
const LinearOp & invM,
unsigned int applications,
bool useDestAsInitialGuess=
false);
116LinearOp buildSmootherLinearOp(
const LinearOp & A,
const LinearOp & invM,
unsigned int applications,
unsigned int initialGuessBlock);
120class SmootherPreconditionerFactory
124 SmootherPreconditionerFactory();
139 virtual LinearOp buildPreconditionerOperator(LinearOp & lo,PreconditionerState & state)
const;
154 virtual void initializeFromParameterList(
const Teuchos::ParameterList & settings);
160 typedef enum {Unspecified, RequestInitialGuess, DestAsInitialGuess, NoInitialGuess} InitialGuessType;
163 unsigned int sweepCount_;
164 InitialGuessType initialGuessType_;
165 unsigned int initialGuessBlock_;
168 Teuchos::RCP<Teko::InverseFactory> precFactory_;
A virtual class that simplifies the construction of custom operators.
Abstract class which block preconditioner factories in Teko should be based on.
virtual VectorSpace range() const
Range space of this operator.
virtual void setRequestHandler(const Teuchos::RCP< RequestHandler > &rh)
Set the request handler with pointers to the appropriate callbacks.
virtual void implicitApply(const MultiVector &x, MultiVector &y, const double alpha=1.0, const double beta=0.0) const
Perform a matrix vector multiply with this implicitly defined blocked operator.
virtual VectorSpace domain() const
Domain space of this operator.
virtual Teuchos::RCP< RequestHandler > getRequestHandler() const
Get the request handler with pointers to the appropriate callbacks.