10#ifndef __Teko_DiagonalPreconditionerOp_hpp__
11#define __Teko_DiagonalPreconditionerOp_hpp__
14#include "Teko_ImplicitLinearOp.hpp"
18template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
19class PointToBlockDiagPermute;
25class DiagonalPreconditionerOp :
public ImplicitLinearOp {
28 DiagonalPreconditionerOp(Teuchos::RCP<Tpetra::Ext::PointToBlockDiagPermute<ST, LO, GO, NT>> BDP,
29 const VectorSpace range,
const VectorSpace domain);
32 virtual VectorSpace range()
const {
return range_; }
35 virtual VectorSpace domain()
const {
return domain_; }
49 virtual void implicitApply(
const MultiVector &x, MultiVector &y,
const double alpha = 1.0,
50 const double beta = 0.0)
const;
52 virtual void describe(Teuchos::FancyOStream &out_arg,
53 const Teuchos::EVerbosityLevel verbLevel)
const;
55 Teuchos::RCP<Tpetra::Ext::PointToBlockDiagPermute<ST, LO, GO, NT>> get_BDP()
const {
60 Teuchos::RCP<Tpetra::Ext::PointToBlockDiagPermute<ST, LO, GO, NT>> BDP_;
61 const VectorSpace range_, domain_;